{"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","PollingService","DownloadFileService","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","catalogPoller","catalog_in_process","create","pollFn","$promise","checkCondition","onComplete","catalog","onError","error","interval","start","$on","stop","downloadExcel","url","urls","saleOrdersDownloadExcel","replace","post","responseType","downloadImages","saleOrdersDownloadImages","downloadLink","target","blob","downloadUrl","webkitURL","appendChild","removeChild","revokeObjectURL","downloadCatalog","downloadFile","fillAll","onAutoUpdateProductsChange","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","result","taxes","push","provider_price","session","taxSearchText","getShowTaxesEvent","event","showTaxes","editable","showPriceTaxes","disableTaxes","ndPurchaseOrderDeliveryActionsController","PURCHASE_ORDER_STATUSES_REVERSE","PULLING_FREQUENCE","startPulling","timeout","purchaseOrderDeliveries","purchaseOrderDelivery","purchase_order_id","purchase_order","HTTP_404_NOT_FOUND","$broadcast","purchase_order_status","calculatePurchaseDdpCostPrice","purchaseOrderDeliveriesStatus","calculate_purchase_ddp_cost_price","success","action","hideDelay","highlightAction","location","reload","focusOnOpen","transfer","purchaseOrderDeliveriesTransfer","transfer_order","new_cost_product_prices","length","costProductPrices","catch","wrapped","reject","isUid","deliveryId","openDialogSetTaxToAllPurchaseOrderProducts","multiple","purchase","openDialogSetDiscountToAllPurchaseOrderProducts","purchaseId","printDelivery","contact","customDdpPrices","orderDelivery","isSaleOrderDelivery","isTransferOrderDelivery","isPurchaseOrderDelivery","orderBy","startPullingEvent","args","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","TemporaryAccountAccessData","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","Utils","ProductVariantPriceEdit","_delete","_options","deleting","deletePayload","product_price","product_variant","tax_percent_value","temp_price_excl_tax","temp_price_incl_tax","discount_price_excl_tax","discount_price_incl_tax","productVariantPrices","delete","HTTP_204_NO_CONTENT","formatFieldIfNeeded","fieldName","decimals","numericValue","parseFloat","String","split","roundPrice","clearPriceFields","clearDiscountPriceFields","initPriceFields","calculateMonetaryLine","requestData","monetary","monetaryCalculation","buildMonetaryRequest","quantity","percentage","basePrice","base_price","finalPrice","final_price","markTouched","isFunction","DEBOUNCE_INPUTS","updatePayload","toPartialPayload","resetTouchedFields","createPayload","priceExclTaxChanged","unit_final_price","$applyAsync","priceInclTaxChanged","unit_base_price","offerPercentValueChanged","offerPriceExclTaxChanged","fixedAmount","fixed_amount","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","LowStockPurchasesByProviderController","$timeout","UiGridService","$parent","currentNavItem","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","performAnalysis","performingAnalysis","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","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","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","HTTP_202_ACCEPTED","paginationCurrentPage","ReplenishmentsByWarehouseController","$mdSidenav","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","_MonetaryTaxDTO","MonetaryFiniteNumber","surchargePercentage","toFiniteNumber","surcharge_percentage","factory","_MonetaryLineFromFinalPriceDTO","MonetaryLineDTO","FixedMonetaryDiscountDTO","MonetaryRounder","MonetaryLineFromFinalPriceDTO","unitPrice","isDocumentDiscountEligible","call","prototype","constructor","getUnitBasePrice","baseBeforeDiscount","_extractBaseFromFinalPrice","roundUnitBase","_getDiscountAmountExclTax","getUnitBasePriceBeforeDiscount","totalTaxPercentage","getTotalTaxPercentage","baseAmountExclTax","calculateDiscountAmount","$inject","_MonetaryLineFromBasePriceDTO","MonetaryLineFromBasePriceDTO","_MonetaryLineDTO","isArray","Error","reduce","total","_PercentageMonetaryDiscountDTO","PercentageMonetaryDiscountDTO","baseAmount","_FixedMonetaryDiscountDTO","_FixedInclTaxMonetaryDiscountDTO","FixedInclTaxMonetaryDiscountDTO","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","NumericKeywordController","$mdMedia","updateFloat","recentDecimal","stringValue","insertValue","includes","toString","returnValue","removeValue","endsWith","clearValue","fillValue","Math","round","totalValue","toFixed","decimalPlaces","SetNumberDialogController","apply","unit","minusClicked","plusClicked","setValue","CashMovementDialogController","register","CASH_MOVEMENT_TYPES","movement","used_for_purchase","saveMovement","CASH_MOVEMENT_TYPE_OUTPUT","sales","cash_movements","openCashCounter","context","cashCounterContex","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","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_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","parameters","forceCustomer","forceNaturalPersonType","rerender","getCustomerText","phone","getUserText","printDevolutionCard","generated_devolution_card","autocompleteDisabled","showAssignCustomer","originalPosOrder","showChangeVendor","printPdf","isFeatureFlagEnabled","posOrdersPrintPdf","isSiteMissingTicketConfiguration","missingTicketConfigurationNoPermissionDialog","setTokenCookie","ERROR_01034_MISSING_TICKET_CONFIGURATION_FOR_WAREHOUSE_OR_SITE","bodyCopy","site_id","missingTicketConfigurationDialog","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","invoiceId","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","recalculateDiscounts","updateTotals","getPrice","subtotal","total_taxes","getTotalTaxes","getTaxQuantity","generateDevolutionCard","refundByPaymentMethod","refundByPaymentMethodCash","refundByPaymentMethodCard","inclTax","isRegenerateDevolutionCardPayingWorkflow","getBalance","max","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","cashFundChanged","cashToRemove","totalCashMovements","cashFund","closureNotes","totalPaymentAmounts","hideCashMovementColumns","closeRegister","closure_cash_movement_amount","closure_notes","register_activities","toast","clicked","tpa","CashCounterDialogController","bills","bill","coins","coin","SalesGoalDetailDialogController","salesGoal","showSalesGoalFormDialog","editSalesGoal","closeDialog","SalesGoalFormDialogController","SalesGoal","warehousesDict","saveSalesGoal","salesGoals","removeSalesGoal","getCurrency","w","dialogTitle","ToggleValidityDialogController","giftCard","targetValidity","confirmLabel","StockLocationDialogController","stockLocation","isSaving","stockLocationForm","stockLocations","deleteLocation","StockLocationSearchDialogController","fetchStockLocations","nextPageUrl","next","onScroll","el","scrollTop","clientHeight","scrollHeight","loadMore","loadingMoreData","filteredCategories","concat","finally","isLocationSelected","stock_locations","sl","toggleLocation","idx","getProductVariantName","product_name","size_name","color_name","stockLocationDialog","unshift","removeStockLocation","setTimeout","container","addEventListener","$watch","newVal","oldVal","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","TransferPrintDialogController","printOriginCodes","thermalPrinter","transferOrdersPrint","path","ndTransferOrderActionsController","transferOrderStatus","prepareAndShip","partiallyPrepare","screenIsBig","LoadingBarDialogController","ImportTransferProductsDialogController","transfer_order_products","transferOrderProductsImport","transferOrderDeliveryProductsImport","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","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","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","DeliveryPurchaseController","ChangeProviderController","overWriteNewProviderPrices","overwrite_new_provider_prices","toastText","BindInvoiceToOrderController","hasInvoices","orderId","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","notCatalog","notAllowB2bPreSales","allowB2bPreSales","selectedCode","selectedOriginCode","selectedGroupCode","selectedName","selectedShortDescription","selectedLongDescription","selectedSaleStoreComment","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","sale_store_comment","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","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","ndProductVariantsInformationController","GS1_BARCODE_TYPES_BY_NAME","NdBarcodeService","checkBarcodeUnique","barcodeAlreadyExists","checkBarcodeUniqueTimeout","getProductVariantPrices","fetchingProductVariantPrices","productVariantPricesAbortController","productVariantPricesMatrix","checkBarcodeInvalid","validEan13","validUpcA","barcodeInvalid","GS1_EAN_13","GS1_UPC_A","updateProductVariant","showWooCommerceBanner","variantsById","variantCategoriesById","pricingTiersById","pricesByPricingTierDict","productVariantsWithInvalidBarcode","backupCode","showPriceInclTax","showDeletedVariants","showDeleted","categoryIdByVariantId","productVariantsById","checkedVariants","editUnitCostPrice","pV","getProductVariantPricingTierPrice","productPrice","updateVariantPrice","$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","hasStock","getVariantTag","deleted","onShowDeletedVariantsClick","hasInvalidSku","site_platforms","ECOMMERCE_PLATFORM_WOOCOMMERCE","getInvalidSkuTooltip","indexof","variantId","categoryId","onCheckChanged","restoring","isCheckedSomeDeletableVariant","someDeletable","preExchangeProductVariant","selectedProductVariants","subjects","subjectsIds","is_merging","intervalPromise","hasProductVariants","getDynamicHeader","isFirstOption","placeholder","size_variants_instances","color_variants_instances","total_stock","variantsHasBeenUpdatedListener","updatedProduct","ndProductVariantsController","$cookies","sizeCategories","sizeCategoriesById","colorCategories","colorCategoriesById","collapse","firstOption","collapsed","secondOption","categoriesById","currentCategory","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","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","ProductPriceEdit","pricesMatrix","newEmptyProductPrice","focused","deregisterListener","saveProductPrices","pricingTierId","defaultTax","default","includeDelete","payload","upsertPayloads","pp","saved","bulk","bulkResults","productPricesForm","taxId","tmpTax","percent_value","hideDiscountWarning","latestFieldSet","lastFocused","cancelProductPrices","selectedPriceMatrixChanged","lastTax","tmpPricingTierId","getIsValid","priceTaxChanged","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","ndOrderDeliveryProductController","orderDeliveryProductVariantsByColorAndSize","saveOrderDeliveryProductVariant","orderDeliveryProductVariant","pointer","totals","prepared_amount","shipped_amount","received_amount","orderDeliveryProductVariants","order_product","order_delivery","ordered_amount","total_received_amount","total_prepared_amount","total_shipped_amount","sizeVariant","colorVariant","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","saleOrderProductVariants","sopv","totalAllocatedByColor","total_allocated_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","isSaleStoreCommentVisible","is_sample","CONTACT_TYPE_MANUFACTURER","providerChanged","compositionQuerySearch","compositionSearchText","compositionChanged","inventoryConfiguration","ecommerceProductRestrictions","ndProductEcommerceController","SiteProduct","ECOMMERCE_SYNC_OPTIONS","$sce","showForceVariations","tempColorDIct","tempSizeDIct","initExternalVariantIdsListBySite","siteProduct","externalVariantIdsListBySite","external_variant_ids","productVariantsDict","external_variant_id","initDatatable","siteId","dtColumnsBySite","notVisible","meta","withClass","dtOptionsBySite","drawCallback","initASiteProduct","saveSiteProduct","siteProductsDict","siteProducts","toJson","sitesDict","ECOMMERCE_PLATFORM_SHOPIFY","external_id","showForceCreationCheckbox","checkSyncSiteProductFinished","isImportation","importing","getSiteProduct","synchronizing","waiting_to_synchronize","siteProductId","showSyncColumn","ECOMMERCE_PLATFORM_ZALANDO","ECOMMERCE_PLATFORM_WIX","showForceSyncDialog","contentElement","settings","initExternalVariantsIdsDict","showForceSizeVariations","showForceColorVariations","dtInstancesBySite","searchProductVariantBySite","sites_data","categories_data","web_categories","syncSiteProduct","sync_enabled","force_creation","MARKETPLACE_PLATFORM_MIRAVIA","reauthentication_required","showAdminActions","isSuperAdmin","importProduct","external_ids","showErrors","xmlSnippet","xml_snippet","error_snippet","bindToController","rawMessage","error_message","trustAsHtml","min-width","showWarnings","warning_messages","warning_message","full_warning_messages","clickSiteSwitch","showLog","log","getButtonText","deleteSiteProduct","showDeleteButton","active","showErrorColumn","ECOMMERCE_PLATFORM_CUSTOM_API","showNeverSynchronizedText","ECOMMERCE_PLATFORM_CUSTOM_CSV","last_sync","showNeverStockSynchronizedText","last_stock_sync","showNextSyncText","next_sync","showActiveColumn","showForceSyncSizeDialog","showForceSyncColorDialog","showAndHideConfig","showConfig","searchWebCateogryText","isMiraviaProduct","only_leafs","showSyncButton","sync_stock_only","siteProductBlocked","selectedWebCategoryItem","selectedWebCategories","hasCustomOptions","hasCustomName","hasCustomDescription","hasCustomLongDescription","hasCustomCode","selectAllVariants","variantsList","existingVariants","sync_variants","newVariants","showSlug","searchVariants","searchTerm","checkEnterkey","external_variant_ids_visible","showInitExternalVariantsIdsDictDialog","canInitializeExternalVariantIdsDict","syncEnabledChanged","copyToClipboard","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","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","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","ndCsvEcommerceController","sitesRules","rules","backup","initMetadata","updateLeafs","saveEvent","cancelEvent","resetHipercalzadosCsv","destroyEvent","hasSelected","rule","toUpperCase","replaceAll","required","col","children","nameById","collectionById","available_collection","custom_name","getSelected","items","leafs","immersion","noTranslate","checkLeafsStatus","switchCollapsible","clearMetadata","ndAttributesCardController","AttributeCategory","Attribute","AttributeCategoryValue","addAttributeCategory","attributeCategory","newAttributeCategory","attributeCategories","ac","attributeCategoriesAutocomplete","attributeCategoryValue","attributecategory","attributecategory_instance","attributeCategoryValues","attributeAutocomplete","saveAttributeCategoryValues","hasChanges","originalAttributeCategoryValuesSnapshot","curr","orig","currComparable","text_value","json_value","int_value","decimal_value","origComparable","equals","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","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","ndAdjustmentOrderProductController","orderProductVariantsBySize","sourceStockByColorAndSize","product_variant__color","product_variant__size","VariantsSelectorDialogController","selectedVariantsIds","variantsByCategoryId","allCategories","selectedId","currentCategoryId","variantsFilter","selectVariantsForm","fixed","onSelectorChange","isSelected","selectSelectedVariants","XmlErrorDialogController","getLineRange","line","lines","end","min","escapeHtml","xmlContent","snippet","highlightRange","lineColumnMatch","match","lineMatch","offsetMatch","offset","charCodeAt","ampersandIndex","lastTagIndex","lastIndexOf","probableLine","highlightedText","segment","escaped","char","charAt","hex","copyXml","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","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","ChangeCoverDialogController","selectedImage","productImages","changeSelectedImage","img","is_cover","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","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","ndPickingPackingToPrepareListController","PICKABLE_ORDER_STATUS","gridApiInitializedUnwatch","pickingPackingPickableOrders","storageLabel","PICKABLE_ORDER_STATUS_PENDING","getSelectedGridRows","constructCellTemplateLink","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","rowClass","rowRenderIndex","colRenderIndex","payment_status","warning","parent_autocode","target_destination","actions","ndPickingPackingShippedListController","PACKING_STATUS","PACKING_ORDER_STATUS_COLORS","uiGridGroupingConstants","PICKABLE_ORDER_STATUS_SHIPPED","getGroupPackedAmount","groupHeader","treeNode","sum","packed_amount","getGroupTotalAmount","packing_order_id","assigned_to","ndPickingPackingPickingListController","PICKING_STATUS","PICKING_ORDER_STATUS_COLORS","PICKABLE_ORDER_STATUS_IN_PROGRESS","getGroupPickedAmount","picked_amount","picking_order_id","pending_picked_amount_not_finished","treeAggregationType","aggregation","SUM","customTreeAggregationFinalizerFn","rendered","ndPickingPackingPickedListController","PICKABLE_ORDER_STATUS_DONE","idRowCreated","openSendcloudLabelsDialog","posOrderFulfillments","selectedRows","posOrdersFulfillments","onLabelsGenerated","notifyDataChange","picked_quantity","create_packing_order","pickingOrderId","ndPickingPackingPackingListController","PICKABLE_ORDER_STATUS_PACKING","FinishPickingAndPackPickingOrderDialogController","getIsSendPackingOrderFromStorage","setIsSendPackingOrderToStorage","sendPackingOrder","processPacking","finish","ndPickingPackingPackedListController","PICKABLE_ORDER_STATUS_PACKED","openShippingPackingDialog","pickableOrders","autocodes","hasParcels","packing_order","has_sendcloud_data","markAsShipped","openShippingPackingDialogUnwatch","selectedRowsChangedUnwatch","packingOrderIds","packingOrder","ids","ndPickingPackingActionsController","showPackingButton","navItem","showPickingButton","showShippingButton","showSendcloudButton","hasSendcloudInstalledAppEnabled","hasInstalledAppEnabled","SENDCLOUD","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","LowStockPurchasesController","PackingProductsController","PosOrderFulfillmentShippingBox","SENDCLOUD_SHIPPING_METHODS","PackingOrder","byteArrayBufferService","ITEM_PACKING_STATUS","LabelProviderAdapterService","autoPrintLabelsDebouncePromise","labelsGenerationFailed","ITEM_STATUS","generatingDelivieresPdf","deliveryUrl","PACKING_ORDER_STATUS","showSendcloudSettings","shippingBoxes","sendcloudShippingMethods","selectedSendcloudShippingMethod","sendcloudOptions","printLabelsAutomatically","printDeliveriesAutomatically","volumeWeight","shippingMethodSearch","generatingOrderPdf","cancelParcel","autoPrintInProgress","dialogSendcloudErrors","openingCustomerDialog","nonStorableFilters","labelProviderAdapter","createSendcloudAdapter","getSelectedShippingMethodId","getVolumetricWeight","volumetricWeight","getPrintDeliveriesAutomatically","getDestinationId","destination","onAddressTooLongError","errorText","max_characters","defaultShippingBox","hasSendcloud","isGeneratingLabels","finishing","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","checkPrintLabelsAutomatically","is_totally_packed","Audio","playErrorSound","downloadLabels","handleCancel","okButton","showCancelDialog","printDeliveriesPdf","dispatchEvent","MouseEvent","pullingPdfFileUrl","showCustomerPopup","selectedTab","shippingAddressIdToEdit","hideSendcloudErrorsDialog","shippingMethods","errorData","showGetShippingMethodsError","shippingMethod","SENDCLOUD_UNSTAMPED_LETTER","errorResponse","autoAssignToAllProducts","shippingBox","packingOrderProductVariant","shippingBoxId","creatingShippingBox","shipping_box","isTotallyPacked","ensureProductShippingBoxesForPackedItems","getPackingCounts","totalPacked","allPacked","finishPackingWithLabels","onReady","waitForProductBoxAssignment","onSuccess","pickingPackingPackingOrders","total_packed","translatedError","errorCode","defaultTranslationKey","translationKey","packingOrderAutocode","packing_order_autocode","printLabels","bytes","embedElement","popupWindow","b64","buildFinishPayload","print_labels","sendcloud_shipping_method_id","all_packed","volumetric_weight","print_deliveries","printingSendcloudLabels","handleFinishError","withSendcloud","finishPacking","hasMissingLabelProviderConfiguration","hasMissingConfiguration","packingOrderSendcloudData","_parcelsListCache","createShippingBoxWithProductVariant","buildGenerateLabelsPayload","handleGenerateLabelsError","packingProductsGridApiUnwatch","PackingDetailsController","PackingActivity","usersList","isLoading","searchUserText","updatePackedBy","packingActivity","ShippingDialogController","autocodesString","FinishPackingOrderDialogController","packedAmount","LowStockReplenishmentsController","openAnalysisInformationDialog","analysisPeriodDays","analysis_period_days","orderFrequency","order_frequency_days","replenishmentWarehouse","replenishment_warehouse_name","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","changeSelectDataImport","restart","ndColumnsSelectorController","MAX_ITEMS_TO_SHOW","MULTIPLE_VALUES_KEY","SEPARATOR_REGEX","columnItemsByHeader","targetHeaders","targetHeadersByOrigin","once","getPreviewItemsByHeader","buildColumnItemsByHeader","columnItems","onTargetSelectorChange","isTargetHeaderAvailable","consumedTargetHeaders","getOriginHeaders","properties","idx1","idx2","selectedProperties","requiredToAssign","mandatory","autoSelectTranslation","translationNormalized","normalize","ident","preset","matchingHeader","original_reference","matchingTargetHeader","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","validationWarnings","productErrors","dtColumnCache","propertyKey","spacer","param","onceFileUploaded","isError","checkCurrentStep","msWizard","validate","importation_id","import","onMandatoryHeadersChange","enable","selections","downloadImportationFile","goBack","goFront","allowToUpload","stepDisabled","data_preview","CategoryTreeDialogController","newSelectedCategories","initialSelectedCategories","deselectedCategories","CategoryMassivePercentageDialogController","loyaltyPercentage","noneChecked","ndNewObjectOptionController","saveAndClose","saveObject","apiName","selectedParent","secondaryPlaceholder","keypressHandler","nextId","keyCode","formatComposition","word","number","getChipNumber","getChipName","optionLabel","parentIcon","parentName","IntegrationAppData","VERIFACTU","subcontent@app.integration_apps.verifactu","VerifactuIntegrationInstalledAppsData","VeriFactuOperationsController","EventListHelper","filterKeys","globalStatus","sourceWarehouses","targetWarehouses","stockAvailability","unitsFilter","orderTypes","operationTypes","verifactuDocumentTypes","reloadOperations","createReloadFn","clearSearch","resetFilters","createStatus","operation_type","verifactu_document_type","listConfig","integrationApps","verifactuOperations","expand","processed_at","invoice_autocode","setupStatusLoadedListener","VerifactuOperationDetailController","EventDetailHelper","helper","statusMap","buildStatusMap","operationId","formattedDate","formattedOperationType","formattedDocumentType","formattedStatus","formattedRetries","hasError","translations","buildTranslations","goToInvoice","loadEvent","operationType","verifactu_invoice.created","verifactu_invoice.cancelled","documentType","invoice_corrective","invoice_substitutive","formatRetries","try_count","max_retries","VeriFactuDetailsController","VerifactuIntegrationInstalledApp","selectedVerifactuIntegrationInstalledApp","integrationApp","fiscalAddresses","fetchingInstalledApps","verifactuIntegrationInstalledApps","createVeriFactuApp","selectedTabIndex","selectVeriFactuApp","verifactuIntegrationInstalledApp","ContactData","subcontent@app.contacts.contact","InvoicesData","ImportContactsDialogController","CONTACT_TYPES","IMPORT_URL","contactTypes","contactType","contactsImport","ContactDialogController","msUtils","CONTACT_INVOICING_TYPES","CONTACT_PERSON_TYPES_REVERSE","CONTACT_PERSON_TYPES","PAYMENT_TERM_TYPES","newContact","allFields","personTypes","countries","contactInvoicingTypes","editingAddress","editingPerson","toggleInArray","en","locale","es","ca","fr","POS_ORDERS_VIEW","pos_order","units_sold","units_returned","dtOptionsInvoices","dtColumnsInvoices","total_incl_tax","addNewContact","addressForm","$invalid","$pristine","saveEditingAddress","saveContact","savingContact","deleteContactConfirm","cancelDialog","showInformationActions","editAddress","address","editingAddressBackup","deleteAddress","cancelEditingAddress","newAddress","cancelDeletingAddress","confirmDeletingAddress","postalAddresses","showAddressActions","editPerson","person","editingPersonBackup","deletePerson","cancelEditingPerson","saveEditingPerson","persons","newPerson","cancelDeletingPerson","confirmDeletingPerson","showPersonsActions","CONTACT_TYPE_SHOP_CUSTOMER","person_type","NATURAL_PERSON_TYPE","is_billing_address","newDate","birthday","ContactAddressDialogController","AddressData","saveAddress","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","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","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","currentFulfillmentId","EcommerceSiteOperationDetailController","EventBadgeHelper","loadOperationDetail","siteHandlerEvents","formattedStartProcessingAt","start_processing_at","formattedProcessedAt","getSiteOperationBadgeData","label","markAsPendingLoading","canShowMarkAsPendingButton","canShowMarkAsPendingAction","markAsPending","markEventAsPending","eventId","translationPrefix","setMarkAsPendingLoading","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","PRODUCT_SHIPPING_BOX_ID","LABEL_PRINT_ORDER","storeVolumetricWeight","generating","fetchingBoxes","selectedShippingBoxId","selectedShippingMethodId","CUSTOM_SHIPPING_METHOD_CHECKOUT","labelPrintOrderOptions","PICKING","PICKING_REVERSE","SKU","SKU_REVERSE","STOCK_LOCATION","STOCK_LOCATION_REVERSE","labelPrintOrder","DEFAULT","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","hasPosFulfillments","hasSaleDeliveries","hasTransferDeliveries","requests","collectedErrors","handleResponse","artifact_id","downloadLabel","cb","posOrdersFulfillment","shipping_box_id","label_print_order","redownload","delivery","fnReq","storeSelectedShippingMethodId","storePrintDeliveriesAutomatically","storeSelectedShippingBoxId","storeLabelPrintOrder","toggleVolumetricWeight","buttonActionText","productShippingBoxName","getFullName","availableShippingBoxes","BulkChangeWarehouseDialogController","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","ndDynamicReportFieldCardController","DynamicReportFilter","initSelections","selectedOptions","optionHeaders","selectedFilters","selectedSorting","selectedOptionsForDnd","useFilters","sorting","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","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","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","cartConfig","refreshDataOnly","deepWatchData","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","content_type","generateKpisDict","object_id","rawData","point","yDomain","ndBasicRetailKpisTodateTableController","kpi","kpiWtd","kpiMtd","kpiYtd","object_ids","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","InvoiceZipErrorsDialogController","failedCount","selectedDates","generate","ConflictDeletedProductsDialogController","deletedProducts","AddDeliveryNoteDialogController","customerId","receivedInvoice","selectedDeliveries","persistedValue","NAV_ITEM_STORAGE_KEY","ONLY_MY_CONTACT_STORAGE_KEY","handleDateRangeModelChanged","newValues","oldValues","createdDateRange","transfersStatus","salesStatus","purchasesStatus","fiscalAddressPosOrdersStatus","searchChanged","synchronizeSharedWarehouseFilters","getStatusStoragePairs","statusStoragePair","persistStatusWarehouses","storageStatus","companyId","parseLocalStorageStatus","onlyMyContact","transfersStorageLabel","salesStorageLabel","purchasesStorageLabel","fiscalAddressPosOrdersStorageLabel","storageKey","parsedStatus","currentStatus","getStatusByNavItem","getFirstDefinedWarehouseFilter","filterKey","firstDefinedFilter","loadPersistedSharedWarehouseFilters","getPersistedWarehouseFilter","storageLabels","persistedFilter","statusFilters","isMoment","parsedDate","ISO_8601","persistStatusDateRange","savedStartDate","savedEndDate","selectedTransfers","fiscal_address_pending_to_invoice","fiscal_address_contact_id","selectedSales","selectedPurchases","selectedFiscalAddressPosOrders","transfers","fiscalAddressPosOrders","getFilterNotifications","clearDateRangeFilters","openDateRangePicker","showTemplate","selectedTemplate","selectedTemplateName","getDateRangeLabel","navItemWatcher","$watchGroup","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","linkWithInvoice","unbindInvoiceDialog","$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","WholesalePresalePurchasesController","WholesalePresaleProductsController","defaultRow","substr","newProduct","presales","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","newBrand","newSeasonAdded","newSeason","generateCSV","selectedWholesalePricingTier","selectedRetailPricingTier","presalesCSV","wholesale_pricing_tier_id","retail_pricing_tier_id","generatePDF","NewPresaleDialogController","savingSeason","savingBrand","saveSeason","saveBrand","_PosFinalLineMappingStrategy","MonetaryLineMappingStrategy","toNumber","parsedValue","isFinite","PosFinalLineMappingStrategy","lineTaxes","lineDiscount","_resolveUnitFinalPrice","_LineMappingStrategySelector","BaseLineMappingStrategy","LineMappingStrategySelector","baseLineMappingStrategy","posFinalLineMappingStrategy","_isPosOrderLine","related_order","_BaseLineMappingStrategy","_resolveUnitBasePrice","_MonetaryTaxBreakdownDTO","_MonetaryAmountDTO","amountBeforeDiscount","amount_before_discount","_MonetaryTaxSummaryDTO","breakdown","_MonetaryLineResultDTO","MonetaryLineResultDTO","unitBasePrice","unitFinalPrice","subtotalBase","taxAmount","taxesBreakdown","subtotal_base","tax_amount","taxes_breakdown","defineProperty","discounts","_MonetaryDiscountResultDTO","appliedAmount","is_percentage","applied_amount","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","DOJO_PAYMENT_STATUS","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","SIGNATURE_VERIFICATION_REQUIRED","showingSignatureConfirmation","processingSignature","paymentData","currentPaymentData","CANCELLED","SIGNATURE_VERIFICATION_REJECTED","EXPIRED","DECLINED","TIMEOUT","dialogErrorMessage","payment_data","response_code","abortPayment","clearTimeout","handleSignatureDecision","accepted","payment_gateway_data_id","confirmCancel","timesRun","cancelling","callCancel","retry","pos_order_payment_method_id","acceptSignature","denySignature","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","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","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","ERROR_04067_CREATING_STOCKTAKING_ORDER_PRODUCT_VARIANT_ERROR_DUE_TO_PRODUCT_VARIANT_DELETED","instant","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","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","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","wholesaleSalesStorageLabel","dtOptionsMovements","STOCK_MOVEMENT_TYPE_MANUAL_RESET","thead","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","originalProductSnapshot","platformDict","description_short","min_length","max_length","coverId","normalizeHTML","healthy","sanitizeHTML","allowedTags","allowedAttributes","button","div","toggleDescriptionWidget","long","showLongDescriptionCustomTextArea","containsScript","showContainScriptDialog","showDescriptionCustomTextArea","getProductImages","showSavingProgressBar","purchase_catalog","deleteCover","showModalChangeCover","saveProductEvent","bId","sId","cId","idOf","original","o","obId","cbId","osId","csId","ocId","ccId","ocoId","ccoId","oProviderId","cProviderId","ov","cv","oId","cn","isPlanningConfigChanged","serializePlanningConfig","coId","normalizePlanningConfig","is_limit_min","is_limit_max","max_type","max_percentage_value","max_fixed_amount_value","is_limit_max_to_min_stock_origin","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","attempts","checkTableInterval","elements","classList","reloadVariantsTable","dtInstance2","_data","_dataIndex","_iDisplayIndex","_iDisplayIndexFull","deleteVariantCategory","conflicts","objectType","objectName","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","ConfigurationSupportController","TemporaryAccountAccess","SUPPORT","temporaryAccountAccess","accessOptions","expiresAt","grantAccess","expires_at","revokeAccess","revoke","tomorrow","oneWeek","oneMonth","oneYear","setFullYear","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","ConfigurationPickingPackingController","PICKING_PACKING_CONFIGURATION","allow_orders_with_incidence","allow_orders_with_pending_fulfillment","allow_orders_with_warning","allow_unpaid_orders","display_sku_at_shipping_label","savePickingPackingConfiguration","saveAction","pickingAndPackingConfiguration","balanceForm","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","loyalty_percentage","saveLoyaltyConfiguration","exampleAccumulated","baseValue","default_contact_balance_ratio","newCategoriesIds","newCategory","existingCategory","deselectedCategory","removePercentage","addLoyaltyPercentageToCategories","addLoyaltyPercentageToCategory","openCategoryMassivePercentage","getPercentage","updatePercentage","constructObject","pinLeft","num_products","getGridOrdersPageGetData","loyalty","loyalty_rounding","minimum_balance_spend_amount","balance_spend_multiple","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","DevelopersController","swaggerUrl","redocUrl","hiddenToken","copyToken","navigator","clipboard","writeText","when","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","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","serial_number_type_id","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","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","HandlerEventDetailController","loadEventDetail","handlerEvents","getHandlerOperationBadgeData","getStatusBadgeData","details","errorLoading","processedResult","eventError","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","INVOICE_PAYMENT_STATUSES","saleInvoices","returnInvoices","totalSaleInvoices","totalReturnInvoices","totalPaid","totalUnpaid","pendingDifference","salesVsReturnsOptions","subtext","radius","center","borderRadius","paymentOptions","printBalance","contactPrintBalance","mutable_fields","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","generateInvoiceZip","invoice_ids","showDateRangeDialog","ContactsContactDetailsController","contactTypesReverse","contactGroups","latestPrivacyContractSignature","latest_privacy_contract_signature","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","EcommerceSiteVouchersController","isPrestashopSite","isVouchersEnabled","sync_gift_card_enabled","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","isArchivedOrDeletedSiteProduct","filterStatus","filterArchived","archivedDict","ONLY_ARCHIVED_PRODUCTS","ONLY_NOT_ARCHIVED_PRODUCTS","filterIndexes","initialized","watches","brandsList","categoriesList","seasonsList","orderDir","colName","orderColIdx","dir","isGrater","product_brand_name","activedChanged","getSynchronizingText","deleteProduct","reloadSiteProducts","EcommerceSiteOperationsController","columnsConfig","idTranslationKey","processedAtTranslationKey","operationTypeTranslationKey","statusTranslationKey","detailState","detailStateParam","badgeDirective","statusEnableSorting","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","newNode","products_amount","newSubItem","nodeData","collapseAll","expandAll","importFromEcommerce","ImportProductsDialogController","maxProducts","externalIds","ImportMissingProductsDialogController","goToImportation","EcommerceCategoryDialogController","categoryTranslations","AutoAssignWarehouseInfoDialog","AutoAssignWarehouseByStockAvailabilityInfoDialog","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","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","ReportsWorkdaysController","ReportUtils","reportTypes","INVENTORY_TITLE","buttons","WORKDAYS","ID_WAREHOUSES","querySearchCustomField","columnsString","reports","workdaysReport","getSelectedIds","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","filterByEcommerceOnly","REPORTS.ORDER_SOURCE_ALL","REPORTS.ORDER_SOURCE_ECOMMERCE","REPORTS.ORDER_SOURCE_PHYSICAL_STORE","sourceFilterField","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","getTextElements","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","reportUtils","Set","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","paymentServiceType","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","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","WholesalePresaleController","deleteCollection","securityWord","checkSecurityWord","answer","WholesalePresalesController","filtersNotifications","newCollection","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","getPricingTierCurrency","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","_MonetaryPosOrderResultApplier","roundFinal","MonetaryPosOrderResultApplier","monetaryDocument","_applyLineResults","lineResults","_MonetaryPosOrderInputMapper","MonetaryTaxDTO","hasValue","MonetaryPosOrderInputMapper","normalizedOptions","mappedLines","_mapLines","_mapDocumentDiscounts","orderDiscountInclTax","includeBalanceDiscount","balanceDiscount","balance_discount","_getEffectiveOrderDiscountInclTax","discountInclTax","discount_incl_tax","discountExclTax","_calculateProratedDiscountConvertedValue","sourceDiscount","totalSourceAmount","totalTargetAmount","unitPriceExclTax","unitPriceInclTax","canceled_amount","includeShipping","ignoreReturns","isV2","is_v2","_resolveLineQuantity","_resolveLineUnitFinalPrice","_resolveTaxes","pos_order_shipping_methods","canceledAmount","returned_amount","taxPercentage","taxName","tax_name","_MonetaryInvoiceResultApplier","SubtotalByTax","MonetaryInvoiceResultApplier","_applyLines","_applySubtotalsByTax","_applyDocumentDiscounts","_applyTotals","invoice_lines","lineResult","taxSurchargeById","_buildTaxSurchargeById","taxBreakdown","surchargeBreakdown","subtotalByTax","taxBase","taxSurcharge","surcharge_amount","surcharge_difference","total_price_excl_tax_sum","surchargeAmount","tax_instance","tax_surcharge","firstDiscount","secondDiscount","discount_as_absolut","_applyAbsoluteDiscountPercentages","firstBaseAmount","is_retail","firstDiscountAmount","secondBaseAmount","secondDiscountAmount","total_tax","total_excl_tax_after_discount","_MonetaryInvoiceInputMapper","MonetaryInvoiceInputMapper","lineMappingStrategySelector","mappedTaxes","_mapLine","_resolveLineTaxes","_mapLineDiscount","_resolveLineUnitBasePrice","lineDiscountPercentage","resolvedTax","surcharge_percent_value","mappedSurchargePercentage","_mapAbsoluteDocumentDiscounts","_mapPercentageDocumentDiscounts","mappedDiscounts","subtotalDiscount","subtotalEarlyPaymentDiscount","earlyPaymentDiscount","_LineCalculationStrategySelector","BasePriceLineCalculationStrategy","FinalPriceLineCalculationStrategy","LineCalculationStrategySelector","_basePriceStrategy","_finalPriceStrategy","_LineCalculationDependencies","MonetaryTaxBreakdownDTO","MonetaryDiscountResultDTO","calculateTaxesForTotal","denominator","totalTaxAmount","calculateTaxesForSubtotal","calculateUnitFinalPrice","buildLineDiscountResult","unitBasePriceBeforeDiscount","calculatedPercentage","_FinalPriceLineCalculationStrategy","LineCalculationDependencies","calculate","unitDiscountAmount","_getUnitDiscountAmountInclTax","discountAmount","discountResult","taxesCalculation","adjustedTaxesBreakdown","_BasePriceLineCalculationStrategy","_FinalPriceDocumentCalculationStrategy","FinalPriceDocumentCalculationStrategy","_defaultStrategy","documentDiscounts","taxesBeforeDiscount","eligibleSubtotalBeforeDiscount","eligibleTotalBeforeDiscount","_calculateEligibleTotalBeforeDiscount","documentDiscountData","_calculateDocumentDiscounts","discountResults","totalDiscountInclTax","totalDiscount","totalDiscountAmount","taxesAfterDiscount","_aggregateWithoutDiscount","_aggregateWithFixedInclTaxDiscount","_calculateTaxesFromBreakdown","totalTaxesReduction","lineCount","remainingTotal","rawAmount","perLineDiscountAllocations","_buildDiscountAllocationsByLine","taxAggregation","lineIndex","adjustmentRatio","lineTotal","lineDiscountInclTax","adjustedBase","adjustedAmount","adjustedSurchargeAmount","taxKey","taxData","allocations","fill","eligibleIndexes","remainingDiscount","remainingEligibleTotal","lastLineIndex","lastLineTotal","totalTaxes","_BaseDocumentCalculationStrategy","BaseDocumentCalculationStrategy","_recalculateTaxesAfterDiscount","_aggregateTaxesBreakdown","remainingSubtotal","discountRatio","adjustedBaseRatio","lineInput","taxable_base","lineDiscountPortion","taxAggregationWithoutDiscount","SellSaleController","AuthService","SellMatrixData","msNavigationService","refreshDisplay","registerHasChanged","setDefaultRegister","amountList","trafficKpis","peopleCounter","openRegister","createDevolutionSale","newSale","createNewSale","olderSale","saleData","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","devolution_base_total","addPosProductVariantToSale","register_configuration","touch_ui_as_default","CURRENT_VIEW_TYPE_MATRIX","newPosOrderPaymentMethods","given_amount","mergeServerResponseIntoSale","previousSaleSnapshot","mergedSaleData","rehydratedSale","deletePosOrderProductVariant","hasBundle","uid_stock_uid","selectedUidStocks","onProductVariantSelected","clearProductAutocomplete","setPricingTier","applyCustomerPricingTier","getMaxApplicableBalanceDiscount","customerBalance","currentDiscount","getNumericValue","balance","totalWithoutDiscount","getMaxApplicableBalanceDiscountFromTotal","maxApplicableAmount","balanceSpendMultiple","multipleCents","toCents","flooredAmountCents","minimumBalanceSpendAmount","normalizedValue","isString","showSaleStoreCommentIcon","hideStock","showStockDetails","selectedProductStock","selectedPosOrderProductVariant","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_04002_REGISTER_CLOSED","ERROR_01027_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE_NOT_ASSOCIATED_WITH_VERIFACTU","ERROR_04011_GIFT_CARD_ALREADY_EXISTS","printSale","source_pos_order","closeCurrentSaleTimeout","autocloseCurrentSaleInterval","closeCurrentSale","cancelCloseCurrentSaleTimeout","saleIndex","showCustomerAccumulatedBalance","avoidGetPromotions","quantityDictById","returnedItemsTotal","fetchingPromotion","promotion","getUnitPrice","promotion_id","longList","tempPromotion","localPromotion","restorePricesBackup","promotion_name","promotion_discount","promotion_fixed_discount","popvs","len","tempPopv","tempApplyTo","apply_to","setPromotionAttributes","popv1","popv2","isSplitted","registerConfigurations","register_message","proportion","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","avoidConsumedGiftCards","getTotalConsumedGiftCards","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","showSplitLineButton","CATALOG_LENGTH","REFUND_ENABLED","isFullsize","isDialogOpen","hasUID","creatingCustomer","allowDebtSells","register_warehouse","category__id","checkEnterPressed","which","blur","openingOrClosing","createNegativeCashMovement","createPositiveCashMovement","deleteCurrentSale","deletePosOrderProductVariantFull","finishPayment","queryParams","getRefoundByAny","customerAutocompleteFocused","getItemCustomerText","getPriceByPrices","priceInPricingTier","goToRegisterActivity","openCashDrawer","prompt","pay","payButtonDisabled","payByCard","payByCash","posOrderCallback","priceClicked","nameClicked","originalProductName","editingName","finishCustomNameEdition","selectedCustomerChange","hasPreviousPricingTier","setSelectedRegister","showTotalTaxes","togglePosOrderProductVariant","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","discountAsPercentage","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","showSaleStoreCommentDialog","hasCustomerSelected","toggleShowTaxesDict","showTaxesDict","openSearchVendorDialog","showAssignSeller","amountFocus","list_amounts","discountFocus","list_discounts","discountChanged","discountValue","openDisplay","displayUrl","showRefundByCardButton","showRefundByCashButton","newPopv","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","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","enableColumnMoving","getGridGiftCardsPage","exporterCsvFilename","showCustomerDialog","showToggleValidityDialog","printGiftCard","sourcePosOrderId","register_instance","getShortDate","getAmount","SellDisplayController","content@public_registration","onEnter","PublicRegistrationController","PublicRegistrationApiService","supportedLanguages","successResetPromise","turnstileWidgetId","turnstileCallbacksInitialized","turnstileScriptId","pendingFormForTurnstile","waitTurnstilePromise","load","getForm","formConfig","changeLanguage","contract_language","isReady","formData","challenge_token","turnstile_token","website","marketing_accepted","contract_accepted","onPublicRegistrationTurnstileSuccess","formToSubmit","onPublicRegistrationTurnstileExpired","waitAndRenderTurnstile","initializeSignatureCanvas","$setSubmitted","signature_data","turnstile_site_key","isSuccess","showSuccessCard","turnstile","reset","clearSignature","$setUntouched","execute","canvas","getContext","clearRect","hasSignature","langKey","normalizedBaseLanguage","currentLanguage","normalizedLanguage","drawing","getPoint","rect","getBoundingClientRect","touches","clientX","clientY","preventDefault","beginPath","moveTo","move","lineTo","stroke","toDataURL","dataset","lineWidth","lineCap","strokeStyle","passive","script","async","head","render","sitekey","expired-callback","showContract","toggleContract","LocationRegistrationController","LocationRegistrationApiService","toggleRegistrationEnabled","updateSettings","registration_enabled","hasActiveContractVersion","active_contract_version_id","goToContractsConfiguration","preferredLanguage","getSettings","ContractManagementController","ContractManagementApiService","PUBLIC_REGISTRATION_CONTRACT_LANGUAGES","contractsPayload","contracts","assignedLocations","assigned_locations","assignableContracts","contract","contractsGridOptions","assignedLocationsGridOptions","contractsGridApi","assignedLocationsGridApi","createContract","publishContract","contractId","setContractActionLoading","publish","cloneContract","clone","canEditContract","signed_customers_count","updateContract","removeContract","openContractEditorDialog","dialogVm","availableLanguages","mode","showPlainEditor","languageSearch","initialLanguage","html_content","initialHtml","toggleEditor","contractActionLoading","isContractActionLoading","getLanguageLabel","languageIso","languageOption","iso","fallbackName","DisplayNames","autonym","fallback","Intl","of","unassignContract","unassign","toggleAssignedRegistration","contract_id","openCreateDialog","drafts","firstContract","secondContract","version_number","currentDraft","openEditDialog","openViewDialog","contractLanguageLabel","contractVersion","contractHtml","openAssignDialog","contractSearch","enableSelectAll","multiSelect","headerCellFilter","confirmAndPublishContract","confirmAndCloneContract","confirmAndRemoveContract","ReplenishmentController","PLANNING_AVAILABILITY_STATUS","gridClearUnwatch","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","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","previousValue","filterProperty","REPLENISHMENT.STOCK","REPLENISHMENT.STOCK_TO_ORDER","filterName","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","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","ProductionsController","filterTargetWarehouse","seasonsById","ManufactureProductionController","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","updateCurrentNavItemFromState","stateName","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","InventoryTransferController","TransfersController","reloadTransfers","reloadTransfersTimeout","transferTypes","transfersTypes","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","dtcb","PickingPackingController","StorageService","navItems","toPrepare","picking","picked","packing","shipped","currentItem","filterStorageLabel","getPickingPackingControllerFiltersKey","paymentStatuses","to-prepare","createGridStatus","stockAvailabilityOptions","labelKey","unitsFilterOptions","warningOptions","incidenceOptions","gridGeneratePickingOrderUnwatch","gridGeneratePackingOrderUnwatch","gridOpenShippingPackingDialogUnwatch","gridOpenSendcloudLabelsDialogUnwatch","gridUpdateCountersUnwatch","getCount","gridStatusLoadedUnwatch","applyGlobalStatusToCurrentStatus","FILTER_BY_STOCK_AVAILABILITY","FILTER_BY_UNITS","FILTER_BY_ORDER_TYPE","FILTER_BY_PAYMENT_STATUS","FILTER_BY_WARNING","FILTER_BY_INCIDENCE","setPickingPackingControllerCurrentNavItem","getCurrentStatus","setPickingPackingControllerGlobalStatus","reloadPIckingPackingTimeout","controlSelected","typePickableOrder","type_pickable_order","getGlobalStatus","transformCallback","storedNav","getPickingPackingControllerCurrentNavItem","getPickingPackingControllerGlobalStatus","old","new","pickable_orders_count","in_progress_orders_count","picked_orders_count","packing_orders_in_progress_count","packing_orders_packed_count","PickingController","ITEM_PICKING_STATUS","uiGridConstants","CONFIRM_ACTION_STORAGE_KEY","userCreatePicking","pickers","status_pending_to_pick","ITEM_PENDING_TO_PICK","status_picked","ITEM_PICKED","PICKING_ORDER_STATUS","generating_pickable_pdf","generating_delivieres_pdf","changingPickingStatus","changingPickingLot","uidStockSearch","loadingUidStocks","newPosition","conLog","deletePickingOrder","updatePickedBy","pickingActivity","picking_activity","changePickItemStatus","itemStatus","opv_id","getOrderProductVariantFromRow","picking_order_product_variant_ids","updateRowData","PENDING_TO_PICK","updatePickingOrder","bulkEditStats","opv","printPickableItemListPdf","selected_ids","sampleArr","base64ToArrayBuffer","saveByteArray","isPickingOrderPendingToPick","isPickingOrderPicking","isPickingOrderPicked","PICKED","updatedVariant","updated_variant","box","pickable_item_type","picking_order_product_variant_id","gs1datamatrixCallback","gs1_number","openSelectUidStock","fetched","onUidStockChange","body_translation","old_uid_stock","changePickItemLot","old_uid_stock_uid","selectedUid","title_trans_key","isRemoving","body_trans_key","ok_trans_key","currentLotNumber","newLotNumber","getConfirmActionLabelKey","confirmAction","CONFIRM_ACTIONS","CONFIRM_AND_GO_BACK_TO_PICKING","CONFIRM_AND_GO_TO_PACKING","CONFIRM_AND_GO_TO_SCAN_AND_GO","CONFIRM_AND_START_PACKING","CONFIRM_AND_PACK","CONFIRM_AND_SHIP","CONFIRM","executeConfirm","pack","total_picked","pickAll","finishAndStartPacking","finishAndPackPickingOrder","finishPicking","setConfirmAction","storedAction","showMissingDefaultPackingSerialNumberType","all_picked","send_packing_order","dataChange","EDIT","STORAGE_KEY","byName","sorted","COLUMN","origin_order_autocode","variant_1","variant_2","warehouse_location","warehouse_location_position","pickable_items","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","packNext","target_warehouses","order_types","stock_availability","units_filter","delivery_order_id","resp","_fn","st","NewInventoryProductController","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","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","CONTRACTS","isPlanBusiness","isPlanPartner","newFeatureBadgeId","EMAIL_CONFIGURATION","newButtonPermission","newButtonLabel","DEVELOPERS","INVENTORY_CONFIGURATION","title2","newButtonLabel2","svg_icon","RETAIL_CONFIGURATION","newOption","isActive","create2Clicked","InventoryCollectionsController","reloadCollections","reloadCollectionsTimeout","getCollections","AdjustmentsController","filterByReplenishment","InventoryCollectionController","InventoryAdjustmentController","VeriFactuController","HandlerEventsController","reloadEvents","ContactsController","reloadContacts","isContactsPage","reloadContactsTimeout","listType","openContactDialog","importContactsDialog","newCustomer","AppsController","ContactController","CONTACT_TYPE_CUSTOMER","personDeletedWatcher","deletedPersonId","personSavedWatcher","existingPersonIndex","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","startPreparingLoading","loadingOrder","loadingNeighbours","navigationDirection","setBanner","selectedFulfillment","resetNeighbours","hasMultiple","multipleProductsOrder","setPosOrder","onPickingFinished","goToNextOrder","neighbours","loadOrder","loadNeighbours","neighbour","onBarcodeNotFound","showBanner","onBarcodeAlreadyScanned","bannerTimeout","bannerMessage","bannerBarcode","preferredFulfillmentId","availableFulfillment","sendcloudShippingMethodsDict","canShipItems","allowToFulfillOnPlatform","hasOrderEditPermission","posOrderFulfillment","allowShip","sendcloud_pos_order_fulfillment_data","isSendcloudShipment","selectFulfillment","setUpdateActionShip","getVisiblePosOrderFulfillmentProductVariantInstances","uploadAmount","buildNeighboursParams","initializedFromOrdersList","stockWarehouses","fulfillments","previous","currentPosition","current_position","totalCount","fulfillment_id","canNavigateToPrevious","canNavigateToNext","shipping_method_name","closeBanner","warehouseChanged","setOderTypeChanged","openScanner","startPreparingOrders","goToPreviousOrder","getNavigationPositionText","deregisterBarcodeNotFound","deregisterBarcodeAlreadyScanned","deregisterPickingFinished","EcommerceOrdersController","POS_ORDER_FULFILLMENTS","selectedOrders","orderDto","selectedFulfillmentsDict","selectedFulfillments","changingWarehouse","generating_items_pdf","replenishmentStatuses","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","getTranslation","shipping_method","product_variants_count","products_count","stock_location","isPickingState","getGridPickingPage","initializingPage","deselectFulfillment","setGridPickingColumns","getGridPickingPageGetData","totalOrders","mappedShippingMethods","exportingOrdersByShippingMethod","getPaymentStatusColorClass","removeOrderFilter","downloadDeliveriesPdf","getSelectedOrderIds","generatingDeliveriesPdf","exportOrdersByShippingMethod","shippingMethodId","orderIds","shipping_method_id","printItemsListPdf","areSourceWarehouseUnique","showItemsListPdf","showBulkChangeWarehouseDialog","confirmDialog","bodyParams","primaryOptionText","primaryOptionCallback","primaryOptionClasses","cancelClasses","isPickableOnPickingOrder","has_picking_and_packing","showCancelItemButton","cancelItem","cancelPicking","cancelPicked","cancelPrepared","hasMultipleScanAndGoFeature","has_scan_and_go","openMultipleScanAndGoDialog","initCounters","getPage","has_shipping_method_mappings","mapper","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","defaultVisible","initialVisible","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","TicketConfigurationData","ticketConfigObj","ticket_configuration_object","updateOrder","saveOrder","saveAndCloseOrder","saveAndAllocateDraft","showSaveDraftButton","allowedToClose","showSaveDraftAndAllocateButton","showSaveButton","is_negated","showSaveAndCloseButton","cancelProductsEdition","executeSupplyingPolicy","posOrdersExecuteSupplyingPolicy","updateFulfillmentProductVariantsStockoutData","hasStockouts","importOrderFromSite","POS_ORDER_SHIPPING_STATUS_CANCELLED","register_activity_closed","paymentMethodParams","setSaving","closeOrder","forceUpdate","force_update","setStockoutDataFromFulfillment","upload_fulfillments","NewEcommerceSiteController","gotoSites","ConnectSiteController","urlSearchParams","fromEntries","entries","sitesConnect","selling_partner_id","spapi_oauth_code","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","isFilterActive","InvoicesController","invoiceAPI","FEATURE_FLAG_ACCOUNTING_INVOICE_V2","serialNumberTypeIdFilter","selectedContactType","creatingDocument","InvoiceController","OrderDelivery","CORRECTIVE_INVOICE_TYPES","SelectSerialNumberTypeDialogService","isNewInvoice","addLine","refreshAllTotalPrices","defaultTaxIndex","defaultTaxId","filterSerialNumberTypesByIntegrationInstalledApp","isReadOnly","defaultSerialNumberType","snt","refreshTotalPrice","invoiceLine","avoidRefreshTotals","getTaxById","showRequiredFieldErrors","invoiceForm","holded_invoice_data","is_received","isValidForHolded","invoiceCopy","billing_date","calculateExpirationDateFromCustomerPaymentMethod","billingDate","payment_method_days","addProductLine","invoiceLineIndex","isMissingRequiredHoldedData","isValidKubiBaiInvoice","kubibai_invoice_data","successMessageKey","extraData","ERROR_01021_MISSING_CORRECTIVE_INVOICE_SERIAL_NUMBER_TYPE","showEmitButton","isPurchaseInvoice","isInvoiceType","getSerialNumberTypeType","paymentMethodsData","loadingDeliveries","discount_as_percentage","early_payment_discount_as_percentage","object_delivery_autocode","removeLine","addExpirationDays","saveInvoice","sale_order_deliveries","purchase_order_deliveries","pendingCalls","startLoading","finishLoading","updateLines","transfer_order_deliveries","pos_orders","delete_text","delete_title","cancelInvoice","contactChanged","toastMessages","found","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","isDisabledInvoice","canAddPayments","canDuplicateInvoice","isInvoiceLineDisabled","kubibaiInstalledAndActive","isInstalledAndActive","installed_integration_apps","installedApp","isNotPrintablePurchaseOrderInvoice","getOrderDeliveryProductAmount","odpvByColorAndSize","sale_order_is_devolution","getOrderDeliveryProductPriceExclTax","order_product_price_excl_tax","createReplacementInvoice","createCorrectiveInvoice","createCancellationInvoice","saveConfiguration","isSendButtonDisabled","isSaveButtonDisabled","isDownloadButtonDisabled","isCloseButtonDisabled","canNotEditSerialNumber","canNotEditBillingDate","canBeDeleted","getTaxTotalAmount","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","PERMISSION_NAME_CELL_TEMPLATE","SYSTEM_ROLE_HEADER_TEMPLATE","ROLE_CELL_TEMPLATE","buildColumnDefs","sortedRoles","systemRoles","lastSystemRoleId","isCustomRole","roleId","menuItems","openRoleDialog","filterPermissions","searchLower","matchingRoles","permissions","rolesMatrix","createMatrix","fetchingPermissions","fetchingRoles","rolesChanged","sortText","class","createBackup","adjustAllColumns","backupRolesMatrix","getRoleTitle","saveWidths","savePinning","permissionId","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","getTotalTaxByGroup","groupedProductVariants","totalExcTaxByTax","createPosOrderHeader","extraTitle","ticket_configuration_instance","mainAddress","print_logo","logo_b64","fiscal_address_instance","legal_name","dateToLocalString","addEmptyLine","createFooter","kubibaiTicketData","barcodeOptions","barcode_design","SMALL","base64","print_barcode","footer_devolution_card","footer","closure","tbai_code","batuz_qr_image","pushOrGetPrice","plainTicket","returnPrice","price_diff","priceText","getCustomerAccumulatedBalance","balances","customer_accumulated_balance","total_accumulated_balance","customerAccumulatedBalance","getCustomerAccumulatedBalancePrintDate","customer_accumulated_balance_print_date","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","product_identifier","availableSpaceForName","repeat","variant_identifier","translate_gift_card","pv_price","total_with_disc","total_design","customerAccumulatedBalancePrintDate","show_customer_accumulated_balance","customerAccumulatedBalanceLabel","printDate","customerAccumulatedBalanceValue","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","printVerificationTicket","ip","EscPosPrinterDialogController","addGiftAmount","removeGiftAmount","_PackingOrder","Factory","PosOrderFulfillment","PackingOrderSendcloudData","_getValue","createdBy","createdByInstance","deliveryOrder","hasSendcloudData","sendcloudData","isPacked","isPendingToShip","PENDING_TO_SHIP","isShipped","SHIPPED","canEditItemStatus","isFulfillmentType","externalParcelId","getParcelsList","parcels","sendcloudDataWithShippingBox","posb","isProductBox","scData","_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","serverError","login","rememberPassword","redirectFreemiumPage","loginSuccess","loginForm","typingUsername","passwordRecovery","content@app.pages_auth_login","content@app.pages_auth_login-v2","LoginV2Controller","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","FLOAT_TOLERANCE","_toNumber","_normalizeScaledValue","nearestInteger","_roundHalfUp","factor","scaledValue","_MonetaryCalculationBuilder","MonetarySummaryDTO","MonetaryAmountDTO","MonetaryTaxSummaryDTO","MonetaryDocumentDTO","MonetaryCalculationBuilder","documentCalculationStrategy","_lines","_documentDiscounts","_lineStrategySelector","_documentCalculationStrategy","addDiscount","build","_calculateLines","subtotalBeforeDiscount","_calculateSubtotalBeforeDiscount","_calculateEligibleSubtotalBeforeDiscount","_calculateTaxesBeforeDiscount","totalBeforeDiscount","documentCalculationResult","subtotalAfterDiscount","totalAfterDiscount","_calculateLine","buildUrl","publicRegistration","buildSettingsUrl","locationSettings","SelectDefaultRegisterDialogController","SelectDefaultPrinterDialogController","listPrinters","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","drawImage","disconnectDevice","createDevice","deviceId","printer_device_id","force_new_device","DEVICE_TYPE_PRINTER","crypto","buffer","callbackCreateEpsonDevice","callbackEpsonConnect","resultConnect","openPrinterDialog","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","printerIp","printerPort","PRINTER_TYPE_QZ","prePrintTicket","_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","_ProductVariantPriceEdit","ProductVariantPriceDiscountEdit","TOUCHABLE_FIELDS","PRICE_GROUP_FIELDS","DISCOUNT_GROUP_FIELDS","discount_base_price_excl_tax_snapshot","discount_base_price_incl_tax_snapshot","_touchedFields","_unmarkGroupExcept","setDiscountBaseSnapshot","groupFields","keepFieldName","groupFieldName","priceExcl","priceIncl","isTouched","getTouchedFields","touchedFields","discountPayload","touchedDiscountField","toPayload","_ProductVariantPriceDiscountEdit","PAYLOAD_FIELDS","_ProductPriceEdit","unmarkTouched","_ProductPriceDiscountEdit","ProductPriceDiscountEdit","externalId","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","isVoucher","_VerifactuIntegrationInstalledApp","InstalledIntegrationApp","VERIFACTU_DOCUMENTS_STATUS","VERIFACTU_ENVIRONMENT_STATUS","identity_card","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","_TemporaryAccountAccess","granted_by","granted_at","revoked_at","revoked_by","getGrantedFullName","you","formatGrantedAt","toLocaleString","formatExpiresAt","_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","leadingSlot","barTitleSlot","actionsSlot","tabs","selectTab","headerTitle","subtitle","statusLabels","statusTranslate","clearable","onChanged","selectPlaceholder","additionalClass","isMultiple","itemTemplate","$transclude","getContainerClass","loadData","onDropdownChanged","isSvgIcon","showLabel","parentFilterElement","mdClass","ctrl","mainTarget","actionsTarget","mainButtonNode","mdMenu","nodeType","Node","ELEMENT_NODE","isMain","hasAttribute","originalNode","cloneNode","transcludeNodes","removeAttribute","querySelectorAll","spans","textNode","createTextNode","compiledNode","wrapper","mdMenuCtrl","onInputChange","variation","getPanelClass","getIconClass","filterFieldsLayout","activeFilters","loadActiveFIlters","saveActiveFilters","onFiltersChanged","ndInputChanged","ndPaginatedDropdownChanged","autoConfirm","showDatePicker","onDateRangeChange","getPlaceholder","oneRow","emitChanged","layout","discount_is_percentage","duration_in_months","onValueChange","parsed","isPercent","onClick","onDurationChange","onDurationMonthsChange","cssClass","iconPosition","loaderSize","handleClick","getButtonClasses","constant","wbUpgradePlan","features","Sha256","hash","utf8Encode","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","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","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","lib$rsvp$$on","lib$rsvp$$eventName","lib$rsvp$$callbacks","lib$rsvp$umd$$RSVP","allSettled","hashSettled","denodeify","rethrow","EventTarget","configure","isInteger","_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","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","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","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","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","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","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","re","pageLoaded","exec","addition","chunkQuery","components","qs","kv","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","nsp","handshake","complete","insertAt","loadTimeout","srcIndex","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","loaded","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","squareMod_","bitSize","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","product_variant_code","autocompleteCallback","uidFieldsEditable","showUIDsDialogAndAdd","productContextData","stock_detail_id","isStockDetailEditable","treeRowHeaderAlwaysVisible","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","wbNewOrderInvoice","showSubtotal","outputTotal","hideTitle","getSubTotal","getTotalTax","wbListItemsRow","STATUS_COLORS","showStatusTags","isOpen","wbListItems","orderItems","initializeSelected","outputSelectedOrderItems","ORDERBY_NAME","ORDERBY_ACTION","ORDERBY_PAID","filterIds","findString","auxArray","sortAndToggleIf","wbItemDetail","CLOTH_MATERIALS","clothMaterials","auxMaterial","material","setToolbarBackgroundColor","getFinalPrice","percentage_discount","addOrRemoveMaterial","getFinalMaterials","materials","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","defaults","configurationField","dialogConfig","SelectSerialNumberTypeDialogController","MsWidgetController","flipped","flip","flippable","compile","tElement","iElement","iAttrs","MsWidgetCtrl","transcludeFn","flipWidget","msTimelineItemDirective","MsTimelineCtrl","threshold","itemLoaded","itemInViewport","scrollEl","getScrollEl","testForImage","testForVisibility","itemReadyWatcher","imgEl","setScrollEl","msTimeline","loadMoreEl","unregisterOnScroll","registerOnScroll","MsStepperController","gotoFirstStep","setCurrentStep","isStepOptional","stepNumber","isStepNumberValid","steps","optionalStep","isStepHidden","hideStep","isStepValid","mainForm","currentStep","currentStepNumber","setOrientation","registerMainForm","registerStep","stepTitle","stepTitleTranslate","setupSteps","resetForm","gotoStep","gotoPreviousStep","gotoNextStep","gotoLastStep","isFirstStep","isLastStep","isStepCurrent","isStepDisabled","filterHiddenStep","isFormValid","msVerticalStepperDirective","ctrls","FormCtrl","MsStepperCtrl","stepInfo","MsStepper","msSplashScreenDirective","$animate","splashScreenRemoveEvent","leave","MdSidenavCtrl","isLockedOpen","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","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","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","msNavToggleDirective","tAttrs","MsNavCtrl","expanded","expandAnimation","collapseAnimation","links","states","regExp","isCollapsed","elementToExpand","elementToCollapse","setToggleItem","disable","clearLockedItems","lockedItems","getLockedItems","locked","lockedItem","currentState","shouldExpand","setLockedItem","foldable","toggleItems","msMaterialColorPickerController","$mdColorPalette","fuseGenerator","activateHueSelection","palette","hues","selectedPalette","selectedHues","removeColor","hue","updateModel","updateSelectedColor","bgColorValue","rgba","palettes","fgColorValue","contrast","msModelType","modelCtrl","$viewValue","$selectedColor","controllers","replaceWith","msMasonryController","defaultOpts","columnCount","respectItemOrder","reLayoutDebounce","md","sm","xs","reLayoutTimeout","reLayout","containerPos","columnWidth","referenceArr","xPos","yPos","refTop","transform","waitImagesLoaded","imagesLoaded","msMasonry","pre","totalSteps","forms","firstStep","lastStep","currentStepInvalid","previousStepInvalid","formsIncomplete","formCtrl","msInfoBarDirective","removeInfoBar","$destroy","templatePath","card","cardTemplateLoaded","msDatepickerFix","msDatepickerFixConfig","$formatters","$parsers","utcOffset","WorkdayService","WORKDAY_STATUSES","Workday","NOT_STARTED","workday","pause","true","utils","precision","rounded","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","selectionRowHeaderWidth","showGridFooter","saveScroll","saveFocus","saveVisible","saveSort","saveFilter","saveGrouping","saveGroupingExpandedStates","saveTreeView","exporterMenuAllData","exporterMenuPdf","exporterMenuExcel","setCurrentLang","columnElements","doubleClickEvent","trackerService","ALLOWED_COMPANY_PLANS","mixpanel","registered","registerAccount","allowedRegisterAccount","registerMixpanelAccount","track","trackMixpanelEvent","initMixpanel","debug","identify","$name","$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","normalizeValue","sanitizeObject","cleaned","nv","namespacedKey","getJson","getRaw","setJson","setRaw","removeRaw","getPickingPackingControllerGlobalStatusKey","getPickingPackingControllerCurrentNavKey","getPickingPackingControllerFilters","setPickingPackingControllerFilters","updatePickingPackingControllerGlobalStatus","resetPickingPackingControllerStorage","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","setLanguage","ScanQueueService","ts","normalizeSuccess","normalizeError","taskFn","skipped","noop","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","labelProviderAdapterService","handleSendcloudFinishError","ERROR_09008_MISSING_WAREHOUSE_CONTACT_PERSON","destinationId","ERROR_10012_SENDCLOUD_ADDRESS_TOO_LONG_EXCEPTION","error_fields","existsProductVariantWithVariant","existsProductVariantWithVariantByVariants","InventoryConfigurationService","INVOICE_TYPES_REVERSE","applyEmailTemplate","subjectKey","bodyKey","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","extraFilters","extraOptions","timeoutKey","broadcastAfter","tryCount","maxRetries","Pending","Processing","Processed","WithErrors","eventOrStatus","executeMarkAsPendingRequest","markAsPendingUrl","getEmptyBadgeData","translatedLabel","_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","STATUS","PENDING","STARTED","FINISHED","FINISHED_WITH_ERRORS","startGenericPolling","showStartToast","startToastMessage","pollingPromise","checkGenericStatus","statusUrl","artifactId","invoicesDownloadZip","invoicesZipStatus","handleInvoiceZipSuccess","handleInvoiceZipError","download_url","showInvoiceZipErrorsDialog","failed_count","artifacts","internalCallback","ARTIFACT_STATUS_FINISHED","ARTIFACT_STATUS_ERROR","manageArtifact","openUrl","openError","openAlertDialog","orderRef","order_ref","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","getTotalRoundedTax","iva","recargo","_Subscription","ContractedPlan","subscription_period","cancelled_at","initializeFromCoupon","featuresDict","addOnsDict","getPlan","planId","isMonthly","product_cover","_SiteProduct","product_description","product_description_long","public_meta","seo_title","seo_description","force_sync_size_as_variations","force_sync_color_as_variations","min_stock_threshold","safety_stock","_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","_replaceYear","yy","yyyy","_getPrefix","_getSuffix","_getCounter","zeros","_SellMatrixData","_this","pagination_class","_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","monetaryInputMapper","monetaryResultApplier","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","getPendingAmount","getTotalPendingToRefund","total_pending","payment_method_available_left","posOrderRefund","available_left","amount_to_refund","recalculate","toMonetaryDocument","updateTaxesDict","mappedInput","calculationBuilder","clearPromotions","clearPromotion","separatePosOrderProductVariants","areEquivalentPosOrderProductVariants","joinPosOrderProductVariants","matchPromotions","applyPromotion","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","_getUnitPriceInclTaxFromPriceState","_getUnitPriceExclTaxFromPriceState","_getMonetaryLineResultForGetters","getTotalReturned","_buildMonetaryLineResult","backupPrices","_extractUnitBasePriceFromFinalPrice","_getMonetaryQuantity","_getMonetaryTaxes","_getGetterQuantity","_isV2EnabledForLine","_extractUnitBasePriceFromCurrentPriceState","_buildMonetaryLineResultFromState","showStrikePrice","getOriginalTotal","avoidReturns","setCustomPriceInclTax","showDiscountInput","showDiscountText","_PosOrderFulfillment","PosOrderFulfillmentProductVariant","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","getTotalUploadAmounts","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","stock_detail_related","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","purchase_order_autocode","invoice_pdf_file","order_products","subtotalByTaxId","totalTaxesPercentValue","priceInclTax","excludeTaxes","setTaxInstance","net_promoter_score","_Invoice","InvoiceLine","Payment","INVOICE_MODELS","cancelled_by","cancellation_of","invoice_model","corrective_of","corrected_by","replaced_by","replacement_of","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","lineData","_is_invoice_readonly","send_to_kubibai","getDiscount","totalToApply","getEarlyPaymentDiscount","getDiscountPercentage","PURCHASE_INVOICE","isDefaultInvoice","hasPendingCorrectableLines","remaining_amount_to_correct_from_original","canBeCorrected","newLines","monetaryDocumentResult","isCancellation","isCorrective","getFileName","_InvoiceLine","_is_invoice_closed","related_orders","initQuantity","avoidRound","taxPercent","surchargePercent","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","BUSINESS","PARTNER","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","minimum_order_enabled","minimum_order_amount","getFullUrl","_AttributeCategory","isMultipleAttribute","isHtmlText","_AttributeCategoryValue","ndWorkingActivityListController","workdayService","getHash","foregrounds","getCapitals","firstName","lastName","getBackgroundColor","getForegroundColor","defaultDate","secondaryText","isAi","infoTooltip","ndUserAutocompleteController","excludeMe","userChanged","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","sectors","availableSortedSectors","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","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","invoiceEmail","invoice_email","contactEmail","emails","cc","bcc","document_id","hasValidEmail","downloadDocument","documentReference","safeSubject","invoiceTypeToTranslationKey","invoiceTypeLabel","ReplenishByWarehouseController","discontinuedStockValuePercentage","npsHidden","netPromoterScore","npss","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","fail","setPrinterType","getAndPrintPosOrderInvoice","PAGE_SIZE_ROLL","printHtmlTicket","chargedGiftCardVoucher","PRINTER_TYPE_HTML","ticketHtml","contentDocument","balanceDiscountAsPercentage","htmlTicket","isDevolutionCard","balance_discount_as_percentage","withNoDiscount","consumedGiftCards","oldDevolutionCard","featureFlag","_printGiftCard","warmUpConnection","htmlRegisterActivitySummary","innerContents","popupWinindow","stateTimeout","handleEmitStateEvent","primerType","printSendcloudTagEvent","printPosOrderEvent","warmUpConnectionEvent","printDevolutionCardEvent","printGiftCardEvent","openCashDrawerEvent","printRegisterActivitySummaryEvent","printRegisterActivitySoldProductsSummaryEvent","printerStateChangedEvent","ndPosOrderShippingMethodsCardController","PosOrderShippingMethod","recalculatePosOrderShippingMethodExclTax","posOrderShippingMethod","updateShipping","addShipping","posOrderShippingMethods","deleteShipping","posm","selectShipping","viewCommercialInvoice","selectedShippingMethod","updateAndPrintCommercialInvoice","posOrdersCommercialInvoice","printShippingLabel","posOrdersPrintShippingLabel","shippingMethodChanged","updatePosOrderShippingMethodTax","initTax","ndPosOrderRepositionOfCardController","unbindReplenishmentPolicyExecuted","fetchAll","fetchingTransfers","postInit","fetchingPurchases","showCard","ndPosOrderPaymentMethodsCardController","$$hashKey","assignPending","totalPending","showNoPaymentMethods","callUpdateOrder","regidterActivityId","paymentMethodEditingDisabled","ndPosOrderProductVariantsTableController","pos_order_product_variants_copy","showSave","canEditPosOrderProductVariantDiscount","getMinimumAmount","hideStockDialog","finishDiscountEdition","canEditPopvLine","ndPosOrderFulfillmentCardController","packWithSendcloud","refundProductsError","checkMinMaxAmount","amountUpdated","changeFulfillment","amount_dict","total_refund_dict","refund_payment_method","scanAndGo","weight_dict","shipping_box_dict","create_default_shipping_box","useProductPackage","amountDict","isScanAndGoScreen","goToNextOrderAfterPacking","jsonResponse","ERROR_04017_FULFILLMENT_NO_AMOUNT_GIVEN","dialogErrors","showSendcloudErrorsDialog","reloadContact","contactId","spofd","USE_PRODUCT_BOXES_ID","highlightProducts","autoAssignShippingBox","shippingBoxesDictByBarcode","shippingBoxesDictById","previousWarehouseId","fulfillmentAvailableWarehouses","allowToggleWarehouse","sendcloudUrl","weightUnit","sendcloudShippingMethodsLoaded","sendcloudShippingMethodsLoading","allocateFulfillment","shipFulfillment","shipSendcloudFulfillment","pickUpFulfillment","returnFulfillment","receiveReturnFulfillment","showFulfillmentActions","cancelFulfillment","refundFulfillment","lockRefundPaymentMethod","refundAndReturnFulfillment","onConfirm","orderPaymentMethods","availablePaymentMethodIds","selectedPaymentMethodId","orderPaymentMethod","hasAmount","assignBatches","pendingFulfillment","updateFulfillment","refundUploadAmountChanged","changeWarehouse","isExternalShipment","generating_pdf","canAddShippingBox","canReadShippingBoxes","lineWeightDisabled","showLineWeight","updateShippingBox","posOrderFulfillmentShippingBox","getPosOrderFulfillmentProductVariantRowClasses","md-orange-50-bg","pofpv-already-refunded","filled","getWeightUnit","alreadyScanned","pofpvNotFound","showBoxInLines","showBoxAndWeightInLines","parseString","realWeight","showSendToSendcloud","labelToSendcloud","noCustomerDialog","ERROR_10014_SENDCLOUD_MISSING_COUNTRY_EXCEPTION","storePrintLabelsAutomatically","external_parcels_id","isReturnedInStore","dtInstanceViewPOPV","initCustomSourceWarehouse","packWithSendcloudButtonEnabled","storeUseProductPackage","useProductPackageChanged","removeAllShippingBoxes","storeGoToNextOrderAfterPacking","shippingMethodsWatch","selectedSendcloudShippingMethodId","FulFillmentStockDialogController","ndPosOrderContactCardController","lastOrderId","shippingAddressId","billingAddressId","hideBillingAddress","addingContact","fetchingContact","shippingAddress","fetchingShippingAddress","billingAddress","fetchingBillingAddress","changeContact","contactSelected","changeShippingAddress","changeBillingAddress","showNewAddressDialog","attachField","unwatchOrder","newOrder","toggleFetchingContact","reloadContactEvent","ndPosOrderAdditionalInformationCardController","noMargin","onUpdate","PlanCardController","isCurrentPlan","hasAddOns","contractedAddOnsDuct","featureIconsDict","RETAIL_WHOLESALE_SALES","ONLINE_SALES","ANALYTICS","showAddOnInfo","showUpdateCurrentPlan","selectedAddOnsDict","hideDialog","changePlan","updatePlan","addOnIds","getFilteredFeatures","getSiteIcon","bannerText","clickable","openInvoicesDialog","pendingInvoices","orderProductsController","manageResponse","autoNavigateToHistoryScan","autoNavigateToHistoryScanChanged","showStockDetailsFeatures","barcodeListenerCallbackUIDS","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","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","INVENTORY_LOYALTY_BALANCE_SPEND_RULES","SALES_DYNAMIC_REPORTS","SALES_DTO","NEW_PRODUCT_LOCATIONS","NEW_STOCK_LOCATIONS","DELIVERIES_AS_LINES","TEMPORARY_ACCOUNT_ACCESS","SITE_VARIANT_MAPPING","PICKING_SELECTIVE_PRINT","PRODUCT_SALE_INFORMATION_CARD","PUBLIC_REGISTRATION_CUSTOMER_LINKS","GIFT_CARD_TOGGLE_VALIDITY","removeMargin","visibleBadge","showIcon","NEW_FEATURE_BADGE_CONFIGURATIONS","dismiss","ndWizardCardController","callSignupStep","callSignup","toggleStep","signupSteps","signupStepsById","currentlyActive","parent_step","signupStep","$$state","steps_done","ndWarehouseIconController","ndWarehouseBadgeController","ndVouchersListController","deregisterSiteIdWatcher","prestashopSiteGiftCards","totalItemsField","cart_rule_id","external_customer_id","external_customer_email","quantity_per_user","tax_included","date_updated","last_sync_uploaded","last_sync_downloaded","updateFiltersParams","deregisterTypesWatcher","$watchCollection","deregisterValidityWatcher","deregisterWatcher","ndVerifactuBadgeController","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","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","ndSiteOperationBadgeController","setBadgeData","badgeData","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","ndPurchaseDeliveriesListController","purchase_order__autocode","purchase_order__target_warehouse__name","purchase_order__contact__name","ndProductsController","selectPricingTier","productVariantBySizeAndColor","colorsById","registerWarehouse","selectPrices","setDisabled","ndInput","PrintOrderDeliveryDialogController","printSkus","changePrintConfig","printConfig","printOrderDelivery","printSaleOrderDelivery","printTransferOrderDelivery","printPurchaseOrderDelivery","savedPrintConfig","SALE_ORDER_DELIVERY","PURCHASE_ORDER_DELIVERY","output_format","searchParams","transferOrderDeliveriesPrint","ndPrintOrderDeliveryButtonController","showOnlyIcon","ndPosOrdersListController","columnsReady","registerSearchText","getAutocode","getUnitsSold","getPaymentStatus","customer__first_name","sanitizedColumns","persistedColumns","ndPosOrderProductVariantsListController","pos_order__register__id","ndPosOrderFulfillmentsListController","ndPackingProductsListController","currentShippingBox","weightChanged","shippingBoxChanged","reference","delivery_autocode","package","finishingEvent","shippingBoxCreatedEvent","setProductShippingBoxEvent","itemsToUpdate","completedCount","gridApiListener","isNewShippingBox","use_product_shipping_box","mdTextElements","mdTextEl","clickEvent","mdOption","closest","ndInvoicesListController","invoicePaymentMethods","getPaymentStatusBadge","getOrigin","POS_ORDER","getInvoiceName","pdf_file","getHeader","getCorrectiveOf","correctiveState","correctiveStateParams","getCorrectedBy","correctedByStates","correctedByStateParams","correctedInv","getReplacedBy","replacedByState","replacedByStateParams","getReplacementOf","replacementOfStates","replacementOfStateParams","replacementInv","getCancellationOf","cancellationOfState","cancellationOfStateParams","getCancelledBy","cancelledByState","cancelledByStateParams","ndHandlerEventsListController","idCellTemplate","operationCellTemplate","columnConfig","statusCellTemplate","ndHandlerEventBadgeController","ndGridController","initializeUidGrid","persistStatusOnDestroyWatcher","sizeWatcher","scheduleExpandVisibleColumns","rawStatus","searchParam","lockedStatusFilter","lockStatusFilter","fixedStatus","paginationNormalized","reapplyLockedStatusFilter","columnKey","expandVisibleColumnsTimeout","renderContainers","bodyContainer","visibleColumnCache","availableWidth","viewport","fallbackViewport","visibleColumns","usedWidth","getColumnCurrentWidth","extraWidth","widthPerColumn","remainder","hasWidthChanges","increment","newWidth","drawnWidth","handlingWindowResize","copyNonStorableFilters","getGridPagePostData","search_fields","serial_number_types","contact_types","fromTimeDateStart","fromTimeDate","fromTimeDateEnd","start_time_start","start_time_end","toTimeDateStart","toTimeDate","toTimeDateEnd","end_time_start","end_time_end","pending_to_invoice","emptyLabel","enableGrouping","targetDest","customerName","formatLargeLocation","filtersChangedWatcher","sortColumnEnabledWatcher","currentRequestController","setLoading","selector","getShortDateTime","getText","extra","ndContactsListController","contactPaymentMethods","hasSearch","getTypeBadge","getCountryName","updateHasSearch","updateSorting","commercial_name","mobile_phone","purchase_count","gender","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","ndAutocompleteController","ndAdjustmentsListController","ndA","navigate","ManyOptionsDialogController","ndLogoStockagile","ndHealthCheckWidgetController","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","DialogWithConfirmationController","secondOptionText","secondOptionCallback","secondOptionClasses","wbDaysOfWeek","ndContractedPlanLimitAlertBoxController","ndMuteBarcodeCallbacks","ndIgnoreBarcodeInputs","ngModelCtrl","getUpdatedValue","newCharacter","currentValue","selectionStart","selectionEnd","hasSelection","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","executePoll","isPolling","getAttempts","pollPromise","maxAttempts","onPoll","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","highlightedCode","hljs","highlight","fuseConfiguration","disableCustomScrollbars","disableMdInkRippleOnMobile","disableCustomScrollbarsOnMobile","configName","configValue","ToolbarController","tmhDynamicLocale","requestBarcode","ACADEMY_LANGS","ACADEMY_URL","hasSession","server_version","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","PreviewPanelController","previewTemplate","SignUpNavigationController","msScrollOptions","appname","NavigationController","newFeatureBadge","MainController","targetScope","$id","runBlock","htmlClass","$ariaProvider","$logProvider","msScrollConfigProvider","fuseConfigProvider","debugEnabled","tabindex","editableThemes","stateChangeStartEvent","showTermsDialogEvent","showTermsDialogOpened","stateChangeStart","toState","fromState","fromParams","loadingProgress","redirectState","stateChangeSuccess","showTermsAndConditionDialog","TermsAndConditionsDialogController","NetPromoterScoreDialogController","submitTpl","cancelTpl","expireDate","baseDomainCookie","$$path","currentPath","isShopifyOAuth","shop","elasticApm","serviceName","serverUrl","disableInstrumentations","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","PAUSED","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_01028_INVOICE_INVALID_CHAIN_TYPE_EXCEPTION","ERROR_02001_COMPANY_SESSION_OUT_OF_SYNC","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_08006_REFRESH_TOKEN_EXPIRED_EXCEPTION","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","INITIATING","INITIATED","AUTHORIZED","CAPTURED","CANCEL_REQUESTED","SIGNATURE_VERIFICATION_ACCEPTED","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","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","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","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","langUse","langPref","responseError","lastUpdate","apiService","NetPromoterScore","localIp","baseUrlV2","branch","quickPanel","myCompany","billingPortal","interceptor","paymentsGateway","dashboard","dataImports","dataImportsStep","productImports","productVariantProviderPrices","product_variant__product","purchaseOrderProductProviderPrice","purchaseOrderProductVariantProviderPrice","purchaseOrderDeliveryLine","purchaseOrderDeliveryProductVariants","purchaseOrdersSendCatalog","saleOrderProducts","saleOrderDeliveryProductVariants","saleOrderDeliveriesStatus","transferOrderDeliveryProductVariants","adjustmentOrderStatus","pofpvUidStocks","pofpvId","packings","posOrderFulfillmentShippingBoxes","collectionOrders","siteGiftCards","categoryGroups","startDashboard","retailDashboard","proformas","quotes","receipts","verifactuHandlerEvents","purchaseOrdersPrint","purchaseOrdersPrintCatalog","purchaseOrderDeliveriesPrintHidePrices","saleOrdersPrintCatalog","saleOrdersCheckCatalogStatus","saleOrderDeliveriesPrintHidePrices","posOrdersInvoice","posOrdersSendPdf","collectionsPrintCatalog","presalesPDF","saleOrdersReport","stockReport","tickets","registerClosures","sellerTransactions","wholesaleDeliveryNotes","workdays","retailCustomers","retailCustomersReport","wholesaleCustomers","wholesaleCustomersReport","productKpi","stockKpi","$templateCache"],"mappings":"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AAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,SAAS,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,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,WAA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","file":"scripts/app-10b16d6179.ae26b743.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                                        PollingService,\n                                        DownloadFileService) {\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.downloadCatalog = downloadCatalog;\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 downloadCatalog() {\n      if (vm.saleOrder.catalog) {\n        DownloadFileService.downloadFile(\n          vm.saleOrder.catalog,\n          vm.saleOrder.autocode + '_catalog.pdf'\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              vm.saleOrder.catalog_in_process = true;\n\n              var catalogPoller = PollingService.create({\n                pollFn: function() {\n                  return api.inventories.saleOrders.get({ id: vm.saleOrder.id, option: 'check-catalog-status' }).$promise;\n                },\n                checkCondition: function(response) {\n                  return !response.catalog_in_process;\n                },\n                onComplete: function(response) {\n                  vm.saleOrder.catalog_in_process = false;\n                  vm.saleOrder.catalog = response.catalog;\n                },\n                onError: function(error) {\n                  vm.saleOrder.catalog_in_process = false;\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                },\n                interval: 3000\n              });\n\n              catalogPoller.start();\n              $scope.$on('$destroy', function() {\n                catalogPoller.stop();\n              });\n\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\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('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('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('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                                       PollingService,\n                                       DownloadFileService) {\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.downloadCatalog = downloadCatalog;\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              vm.purchaseOrder.catalog_in_process = true;\n\n              var catalogPoller = PollingService.create({\n                pollFn: function() {\n                  return api.inventories.purchaseOrders.get({ id: vm.purchaseOrder.id, option: 'check-catalog-status' }).$promise;\n                },\n                checkCondition: function(response) {\n                  return !response.catalog_in_process;\n                },\n                onComplete: function(response) {\n                  vm.purchaseOrder.catalog_in_process = false;\n                  vm.purchaseOrder.catalog = response.catalog;\n                },\n                onError: function(error) {\n                  vm.purchaseOrder.catalog_in_process = false;\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                },\n                interval: 3000\n              });\n\n              catalogPoller.start();\n              $scope.$on('$destroy', function() {\n                catalogPoller.stop();\n              });\n\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 downloadCatalog() {\n      if (vm.purchaseOrder.catalog) {\n        DownloadFileService.downloadFile(\n          vm.purchaseOrder.catalog,\n          vm.purchaseOrder.autocode + '_catalog.pdf'\n        );\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       * CONFIGURATION 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       * CONFIGURATION SUPPORT\n       */\n\n      .state('app.inventory.configuration.support', {\n        url: '/support',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/support.html',\n            controller: 'ConfigurationSupportController as vm'\n          }\n        },\n        resolve: {\n          TemporaryAccountAccessData: function(apiResolver) {\n            return apiResolver.resolve('account.temporaryAccountAccess@list');\n          }\n        },\n        bodyClass: 'configuration-support'\n      })\n\n      /**\n       * CONFIGURATION DEVELOPERS\n       */\n\n      .state('app.inventory.configuration.developers', {\n        url: '/developers',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/developers.html',\n            controller: 'DevelopersController as vm'\n          }\n        },\n        bodyClass: 'developers'\n      })\n\n      /**\n       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * CONFIGURATION 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       * PICKING AND PACKING\n       */\n\n      .state('app.inventory.configuration.picking_packing', {\n        url: '/picking-and-packing',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/picking-packing.html',\n            controller: 'ConfigurationPickingPackingController as vm'\n          }\n        },\n        resolve: {\n          ConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pickingAndPackingConfiguration@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       * CONFIGURATION 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       * CONFIGURATION 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      .state('app.inventory.warehouses.warehouse.contract', {\n        url: '/contract',\n        views: {\n          'subcontent@app.inventory.warehouses.warehouse': {\n            templateUrl: 'app/main/apps/public-registration/views/location-registration/location-registration.html',\n            controller: 'LocationRegistrationController as vm'\n          }\n        },\n        resolve: {\n          WarehouseData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.warehouses@get', { 'id': $stateParams.id });\n          }\n        },\n        bodyClass: 'inventory-warehouse-contract'\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: 'PickingController 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              'serializer': 'SiteListSerializer'\n            });\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.save({\n        option: 'set-ddp-price',\n        id: vm.productVariant.id,\n        ddp_price: vm.productVariant.ddp_price\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($scope, $mdDialog, $mdToast, $filter, api, productVariantPrice, Session,\n                                               HTTP_STATUS, Utils, ProductVariantPriceEdit) {\n    var vm = this;\n\n    // Data\n    vm.DEBOUNCE_INPUTS = 350;\n    vm.productVariantPrice = productVariantPrice instanceof ProductVariantPriceEdit\n      ? productVariantPrice\n      : new ProductVariantPriceEdit(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    vm.calculateMonetaryLine = calculateMonetaryLine;\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      var createPayload = vm.productVariantPrice.toPartialPayload();\n      api.inventories.productVariantPrices.save(\n        createPayload,\n        function(response) {\n          vm.fetching = false;\n          if (vm.productVariantPrice.resetTouchedFields) {\n            vm.productVariantPrice.resetTouchedFields();\n          }\n          $mdDialog.hide(response);\n        }\n      );\n    }\n\n    function update() {\n      vm.fetching = true;\n      var updatePayload = vm.productVariantPrice.toPartialPayload();\n      api.inventories.productVariantPrices.update(\n        updatePayload,\n        function(response) {\n          vm.fetching = false;\n          if (vm.productVariantPrice.resetTouchedFields) {\n            vm.productVariantPrice.resetTouchedFields();\n          }\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          var deletePayload = serializeLegacyProductVariantPrice(vm.productVariantPrice);\n          api.inventories.productVariantPrices.delete(\n            deletePayload,\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    function formatFieldIfNeeded(fieldName, decimals) {\n      var value = vm.productVariantPrice[fieldName];\n      if (value === null || value === '') {\n        return;\n      }\n\n      var numericValue = parseFloat(value);\n      if (isNaN(numericValue)) {\n        return;\n      }\n\n      var decimalPart = String(value).split('.')[1] || '';\n      if (decimalPart.length > decimals) {\n        vm.productVariantPrice[fieldName] = Utils.roundPrice(numericValue, decimals);\n      }\n    }\n\n    /**\n     * Updates the price including tax accordding to excl tax and tax percent value\n     */\n    function priceExclTaxChanged() {\n      formatFieldIfNeeded('price_excl_tax', 6);\n      markTouched('price_excl_tax');\n      if (vm.productVariantPrice.price_excl_tax || vm.productVariantPrice.price_excl_tax === 0) {\n        var requestData = buildMonetaryRequest({\n          basePrice: parseFloat(vm.productVariantPrice.price_excl_tax)\n        });\n\n        calculateMonetaryLine(requestData).then(function(response) {\n          vm.productVariantPrice.price_incl_tax = response.unit_final_price;\n          $scope.$applyAsync();\n        });\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      formatFieldIfNeeded('price_incl_tax', 2);\n      markTouched('price_incl_tax');\n      if (vm.productVariantPrice.price_incl_tax || vm.productVariantPrice.price_incl_tax === 0) {\n        var requestData = buildMonetaryRequest({\n          finalPrice: parseFloat(vm.productVariantPrice.price_incl_tax)\n        });\n\n        calculateMonetaryLine(requestData).then(function(response) {\n          vm.productVariantPrice.price_excl_tax = response.unit_base_price;\n          $scope.$applyAsync();\n        });\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      formatFieldIfNeeded('discount', 6);\n      markTouched('discount');\n      if (vm.productVariantPrice.price_excl_tax === null) {\n        initPriceFields();\n      }\n      if (vm.productVariantPrice.discount) {\n        var requestData = buildMonetaryRequest({\n          basePrice: parseFloat(vm.productVariantPrice.price_excl_tax),\n          discount: {\n            percentage: parseFloat(vm.productVariantPrice.discount)\n          }\n        });\n\n        calculateMonetaryLine(requestData).then(function(response) {\n          vm.productVariantPrice.discount_price_incl_tax = response.unit_final_price;\n          vm.productVariantPrice.discount_price_excl_tax = response.unit_base_price;\n          $scope.$applyAsync();\n        });\n      } else {\n        clearDiscountPriceFields();\n      }\n    }\n\n    function offerPriceExclTaxChanged() {\n      formatFieldIfNeeded('discount_price_excl_tax', 6);\n      markTouched('discount_price_excl_tax');\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        var fixedAmount = parseFloat(vm.productVariantPrice.price_excl_tax) - parseFloat(vm.productVariantPrice.discount_price_excl_tax);\n        fixedAmount = Utils.roundPrice(fixedAmount, 6);\n        var requestData = buildMonetaryRequest({\n          basePrice: parseFloat(vm.productVariantPrice.price_excl_tax),\n          discount: {\n            fixed_amount: fixedAmount\n          }\n        });\n\n        calculateMonetaryLine(requestData).then(function(response) {\n          if (response.discount) {\n            vm.productVariantPrice.discount = response.discount.percentage;\n            vm.productVariantPrice.discount_price_incl_tax = response.unit_final_price;\n            $scope.$applyAsync();\n          }\n        });\n      } else {\n        clearDiscountPriceFields();\n      }\n    }\n\n    function offerPriceInclTaxChanged() {\n      formatFieldIfNeeded('price_incl_tax', 2);\n      formatFieldIfNeeded('discount_price_incl_tax', 2);\n      markTouched('discount_price_incl_tax');\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        var fixedAmount = parseFloat(vm.productVariantPrice.price_incl_tax) - parseFloat(vm.productVariantPrice.discount_price_incl_tax);\n        fixedAmount = Utils.roundPrice(fixedAmount, 2);\n        var requestData = buildMonetaryRequest({\n          finalPrice: parseFloat(vm.productVariantPrice.price_incl_tax),\n          discount: {\n            fixed_amount: fixedAmount\n          }\n        });\n\n        calculateMonetaryLine(requestData).then(function(response) {\n          if (response.discount) {\n            vm.productVariantPrice.discount = response.discount.percentage;\n            vm.productVariantPrice.discount_price_excl_tax = response.unit_base_price;\n            $scope.$applyAsync();\n          }\n        });\n      } else {\n        clearDiscountPriceFields();\n      }\n    }\n\n    function calculateMonetaryLine(requestData) {\n      return api.monetary.monetaryCalculation.save(requestData).$promise;\n    }\n\n    function buildMonetaryRequest(options) {\n      var requestData = {\n        quantity: 1,\n        taxes: [{\n          percentage: getTaxPercentage()\n        }],\n        discount: options.discount || null\n      };\n\n      if (options.basePrice != null) {\n        requestData.base_price = options.basePrice;\n      }\n\n      if (options.finalPrice != null) {\n        requestData.final_price = options.finalPrice;\n      }\n\n      return requestData;\n    }\n\n    function getTaxPercentage() {\n      if (vm.productVariantPrice.tax_percent_value == null) {\n        return 0;\n      }\n\n      return parseFloat(vm.productVariantPrice.tax_percent_value);\n    }\n\n    function serializeLegacyProductVariantPrice(productVariantPrice) {\n      return {\n        id: productVariantPrice.id,\n        product_price: productVariantPrice.product_price,\n        product_variant: productVariantPrice.product_variant,\n        tax: productVariantPrice.tax,\n        tax_percent_value: productVariantPrice.tax_percent_value,\n        temp_price_excl_tax: productVariantPrice.temp_price_excl_tax,\n        temp_price_incl_tax: productVariantPrice.temp_price_incl_tax,\n        price_excl_tax: productVariantPrice.price_excl_tax,\n        price_incl_tax: productVariantPrice.price_incl_tax,\n        discount: productVariantPrice.discount,\n        discount_price_excl_tax: productVariantPrice.discount_price_excl_tax,\n        discount_price_incl_tax: productVariantPrice.discount_price_incl_tax\n      };\n    }\n\n    function markTouched(fieldName) {\n      if (!vm.productVariantPrice || !angular.isFunction(vm.productVariantPrice.markTouched)) {\n        return;\n      }\n\n      vm.productVariantPrice.markTouched(fieldName);\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(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/*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.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.shared-kernel.monetary', []);\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryTaxDTO', _MonetaryTaxDTO);\n\n  function _MonetaryTaxDTO(MonetaryFiniteNumber) {\n\n    function MonetaryTaxDTO(percentage, id, name, surchargePercentage) {\n      this.id = id;\n      this.name = name;\n      this.percentage = MonetaryFiniteNumber.toFiniteNumber(percentage);\n\n      if (typeof surchargePercentage !== 'undefined') {\n        this.surcharge_percentage = MonetaryFiniteNumber.toFiniteNumber(surchargePercentage);\n      }\n    }\n\n    return MonetaryTaxDTO;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryLineFromFinalPriceDTO', _MonetaryLineFromFinalPriceDTO);\n\n  _MonetaryLineFromFinalPriceDTO.$inject = [\n    'MonetaryLineDTO',\n    'FixedMonetaryDiscountDTO',\n    'MonetaryRounder'\n  ];\n\n  function _MonetaryLineFromFinalPriceDTO(\n    MonetaryLineDTO,\n    FixedMonetaryDiscountDTO,\n    MonetaryRounder\n  ) {\n    function MonetaryLineFromFinalPriceDTO(quantity, unitPrice, taxes, discount, isDocumentDiscountEligible) {\n      MonetaryLineDTO.call(this, quantity, unitPrice, taxes, discount, isDocumentDiscountEligible);\n    }\n\n    MonetaryLineFromFinalPriceDTO.prototype = Object.create(MonetaryLineDTO.prototype);\n    MonetaryLineFromFinalPriceDTO.prototype.constructor = MonetaryLineFromFinalPriceDTO;\n\n    MonetaryLineFromFinalPriceDTO.prototype.getUnitBasePrice = function() {\n      var baseBeforeDiscount = this._extractBaseFromFinalPrice();\n\n      if (this.discount) {\n        var discountAmountExclTax = MonetaryRounder.roundUnitBase(\n          this._getDiscountAmountExclTax(baseBeforeDiscount)\n        );\n\n        return baseBeforeDiscount - discountAmountExclTax;\n      }\n\n      return baseBeforeDiscount;\n    };\n\n    MonetaryLineFromFinalPriceDTO.prototype.getUnitBasePriceBeforeDiscount = function() {\n      return this._extractBaseFromFinalPrice();\n    };\n\n    MonetaryLineFromFinalPriceDTO.prototype._extractBaseFromFinalPrice = function() {\n      var totalTaxPercentage = this.getTotalTaxPercentage();\n      var divisor = 1 + (totalTaxPercentage / 100);\n\n      return MonetaryRounder.roundUnitBase(this.unitPrice / divisor);\n    };\n\n    MonetaryLineFromFinalPriceDTO.prototype._getDiscountAmountExclTax = function(\n      baseAmountExclTax\n    ) {\n      if (this.discount instanceof FixedMonetaryDiscountDTO) {\n        var totalTaxPercentage = this.getTotalTaxPercentage();\n        var divisor = 1 + (totalTaxPercentage / 100);\n\n        return this.discount.amount / divisor;\n      }\n\n      return this.discount.calculateDiscountAmount(baseAmountExclTax);\n    };\n\n    return MonetaryLineFromFinalPriceDTO;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryLineFromBasePriceDTO', _MonetaryLineFromBasePriceDTO);\n\n  _MonetaryLineFromBasePriceDTO.$inject = ['MonetaryLineDTO'];\n\n  function _MonetaryLineFromBasePriceDTO(MonetaryLineDTO) {\n    function MonetaryLineFromBasePriceDTO(quantity, unitPrice, taxes, discount, isDocumentDiscountEligible) {\n      MonetaryLineDTO.call(this, quantity, unitPrice, taxes, discount, isDocumentDiscountEligible);\n    }\n\n    MonetaryLineFromBasePriceDTO.prototype = Object.create(MonetaryLineDTO.prototype);\n    MonetaryLineFromBasePriceDTO.prototype.constructor = MonetaryLineFromBasePriceDTO;\n\n    MonetaryLineFromBasePriceDTO.prototype.getUnitBasePrice = function() {\n      if (this.discount) {\n        return this.unitPrice - this.discount.calculateDiscountAmount(this.unitPrice);\n      }\n\n      return this.unitPrice;\n    };\n\n    MonetaryLineFromBasePriceDTO.prototype.getUnitBasePriceBeforeDiscount = function() {\n      return this.unitPrice;\n    };\n\n    return MonetaryLineFromBasePriceDTO;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryLineDTO', _MonetaryLineDTO);\n\n  function _MonetaryLineDTO(MonetaryFiniteNumber) {\n\n    function MonetaryLineDTO(quantity, unitPrice, taxes, discount, isDocumentDiscountEligible) {\n      this.quantity = MonetaryFiniteNumber.toFiniteNumber(quantity);\n      this.unitPrice = MonetaryFiniteNumber.toFiniteNumber(unitPrice);\n      this.taxes = angular.isArray(taxes) ? taxes : [];\n      this.discount = discount || null;\n      this.isDocumentDiscountEligible = isDocumentDiscountEligible !== false;\n    }\n\n    MonetaryLineDTO.prototype.getUnitBasePrice = function() {\n      throw new Error('MonetaryLineDTO.getUnitBasePrice() must be implemented');\n    };\n\n    MonetaryLineDTO.prototype.getUnitBasePriceBeforeDiscount = function() {\n      throw new Error('MonetaryLineDTO.getUnitBasePriceBeforeDiscount() must be implemented');\n    };\n\n    MonetaryLineDTO.prototype.getTotalTaxPercentage = function() {\n      return this.taxes.reduce(function(total, tax) {\n        return total\n          + MonetaryFiniteNumber.toFiniteNumber(tax && tax.percentage)\n          + MonetaryFiniteNumber.toFiniteNumber(tax && tax.surcharge_percentage);\n      }, 0);\n    };\n\n    return MonetaryLineDTO;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('PercentageMonetaryDiscountDTO', _PercentageMonetaryDiscountDTO);\n\n  function _PercentageMonetaryDiscountDTO(MonetaryFiniteNumber) {\n\n    function PercentageMonetaryDiscountDTO(percentage) {\n      this.percentage = MonetaryFiniteNumber.toFiniteNumber(percentage);\n    }\n\n    PercentageMonetaryDiscountDTO.prototype.calculateDiscountAmount = function(baseAmount) {\n      return MonetaryFiniteNumber.toFiniteNumber(baseAmount)\n        * (this.percentage / 100);\n    };\n\n    return PercentageMonetaryDiscountDTO;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('FixedMonetaryDiscountDTO', _FixedMonetaryDiscountDTO);\n\n  function _FixedMonetaryDiscountDTO(MonetaryFiniteNumber) {\n\n    function FixedMonetaryDiscountDTO(amount) {\n      this.amount = MonetaryFiniteNumber.toFiniteNumber(amount);\n    }\n\n    FixedMonetaryDiscountDTO.prototype.calculateDiscountAmount = function() {\n      return this.amount;\n    };\n\n    return FixedMonetaryDiscountDTO;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('FixedInclTaxMonetaryDiscountDTO', _FixedInclTaxMonetaryDiscountDTO);\n\n  function _FixedInclTaxMonetaryDiscountDTO(MonetaryFiniteNumber) {\n\n    function FixedInclTaxMonetaryDiscountDTO(amount) {\n      this.amount = MonetaryFiniteNumber.toFiniteNumber(amount);\n    }\n\n    FixedInclTaxMonetaryDiscountDTO.prototype.calculateDiscountAmount = function() {\n      return this.amount;\n    };\n\n    return FixedInclTaxMonetaryDiscountDTO;\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('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('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('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      } 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 isMissingTicketConfigurationError = response.data &&\n              response.data.error === ERROR_CODES.ERROR_01034_MISSING_TICKET_CONFIGURATION_FOR_WAREHOUSE_OR_SITE;\n\n            if (isMissingTicketConfigurationError) {\n              if (Session.hasPermission('inventory.warehouses.warehouse.details.update')) {\n                var isSiteMissingTicketConfiguration = !!(response.data && response.data.site_id);\n                var bodyCopy = isSiteMissingTicketConfiguration\n                  ? 'SALES_LOG.MISSING_TICKET_CONFIGURATION_SITE_DIALOG_BODY'\n                  : 'SALES_LOG.MISSING_TICKET_CONFIGURATION_DIALOG_BODY';\n\n                var missingTicketConfigurationDialog = $mdDialog.confirm()\n                  .title($filter('translate')('SALES_LOG.MISSING_TICKET_CONFIGURATION_DIALOG_TITLE'))\n                  .htmlContent($filter('translate')(bodyCopy))\n                  .cancel($filter('translate')('GENERAL.CANCEL'))\n                  .ok($filter('translate')('SALES_LOG.MISSING_TICKET_CONFIGURATION_DIALOG_ACTION'));\n\n                $mdDialog.show(missingTicketConfigurationDialog).then(function() {\n                  if (isSiteMissingTicketConfiguration) {\n                    $state.go('app.ecommerce.sites.site.details', { id: response.data.site_id });\n                  } else {\n                    $state.go('app.inventory.warehouses.warehouse.details', { id: response.data.warehouse_id });\n                  }\n                }, function() {\n                });\n              } else {\n                var missingTicketConfigurationNoPermissionDialog = $mdDialog.alert()\n                  .title($filter('translate')('SALES_LOG.MISSING_TICKET_CONFIGURATION_DIALOG_TITLE'))\n                  .htmlContent($filter('translate')('SALES_LOG.MISSING_TICKET_CONFIGURATION_NO_PERMISSION_DIALOG_BODY'))\n                  .ok($filter('translate')('SALES_LOG.UNDERSTOOD'));\n\n                $mdDialog.show(missingTicketConfigurationNoPermissionDialog);\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 (!vm.posOrder.autocode && !Session.hasPermission('sale.sales_log.delete_draft')) {\n        return;\n      }\n      if (vm.posOrder.autocode && !Session.hasPermission('sale.sales_log.delete')) {\n        return;\n      }\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    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          parameters: {\n            forceCustomer: true,\n            forceNaturalPersonType: true\n          }\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(invoiceId) {\n      if (!invoiceId) {\n        return;\n      }\n      var url = $state.href('app.accounting.invoices.invoice', { id: invoiceId });\n      $window.open(url, '_blank');\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      if (typeof posOrder.updateTotals === 'function') {\n        posOrder.updateTotals();\n      } else {\n        posOrder.total = getTotal(posOrder);\n        posOrder.subtotal = getSubtotal(posOrder);\n        posOrder.total_taxes = getTotalTaxes(posOrder);\n      }\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      if (posOrderProductVariant && typeof posOrderProductVariant.recalculateDiscounts === 'function') {\n        posOrderProductVariant.recalculateDiscounts();\n      }\n    }\n\n    /**\n     * Returns the total of the given sale\n     * @param posOrder\n     * @returns {number}\n     */\n    function getTotal(posOrder) {\n      if (posOrder && typeof posOrder.getTotal === 'function') {\n        return posOrder.getTotal();\n      }\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 && typeof posOrderProductVariant.getTotal === 'function' && typeof posOrderProductVariant.getSubtotal === 'function') {\n        return inclTax\n          ? posOrderProductVariant.getTotal(true, false)\n          : posOrderProductVariant.getSubtotal(true, false);\n      }\n\n      return 0;\n    }\n\n    /**\n     * Returns the sub-total of the given sale\n     * @param posOrder\n     * @returns {number}\n     */\n    function getSubtotal(posOrder) {\n      if (posOrder && typeof posOrder.getSubtotal === 'function') {\n        return posOrder.getSubtotal();\n      }\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      if (posOrder && typeof posOrder.getTotalTaxes === 'function') {\n        return posOrder.getTotalTaxes();\n      }\n\n      var result = 0;\n      posOrder.pos_order_product_variants.forEach(function (item) {\n        if (typeof item.getTaxQuantity === 'function') {\n          result += item.getTaxQuantity();\n        }\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      cashFundChanged();\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      // As per user requirements, both cash fund and balance posted should show the same value (opening amount)\n      // This maintains the behavior where both fields represent \"money that will be left in cash register\"\n      vm.balancePosted = angular.copy(vm.cashFund);\n      vm.balancePostedExpected = angular.copy(vm.balancePosted);\n    }\n\n    function getTotalAccountedCash() {\n      // This function calculates the total accounted cash (opening + movements + payments)\n      // Currently not used for display per user requirements, but kept for potential future needs\n      var openingAmount = getOpeningCashMovement();\n      \n      // Get non-opening cash movements total\n      var nonOpeningMovements = 0;\n      vm.registerActivity.cash_movements.forEach(function(cashMovement) {\n        if (!cashMovement.is_opening && !cashMovement.is_closure) {\n          nonOpeningMovements += cashMovement.amount;\n        }\n      });\n      \n      // Get default cash payment method total\n      var defaultCashTotal = getDefaultCashPaymentMethod();\n      \n      return openingAmount + nonOpeningMovements + defaultCashTotal;\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.sale')\n    .controller('ToggleValidityDialogController', ToggleValidityDialogController);\n\n  /** @ngInject */\n  function ToggleValidityDialogController($mdDialog, api, giftCard) {\n    var vm = this;\n\n    // Data\n    vm.loading = false;\n    vm.targetValidity = !giftCard.is_valid;\n\n    if (giftCard.is_valid) {\n      vm.title = 'GIFT_CARDS.MARK_AS_INVALID_TITLE';\n      vm.body = 'GIFT_CARDS.MARK_AS_INVALID_BODY';\n      vm.confirmLabel = 'GIFT_CARDS.MARK_AS_INVALID';\n    } else {\n      vm.title = 'GIFT_CARDS.MARK_AS_VALID_TITLE';\n      vm.body = 'GIFT_CARDS.MARK_AS_VALID_BODY';\n      vm.confirmLabel = 'GIFT_CARDS.MARK_AS_VALID';\n    }\n\n    // Methods\n    vm.confirm = confirm;\n    vm.cancel = cancel;\n\n    // Functions\n    function confirm() {\n      vm.loading = true;\n      api.sales.giftCards.save(\n        {\n          id: giftCard.id,\n          option: 'toggle-validity'\n        },\n        function onSuccess() {\n          vm.loading = false;\n          $mdDialog.hide();\n        },\n        function onError() {\n          vm.loading = false;\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.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('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('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.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  '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{\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{\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  '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\n          if (item.product_name == null && item.product_code == null) {\n            return false;\n          }\n\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('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('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('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.selectedSaleStoreComment = 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          sale_store_comment: vm.selectedSaleStoreComment,\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                                               Utils) {\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.DEBOUNCE_INPUTS = 500;\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.priceInclTaxChanged = priceInclTaxChanged;\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 priceInclTaxChanged() {\n      var value = vm.product.price_incl_tax;\n      if (!value) {\n        return;\n      }\n\n      var numericValue = parseFloat(value);\n      if (isNaN(numericValue)) {\n        return;\n      }\n\n      var decimalPart = String(value).split('.')[1] || '';\n      if (decimalPart.length > 2) {\n        vm.product.price_incl_tax = Utils.roundPrice(numericValue, 2);\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      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 === HTTP_STATUS.HTTP_200_OK) {\n            vm.codeAlreadyExists = response.counter;\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\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('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, $state, api,\n                                                  GS1_BARCODE_TYPES_BY_ID, GS1_BARCODE_TYPES_BY_NAME, NdBarcodeService,\n                                                  HTTP_STATUS, ECOMMERCE_PLATFORMS, Session, ERROR_CODES, ProductVariantPriceEdit) {\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      if (!vm.product || !vm.product.id) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        $state.go('app.inventory.products');\n        return;\n      }\n\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      productVariantPrice = new ProductVariantPriceEdit(productVariantPrice);\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  '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{\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, ProductPriceEdit) {\n\n    var vm = this;\n\n    // Data\n    vm.DEBOUNCE_INPUTS = 500;\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.offerPercentValueChanged = offerPercentValueChanged;\n    vm.offerPriceExclTaxChanged = offerPriceExclTaxChanged;\n    vm.offerPriceInclTaxChanged = offerPriceInclTaxChanged;\n    vm.enableDiscounts = enableDiscounts;\n    vm.showDiscountBanner = showDiscountBanner;\n    vm.changeFocused = changeFocused;\n    vm.calculateMonetaryLine = calculateMonetaryLine;\n\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 new ProductPriceEdit({\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 new ProductPriceEdit({\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        changed: false,\n        focused: null\n      });\n    }\n\n    function serializeLegacyProductPrice(productPrice, includeDelete) {\n      var payload = {\n        id: productPrice.id,\n        product: productPrice.product,\n        selected: productPrice.selected,\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        changed: productPrice.changed,\n        focused: productPrice.focused\n      };\n\n      if (includeDelete) {\n        payload.delete = productPrice.delete;\n      }\n\n      return payload;\n    }\n\n    function saveProductPrices() {\n      var upsertPayloads = [];\n\n      for (var key in vm.pricesMatrix) {\n\n        if (vm.pricesMatrix[key].changed) {\n          var productPrice;\n          if (vm.product.prices) {\n            productPrice = vm.product.prices.find(function (productPrice) {\n              return productPrice.pricing_tier == key;\n            });\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          vm.pricesMatrix[key].product = vm.product.id;\n\n          if (vm.pricesMatrix[key].id && !vm.pricesMatrix[key].selected) {\n            vm.saving = true;\n            // Delete\n\n            // Set a flag\n            vm.pricesMatrix[key].delete = true;\n            productPrice.delete = true;\n\n            var deletePayload = serializeLegacyProductPrice(productPrice, true);\n\n            api.inventories.productPrices.delete(\n              deletePayload,\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].selected) {\n            upsertPayloads.push(vm.pricesMatrix[key].toPartialPayload());\n          }\n        }\n      }\n\n      if (upsertPayloads.length) {\n        vm.saving = true;\n        api.inventories.productPrices.bulk(\n          upsertPayloads,\n          function (results, fn, status) {\n            if (status == HTTP_STATUS.HTTP_200_OK) {\n              var bulkResults = [];\n              if (angular.isArray(results)) {\n                bulkResults = results;\n              } else if (results && angular.isArray(results.results)) {\n                bulkResults = results.results;\n              }\n\n              if (!bulkResults.length) {\n                bulkResults = upsertPayloads;\n              }\n\n              bulkResults.forEach(function (result) {\n                afterSave(result);\n              });\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          },\n          function (error) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        );\n      } \n    }\n\n    function cancelProductPrices() {\n      initialize();\n\n      $scope.productPricesForm.$setPristine();\n\n      if (vm.cancelCallback) {\n        vm.cancelCallback();\n      }\n    }\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    function getIsValid() {\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    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            markTouched(pricingTierId, 'price_incl_tax');\n          },\n          function() {\n            vm.pricesMatrix[pricingTierId].price_incl_tax = o1_price_incl_tax;\n            vm.pricesMatrix[pricingTierId].keep_price_excl_tax = true;\n            markTouched(pricingTierId, 'price_excl_tax');\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    function priceExclTaxChanged(pricingTierId) {\n      vm.pricesMatrix[pricingTierId].product = vm.product.id;\n      formatFieldIfNeeded(pricingTierId, 'price_excl_tax', 6);\n      markTouched(pricingTierId, 'price_excl_tax');\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\n        var requestData = buildMonetaryRequest(pricingTierId, {\n          basePrice: parseFloat(vm.pricesMatrix[pricingTierId].price_excl_tax)\n        });\n\n        calculateMonetaryLine(pricingTierId, requestData).then(function(response) {\n          vm.pricesMatrix[pricingTierId].price_incl_tax = response.unit_final_price;\n        });\n      } else if (vm.pricesMatrix[pricingTierId].price_excl_tax === null || vm.pricesMatrix[pricingTierId].price_excl_tax === '') {\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      formatFieldIfNeeded(pricingTierId, 'price_incl_tax', 2);\n      markTouched(pricingTierId, 'price_incl_tax');\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\n        var requestData = buildMonetaryRequest(pricingTierId, {\n          finalPrice: parseFloat(vm.pricesMatrix[pricingTierId].price_incl_tax)\n        });\n\n        calculateMonetaryLine(pricingTierId, requestData).then(function(response) {\n          vm.pricesMatrix[pricingTierId].price_excl_tax = response.unit_base_price;\n        });\n      } else if (vm.pricesMatrix[pricingTierId].price_incl_tax === null || vm.pricesMatrix[pricingTierId].price_incl_tax === '') {\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        vm.pricesMatrix[results.pricing_tier].resetTouchedFields();\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    function offerPercentValueChanged(pricingTierId) {\n      vm.pricesMatrix[pricingTierId].product = vm.product.id;\n      formatFieldIfNeeded(pricingTierId, 'discount', 6);\n      markTouched(pricingTierId, 'discount');\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          var requestData = buildMonetaryRequest(pricingTierId, {\n            basePrice: parseFloat(vm.pricesMatrix[pricingTierId].price_excl_tax),\n            discount: {\n              percentage: parseFloat(vm.pricesMatrix[pricingTierId].discount)\n            }\n          });\n\n          calculateMonetaryLine(pricingTierId, requestData).then(function(response) {\n            vm.pricesMatrix[pricingTierId].discount_price_incl_tax = response.unit_final_price;\n            vm.pricesMatrix[pricingTierId].discount_price_excl_tax = response.unit_base_price;\n          });\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      formatFieldIfNeeded(pricingTierId, 'discount_price_excl_tax', 6);\n      markTouched(pricingTierId, 'discount_price_excl_tax');\n\n      if (vm.pricesMatrix[pricingTierId].tax && vm.pricesMatrix[pricingTierId].price_incl_tax && vm.pricesMatrix[pricingTierId].price_excl_tax && vm.pricesMatrix[pricingTierId].discount_price_excl_tax) {\n        vm.pricesMatrix[pricingTierId].changed = true;\n        vm.pricesMatrix[pricingTierId].selected = true;\n\n        var fixedAmount = parseFloat(vm.pricesMatrix[pricingTierId].price_excl_tax) - parseFloat(vm.pricesMatrix[pricingTierId].discount_price_excl_tax);\n        var requestData = buildMonetaryRequest(pricingTierId, {\n          basePrice: parseFloat(vm.pricesMatrix[pricingTierId].price_excl_tax),\n          discount: {\n            fixed_amount: Utils.roundPrice(fixedAmount, 6)\n          }\n        });\n\n        calculateMonetaryLine(pricingTierId, requestData).then(function(response) {\n          if (response.discount) {\n            vm.pricesMatrix[pricingTierId].discount = response.discount.percentage;\n            vm.pricesMatrix[pricingTierId].discount_price_incl_tax = response.unit_final_price;\n          }\n        });\n      }\n    }\n\n    function offerPriceInclTaxChanged(pricingTierId) {\n      vm.pricesMatrix[pricingTierId].product = vm.product.id;\n      formatFieldIfNeeded(pricingTierId, 'price_incl_tax', 2);\n      formatFieldIfNeeded(pricingTierId, 'discount_price_incl_tax', 2);\n      markTouched(pricingTierId, 'discount_price_incl_tax');\n\n      if (vm.pricesMatrix[pricingTierId].tax && vm.pricesMatrix[pricingTierId].price_incl_tax && vm.pricesMatrix[pricingTierId].price_excl_tax && vm.pricesMatrix[pricingTierId].discount_price_incl_tax) {\n        vm.pricesMatrix[pricingTierId].changed = true;\n        vm.pricesMatrix[pricingTierId].selected = true;\n\n        var fixedAmount = parseFloat(vm.pricesMatrix[pricingTierId].price_incl_tax) - parseFloat(vm.pricesMatrix[pricingTierId].discount_price_incl_tax);\n        var requestData = buildMonetaryRequest(pricingTierId, {\n          finalPrice: parseFloat(vm.pricesMatrix[pricingTierId].price_incl_tax),\n          discount: {\n            fixed_amount: Utils.roundPrice(fixedAmount, 2)\n          }\n        });\n\n        calculateMonetaryLine(pricingTierId, requestData).then(function(response) {\n          if (response.discount) {\n            vm.pricesMatrix[pricingTierId].discount = response.discount.percentage;\n            vm.pricesMatrix[pricingTierId].discount_price_excl_tax = response.unit_base_price;\n          }\n        });\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    function calculateMonetaryLine(pricingTierId, requestData) {\n      return api.monetary.monetaryCalculation.save(requestData).$promise;\n    }\n\n    function buildMonetaryRequest(pricingTierId, options) {\n      var tax = getTax(pricingTierId);\n      var requestData = {\n        quantity: 1,\n        taxes: [{\n        id: tax ? tax.id : null,\n        percentage: tax ? parseFloat(tax.percent_value) : 0,\n        name: tax ? tax.name : ''\n      }],\n        discount: options.discount || null\n      };\n\n      if (options.basePrice != null) {\n        requestData.base_price = options.basePrice;\n      }\n\n      if (options.finalPrice != null) {\n        requestData.final_price = options.finalPrice;\n      }\n\n      return requestData;\n    }\n\n    function getTax(pricingTierId) {\n      var taxId = vm.pricesMatrix[pricingTierId].tax;\n      return vm.taxes.find(function (tmpTax) {\n        return tmpTax.id === taxId;\n      });\n    }\n\n    function formatFieldIfNeeded(pricingTierId, fieldName, decimals) {\n      var productPrice = vm.pricesMatrix[pricingTierId];\n      if (!productPrice) {\n        return;\n      }\n\n      var value = productPrice[fieldName];\n      if (value === null || value === '') {\n        return;\n      }\n\n      var numericValue = parseFloat(value);\n      if (isNaN(numericValue)) {\n        return;\n      }\n\n      var decimalPart = String(value).split('.')[1] || '';\n      if (decimalPart.length > decimals) {\n        productPrice[fieldName] = Utils.roundPrice(numericValue, decimals);\n      }\n    }\n\n    function markTouched(pricingTierId, fieldName) {\n      var productPrice = vm.pricesMatrix[pricingTierId];\n      if (!productPrice || !angular.isFunction(productPrice.markTouched)) {\n        return;\n      }\n\n      productPrice.markTouched(fieldName);\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.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.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.isSaleStoreCommentVisible = isSaleStoreCommentVisible;\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 === HTTP_STATUS.HTTP_200_OK) {\n            $scope.codeAlreadyExists = response.counter;\n            if (response.counter === 0) {\n              $scope.productForm.code.$setValidity('uniqueCodeError', true);\n            } else {\n              $scope.productForm.code.$setValidity('uniqueCodeError', false);\n            }\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      // 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 isSaleStoreCommentVisible() {\n      return !$scope.isNew\n        && !($scope.product && $scope.product.is_sample)\n        && !($scope.product && $scope.product.is_raw_material);\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\n  angular\n    .module('app.core')\n    .controller('ndProductEcommerceController', ndProductEcommerceController)\n    .directive('ndProductEcommerce', ndProductEcommerce);\n\n  /** @ngInject */\n  function ndProductEcommerceController(\n    $scope,\n    $compile,\n    $document,\n    $mdToast,\n    $mdDialog,\n    $filter,\n    $interval,\n    $q,\n    $translate,\n    SiteProduct,\n    api,\n    Session,\n    DTColumnBuilder,\n    HTTP_STATUS,\n    ECOMMERCE_PLATFORMS,\n    ECOMMERCE_SYNC_OPTIONS,\n    ERROR_CODES,\n    $sce\n  ) {\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    vm.dtColumnsBySite = {};\n    vm.dtInstancesBySite = {};\n    vm.dtOptionsBySite = {};\n    vm.externalVariantIdsListBySite = {};\n    vm.searchProductVariantBySite = {};\n    vm.interval = {};\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.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.showNeverStockSynchronizedText = showNeverStockSynchronizedText;\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.showSyncButton = showSyncButton;\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    vm.searchVariants = searchVariants;\n    vm.checkEnterkey = checkEnterkey;\n    vm.showInitExternalVariantsIdsDictDialog = showInitExternalVariantsIdsDictDialog;\n    vm.syncEnabledChanged = syncEnabledChanged;\n    vm.copyToClipboard = copyToClipboard;\n\n    // Initialization\n    init();\n\n    // Functions\n    function init() {\n      var showForceVariations = false;\n\n      var tempColorDIct = {};\n      var tempSizeDIct = {};\n      vm.productVariantsDict = {};\n      vm.product.product_variants.forEach(function(productVariant) {\n        vm.productVariantsDict[productVariant.id] = 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.siteProductsDict = {};\n      vm.sites.forEach(function(site) {\n        site.showConfig = false;\n        vm.sitesDict[site.id] = site;\n        vm.siteProductsDict[site.id] = initASiteProduct(site.id);\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.showForceColorVariations = vm.product.color_variants.length === 1 && showForceVariations;\n      vm.showForceSizeVariations = vm.product.size_variants.length === 1 && showForceVariations;\n\n      vm.siteProducts.forEach(function(sp) {\n        vm.siteProductsDict[sp.site_id] = sp;\n        if (sp.synchronizing) {\n          checkSyncSiteProductFinished({ id: sp.site_id }, 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_id] && vm.sitesDict[sp.site_id].platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY) {\n          vm.siteProductsDict[sp.site_id].showForceCreationCheckbox = !sp.external_id;\n        }\n\n        vm.dtInstancesBySite[sp.site_id] = {};\n        initExternalVariantIdsListBySite(sp);\n        initDatatable(sp.site_id);\n      });\n\n      vm.sites\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 initExternalVariantIdsListBySite(siteProduct) {\n      vm.externalVariantIdsListBySite[siteProduct.site_id] = [];\n      if(siteProduct.external_variant_ids) {\n        Object.keys(siteProduct.external_variant_ids).forEach(function(productVariantId) {\n          if(vm.productVariantsDict[productVariantId]){\n            vm.externalVariantIdsListBySite[siteProduct.site_id].push({\n              id: productVariantId,\n              sku: vm.productVariantsDict[productVariantId].sku,\n              barcode: vm.productVariantsDict[productVariantId].barcode,\n              color: vm.productVariantsDict[productVariantId].color_name,\n              size: vm.productVariantsDict[productVariantId].size_name,\n              external_variant_id: siteProduct.external_variant_ids[productVariantId]\n            });\n          }\n        });\n      }\n    }\n\n    function initDatatable(siteId){\n      vm.dtColumnsBySite[siteId] = [\n          DTColumnBuilder.newColumn('id').notVisible(),\n          DTColumnBuilder.newColumn('sku').withTitle($filter('translate')('PRODUCT.PRODUCT_VARIANT'))\n          .renderWith(function(data, type, full, meta) {\n            var result = '<div layout=\"column\">';\n            if(full.sku){\n              result += '<span class=\"nowrap\">'+full.sku+'</span>';\n            }\n            if(full.barcode){\n              result += '<div><span class=\"nowrap barcode-text\"> '+full.barcode+'</span></div>';\n            }\n            result += '</div>';\n            return result;\n          }),\n          DTColumnBuilder.newColumn('color').withTitle(vm.product.color_category_name),\n          DTColumnBuilder.newColumn('size').withTitle(vm.product.size_category_name),\n          DTColumnBuilder.newColumn('external_variant_id').withTitle($filter('translate')('SITE.EXTERNAL_VARIANT_ID'))\n          .withClass('text-right')\n          .renderWith(function(data, type, full, meta) {\n            var result = '<div layout=\"row\" layout-align=\"end center\">';\n            result += '<a class=\"md-primary cursor-pointer\" ' +\n              'ng-click=\"siteProductsDict[' + siteId + '].external_variant_ids_visible[' + full.id + '] = true\" ' +\n              'ng-show=\"!siteProductsDict[' + siteId + '].external_variant_ids_visible[' + full.id + ']\" >' +\n              '{{siteProductsDict[' + siteId + '].external_variant_ids[' + full.id + '] || (\"SITE.ADD_MAPPING\" | translate) }}' + '</a>';\n            result += '<input class=\"nd-input in-table\" ' +\n              'ng-model=\"siteProductsDict[' + siteId + '].external_variant_ids[' + full.id + ']\" ' +\n              'ng-blur=\"siteProductsDict[' + siteId + '].external_variant_ids_visible[' + full.id + '] = false\" ' +\n              'ng-show=\"siteProductsDict[' + siteId + '].external_variant_ids_visible[' + full.id + ']\"  ' +\n              'ng-keydown=\"checkEnterkey($event, '+ siteId +', '+ full.id + ')\">';\n            result += '</div>';\n            return result;\n          })\n        ];\n        vm.dtOptionsBySite[siteId] = {\n          data: vm.externalVariantIdsListBySite[siteId],\n          rowId: 'id',\n          dom: 'rt<\"bottom\"<\"left\"><\"right\"<\"info\"i><\"pagination\"p>>>',\n          pagingType: 'simple',\n          pageLength: 10,\n          responsive: false,\n          searchDelay: 0,\n          language: {\n            url: 'app/main/apps/inventory/i18n/datatables/' + $translate.use() + '.json'\n          },\n          rowCallback: rowCallback,\n          createdRow: createdRow,\n          drawCallback: drawCallback\n        };\n    }\n\n    function deleteSiteProduct($event, site) {\n      $event.stopPropagation();\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[site.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            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function clickSiteSwitch(site, event) {\n      event.stopPropagation();\n    }\n\n    function syncEnabledChanged(site){\n      if(site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO){\n        syncEnabledChangedForZalando(site);\n        return;\n      }\n      saveSiteProduct(site);\n    }\n\n    function syncEnabledChangedForZalando(site){\n      if(vm.siteProductsDict[site.id] && vm.siteProductsDict[site.id].id){\n        deleteZalandoSiteProduct(site);\n      } else {\n        createSiteProductIfNotExists();\n        saveSiteProduct(site);\n      }\n    }\n\n    function deleteZalandoSiteProduct(site){\n      vm.siteProductsDict[site.id].saving = true;\n      api.ecommerce.siteProducts.delete({\n          id: vm.siteProductsDict[site.id].id\n        }, function(response, callback, status) {\n          if(status === HTTP_STATUS.HTTP_204_NO_CONTENT){\n            vm.siteProductsDict[site.id] = initASiteProduct(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\n    function createSiteProductIfNotExists(siteId){\n       if(vm.siteProductsDict[siteId] && vm.siteProductsDict[siteId].id){\n        return;\n      }\n      vm.siteProductsDict[siteId] = initASiteProduct(siteId);\n       vm.siteProductsDict[siteId].sync_enabled = true;\n       vm.siteProductsDict[siteId].active = true;\n    }\n\n    function initASiteProduct(siteId){\n      return new SiteProduct({\n          site_id: siteId,\n          product_id: vm.product.id,\n        });\n    }\n\n    function saveSiteProduct(site) {\n      if (vm.siteProductsDict[site.id] && vm.siteProductsDict[site.id].id) {\n        updateSiteProduct(site);\n      } else {\n        createSiteProduct(site.id);\n      }\n    }\n\n    function updateSiteProduct(site){\n      vm.siteProductsDict[site.id].saving = true;\n      api.ecommerce.siteProducts.update(\n        vm.siteProductsDict[site.id].toJson(),\n        function(response, callback, status) {\n          if (status === 200) {\n            vm.siteProductsDict[site.id] = new SiteProduct(response);\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\n    function createSiteProduct(siteId){\n      vm.siteProductsDict[siteId].saving = true;\n      api.ecommerce.siteProducts.save(\n        vm.siteProductsDict[siteId].toJson(),\n        function(response, callback, status) {\n          if (status === 201) {\n            vm.siteProductsDict[siteId] = new SiteProduct(response);\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n            if (vm.sitesDict[siteId].platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY && !vm.siteProductsDict[siteId].external_id) {\n              vm.siteProductsDict[siteId].showForceCreationCheckbox = true;\n            }\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.siteProductsDict[siteId].saving = false;\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 if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST) {\n                vm.siteProductsDict[site.id].synchronizing = false;\n                vm.siteProductsDict[site.id].waiting_to_synchronize = false;\n                if (response && response.error) {\n                  if (response.error === 'ERROR_08006_REFRESH_TOKEN_EXPIRED_EXCEPTION' &&\n                      site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA) {\n                    site.reauthentication_required = true;\n\n                    var confirm = $mdDialog.alert()\n                      .title($filter('translate')('SITE.REAUTHENTICATION_MIRAVIA_TITLE'))\n                      .htmlContent($filter('translate')('SITE.REAUTHENTICATION_MIRAVIA_MESSAGE'))\n                      .clickOutsideToClose(true)\n                      .parent(angular.element(document.body))\n                      .ok($filter('translate')('GENERAL.CLOSE'));\n\n                    $mdDialog.show(confirm);\n                  } else {\n                    $mdToast.show($mdToast.simple().textContent($filter('translate')('ERROR_MESSAGES.' + response.error)).position('top right'));\n                  }\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    }\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                  getSiteProduct(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                  getSiteProduct(vm.siteProductsDict[site.id].id);\n                }\n              }\n            } else {\n              // TODO\n            }\n          }\n        );\n      }, 5000);\n    }\n\n    function getSiteProduct(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_id] = new SiteProduct(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              vm.siteProductsDict[site.id] = initASiteProduct(site.id);\n            }\n          }\n        );\n      }, 5000);\n    }\n\n    function showErrors(site, event) {\n      event.stopPropagation();\n\n      var siteProduct = vm.siteProductsDict[site.id];\n      var xmlSnippet = siteProduct && (siteProduct.xml_snippet || siteProduct.error_snippet);\n      if (xmlSnippet) {\n        showXmlErrorDialog(String(xmlSnippet));\n        return;\n      }\n\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 showXmlErrorDialog(xmlSnippet) {\n      $mdDialog.show({\n        clickOutsideToClose: true,\n        parent: angular.element(document.body),\n        locals: {\n          xmlSnippet: xmlSnippet,\n        },\n        controller: 'XmlErrorDialogController',\n        controllerAs: 'vm',\n        bindToController: true,\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/xml-error-dialog/xml-error-dialog.html'\n      });\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\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].external_id) {\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    }\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.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 showNeverStockSynchronizedText(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_stock_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)) {\n        site.showConfig = !site.showConfig;\n      }\n    }\n\n    function querySearch(site) {\n      var deferred = $q.defer();\n      var data = {\n        search: vm.siteProductsDict[site.id].searchWebCateogryText,\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 showSyncButton(site, action){\n      if(action !== 'stock' && site.sync_stock_only){\n        return false;\n      }\n      if(action ==='price'){\n       return site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP;\n      }\n      return true;\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.siteProductsDict[site.id].selectedWebCategoryItem) {\n        if (!vm.siteProductsDict[site.id].selectedWebCategories) {\n          vm.siteProductsDict[site.id].selectedWebCategories = [];\n        }\n        vm.siteProductsDict[site.id].selectedWebCategories.push(angular.copy(vm.siteProductsDict[site.id].selectedWebCategoryItem));\n      }\n      vm.siteProductsDict[site.id].selectedWebCategoryItem = null;\n    }\n\n    function openAdvancedCategorySearch(site) {\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.siteProductsDict[site.id].selectedWebCategories\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    function searchVariants(siteId) {\n      if ($scope.dtInstancesBySite[siteId] && $scope.dtInstancesBySite[siteId].DataTable) {\n        var searchTerm = $scope.searchProductVariantBySite[siteId] || '';\n        $scope.dtInstancesBySite[siteId].DataTable.search(searchTerm).draw();\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      return nRow;\n    }\n\n    function drawCallback(settings) {\n\n    }\n\n    function checkEnterkey(event, siteId, productVariantId) {\n      if (event.key === \"Enter\" || event.key === \"Escape\") {\n        vm.siteProductsDict[siteId].external_variant_ids_visible[productVariantId] = false;\n      }\n    }\n\n    function showInitExternalVariantsIdsDictDialog(siteId){\n      if(vm.siteProductsDict[siteId].canInitializeExternalVariantIdsDict()){\n        initExternalVariantsIdsDict(siteId);\n      } else {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('SITE.UPDATE_EXTERNAL_VARIANT_IDS_MAPPING'))\n          .textContent($filter('translate')('SITE.UPDATE_EXTERNAL_VARIANT_IDS_MAPPING_MSG'))\n          .clickOutsideToClose(true)\n          .ok($filter('translate')('SITE.UPDATE_MAPPING'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          initExternalVariantsIdsDict(siteId);\n        }, function() {});\n      }\n    }\n\n    function initExternalVariantsIdsDict(siteId){\n       api.ecommerce.siteProducts.get(\n          {\n            id: vm.siteProductsDict[siteId].id,\n            option: 'init-external-variant-ids-dict'\n          },\n          function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.siteProductsDict[siteId].external_variant_ids = response.external_variant_ids;\n              initExternalVariantIdsListBySite(vm.siteProductsDict[siteId]);\n              initDatatable(siteId);\n            } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n    }\n\n    function copyToClipboard($event, value){\n      $event.stopPropagation();\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  /** @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('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('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.originalAttributeCategoryValuesSnapshot = [];\n\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          vm.originalAttributeCategoryValuesSnapshot = angular.copy(vm.attributeCategoryValues);\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\n      var hasChanges = false;\n      if (vm.attributeCategoryValues.length !== vm.originalAttributeCategoryValuesSnapshot.length) {\n        hasChanges = true;\n      } else {\n        for (var i = 0; i < vm.attributeCategoryValues.length && !hasChanges; i++) {\n          var curr = vm.attributeCategoryValues[i];\n          var orig = vm.originalAttributeCategoryValuesSnapshot[i];\n          var currComparable = {\n            id: curr.id || null,\n            attributecategory: curr.attributecategory,\n            attributes: angular.copy(curr.attributes) || [],\n            value: curr.value || null,\n            text_value: curr.text_value || null,\n            json_value: curr.json_value || null,\n            int_value: curr.int_value || null,\n            decimal_value: curr.decimal_value || null\n          };\n          var origComparable = {\n            id: orig.id || null,\n            attributecategory: orig.attributecategory,\n            attributes: angular.copy(orig.attributes) || [],\n            value: orig.value || null,\n            text_value: orig.text_value || null,\n            json_value: orig.json_value || null,\n            int_value: orig.int_value || null,\n            decimal_value: orig.decimal_value || null\n          };\n          if (currComparable.attributes && currComparable.attributes.sort) {\n            currComparable.attributes.sort();\n          }\n          if (origComparable.attributes && origComparable.attributes.sort) {\n            origComparable.attributes.sort();\n          }\n          if (!angular.equals(currComparable, origComparable)) {\n            hasChanges = true;\n          }\n        }\n      }\n\n      if (!hasChanges) {\n        return;\n      }\n\n      vm.saving = true;\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        if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n          vm.originalAttributeCategoryValuesSnapshot = angular.copy(vm.attributeCategoryValues);\n        }\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('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('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.core')\n    .controller('XmlErrorDialogController', XmlErrorDialogController);\n\n  /** @ngInject */\n  function XmlErrorDialogController(\n    $mdDialog,\n    $sce,\n    $filter,\n    xmlSnippet,\n    Utils\n  ) {\n    var vm = this;\n\n    vm.xmlContent = buildXmlErrorDialogHtml(xmlSnippet);\n    vm.copyXml = function($event) {\n      Utils.copyToClipboard($event, xmlSnippet);\n    };\n    vm.close = function() {\n      $mdDialog.hide();\n    };\n\n    function buildXmlErrorDialogHtml(xmlSnippet) {\n      var snippet = String(xmlSnippet || '');\n      var highlightRange = getXmlHighlightRangeFromMessage(snippet);\n\n      if (!highlightRange) {\n        highlightRange = getFallbackXmlHighlightRange(snippet);\n      }\n\n      return renderXmlWithHighlight(snippet, highlightRange);\n    }\n\n    function getXmlHighlightRangeFromMessage(xmlSnippet) {\n\n      var lineColumnMatch = xmlSnippet.match(/line\\s*(\\d+)\\s*[,;:]?\\s*(?:column|col)\\s*(\\d+)/i);\n      if (lineColumnMatch) {\n        return getRangeByLineAndColumn(xmlSnippet, parseInt(lineColumnMatch[1], 10), parseInt(lineColumnMatch[2], 10));\n      }\n\n      var lineMatch = xmlSnippet.match(/line\\s*(\\d+)/i);\n      if (lineMatch) {\n        return getLineRange(xmlSnippet, parseInt(lineMatch[1], 10));\n      }\n\n      var offsetMatch = xmlSnippet.match(/(?:position|pos|offset|character|char|byte)\\s*(\\d+)/i);\n      if (offsetMatch) {\n        return getRangeByOffset(xmlSnippet, parseInt(offsetMatch[1], 10));\n      }\n\n      return null;\n    }\n\n    function getRangeByLineAndColumn(xmlSnippet, line, column) {\n      if (!line || line < 1) {\n        return null;\n      }\n\n      var lines = xmlSnippet.split('\\n');\n      if (line > lines.length) {\n        return null;\n      }\n\n      var start = 0;\n      for (var i = 0; i < line - 1; i++) {\n        start += lines[i].length + 1;\n      }\n\n      if (column && column > 0) {\n        start += Math.min(column - 1, lines[line - 1].length);\n        return {\n          start: start,\n          end: Math.min(start + 1, xmlSnippet.length)\n        };\n      }\n\n      return getLineRange(xmlSnippet, line);\n    }\n\n    function getLineRange(xmlSnippet, line) {\n      if (!line || line < 1) {\n        return null;\n      }\n\n      var lines = xmlSnippet.split('\\n');\n      if (line > lines.length) {\n        return null;\n      }\n\n      var start = 0;\n      for (var i = 0; i < line - 1; i++) {\n        start += lines[i].length + 1;\n      }\n\n      var end = start + lines[line - 1].length;\n      if (end <= start) {\n        end = Math.min(start + 1, xmlSnippet.length);\n      }\n\n      return {\n        start: start,\n        end: end\n      };\n    }\n\n    function getRangeByOffset(xmlSnippet, offset) {\n      if (!offset || offset < 1 || !xmlSnippet.length) {\n        return null;\n      }\n\n      var start = Math.min(offset - 1, xmlSnippet.length - 1);\n      return {\n        start: start,\n        end: Math.min(start + 1, xmlSnippet.length)\n      };\n    }\n\n    function getFallbackXmlHighlightRange(xmlSnippet) {\n      if (!xmlSnippet.length) {\n        return null;\n      }\n\n      for (var i = 0; i < xmlSnippet.length; i++) {\n        var code = xmlSnippet.charCodeAt(i);\n        var isAllowed = code === 0x9 || code === 0xA || code === 0xD || (code >= 0x20 && code <= 0xD7FF) || (code >= 0xE000 && code <= 0xFFFD);\n        if (!isAllowed) {\n          return {\n            start: i,\n            end: Math.min(i + 1, xmlSnippet.length)\n          };\n        }\n      }\n\n      var ampersandIndex = xmlSnippet.search(/&(?!amp;|lt;|gt;|quot;|apos;|#\\d+;|#x[0-9a-f]+;)/i);\n      if (ampersandIndex >= 0) {\n        return {\n          start: ampersandIndex,\n          end: Math.min(ampersandIndex + 1, xmlSnippet.length)\n        };\n      }\n\n      var lastTagIndex = xmlSnippet.lastIndexOf('<');\n      if (lastTagIndex >= 0) {\n        var probableLine = xmlSnippet.slice(0, lastTagIndex).split('\\n').length;\n        return getLineRange(xmlSnippet, probableLine) || {\n          start: lastTagIndex,\n          end: Math.min(lastTagIndex + 1, xmlSnippet.length)\n        };\n      }\n\n      return {\n        start: 0,\n        end: 1\n      };\n    }\n\n    function renderXmlWithHighlight(xmlSnippet, highlightRange) {\n      if (!highlightRange) {\n        return '<pre class=\"log-pre xml-error-pre\">' + escapeHtml(xmlSnippet) + '</pre>';\n      }\n\n      var start = Math.max(0, Math.min(highlightRange.start, xmlSnippet.length - 1));\n      var end = Math.max(start + 1, Math.min(highlightRange.end, xmlSnippet.length));\n      var highlightedText = xmlSnippet.slice(start, end);\n\n      return '<pre class=\"log-pre xml-error-pre\">'\n        + escapeHtml(xmlSnippet.slice(0, start))\n        + '<span class=\"xml-error-highlight\">'\n        + escapeHighlightedXmlSegment(highlightedText)\n        + '</span>'\n        + escapeHtml(xmlSnippet.slice(end))\n        + '</pre>';\n    }\n\n    function escapeHighlightedXmlSegment(value) {\n      var segment = String(value || '');\n      var escaped = '';\n\n      for (var i = 0; i < segment.length; i++) {\n        var char = segment.charAt(i);\n        var code = segment.charCodeAt(i);\n        if (isInvisibleControlCharacter(code)) {\n          escaped += '<span class=\"xml-error-control-char\">[' + formatControlCode(code) + ']</span>';\n          continue;\n        }\n        escaped += escapeHtml(char);\n      }\n\n      return escaped;\n    }\n\n    function isInvisibleControlCharacter(code) {\n      return (code < 0x20 && code !== 0x9 && code !== 0xA && code !== 0xD) || code === 0x7F;\n    }\n\n    function formatControlCode(code) {\n      var hex = code.toString(16).toUpperCase();\n      if (hex.length < 2) {\n        hex = '0' + hex;\n      }\n      return '0x' + hex;\n    }\n\n    function escapeHtml(value) {\n      return String(value)\n        .replace(/&/g, '&amp;')\n        .replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;')\n        .replace(/\"/g, '&quot;')\n        .replace(/'/g, '&#39;');\n    }\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          var payload = angular.copy(vm.uidStock);\n          payload.option = 'create-for-stocktaking';\n\n          api.inventories.uidStocks.save(\n            payload,\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.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('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.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\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    $scope.rowClass = rowClass;\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: $scope.rowClass\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: $scope.rowClass\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: constructCellTemplateLink('{{row.entity.origin_code}}'),\n          cellClass: $scope.rowClass\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: $scope.rowClass\n        },\n        amount: {\n          displayName: $filter('translate')('GENERAL.UNITS_UPPERCASE'),\n          headerTooltip: $filter('translate')('GENERAL.UNITS_UPPERCASE'),\n          field: 'amount',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div>{{row.entity.total_amount | number: 0}}</div>',\n          cellClass: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\n        },\n        actions: {\n          displayName: $filter('translate')('GENERAL.ACTIONS'),\n          headerTooltip: $filter('translate')('GENERAL.ACTIONS'),\n          field: 'actions',\n          permission: true,\n          visible: true,\n          width: 220,\n          enableSorting: false,\n          enableHiding: false,\n          cellTemplate: constructActionsTemplate(),\n          cellClass: 'cell-right'\n        },\n      };\n    }\n\n    function constructActionsTemplate(){\n      return '<md-button class=\"md-primary md-raised compact\" ng-disabled=\"creating\"' +\n          'ng-click=\"grid.appScope.$parent.vm.generatePickingOrder(row.entity)\">' +\n          '<span translate=\"PACKING.PICK\"></span>' +\n        '</md-button>' +\n        '<md-button class=\"md-primary stroked compact\" ng-disabled=\"creating\"' +\n          'ng-click=\"grid.appScope.$parent.vm.generatePackingOrder(row.entity)\">' +\n        '<span translate=\"PACKING.PACK\"></span>' +\n      '</md-button>';\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}\">' +\n        '<md-icon md-font-icon=\"icon-credit-card\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.payment_status !== 2\"></md-icon>' +\n        '<md-icon md-font-icon md-svg-src=\"/assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.warning === true\"></md-icon>' +\n        '<md-icon md-font-icon=\"icon-flag-variant\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.incidence === true\"></md-icon>' + entity +\n        '</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(row) {\n      if (vm.configurationData.picking_order_default_serial_number_type) {\n        createPickingOrder(vm.configurationData.picking_order_default_serial_number_type, row);\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, row);\n        });\n      }\n    }\n\n    function createPickingOrder(serialNumberTypeId, row) {\n\n      if($scope.creating){\n        return;\n      }\n\n      $scope.creating = true;\n      var transferOrders = [];\n      var posOrders = [];\n      var saleOrders = [];\n\n      if (row) {\n        vm.selectedWarehouse = row.warehouse;\n        if (row.order_type === 'TransferOrderDelivery') {\n          transferOrders.push(row.id);\n        } else if (row.order_type === 'SaleOrderDelivery') {\n          saleOrders.push(row.id);\n        } else if (row.order_type === 'PosOrderFulfillment') {\n          posOrders.push(row.id);\n        }\n      } else {\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      }\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 = [{entity: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      if($scope.creating){\n        return;\n      }\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    function rowClass(grid, row, col, rowRenderIndex, colRenderIndex) {\n      if (row.entity.order_type === 'PosOrderFulfillment' && (row.entity.payment_status !== 2 || row.entity.incidence === true || row.entity.warning === true)) {\n        return 'cell-padding red-500-fg md-red-50-bg';\n      }\n      return 'cell-padding';\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 = 'UIGridPickingPackingControllerShippedListV2';\n\n    $scope.status.state = {};\n    $scope.status.filters.status = [PICKABLE_ORDER_STATUS.PICKABLE_ORDER_STATUS_SHIPPED];\n\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.getStatusLabel = getStatusLabel;\n    $scope.rowClass = rowClass;\n    vm.getGroupPackedAmount = getGroupPackedAmount;\n    vm.getGroupTotalAmount = getGroupTotalAmount;\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 getGroupPackedAmount(row) {\n      if (!row.groupHeader || !row.treeNode || !row.treeNode.children) {\n        return 0;\n      }\n      var sum = 0;\n      for (var i = 0; i < row.treeNode.children.length; i++) {\n        var child = row.treeNode.children[i];\n        if (child.row && child.row.entity && child.row.entity.packed_amount) {\n          sum += child.row.entity.packed_amount;\n        }\n      }\n      return sum;\n    }\n\n    function getGroupTotalAmount(row) {\n      if (!row.groupHeader || !row.treeNode || !row.treeNode.children) {\n        return 0;\n      }\n      var sum = 0;\n      for (var i = 0; i < row.treeNode.children.length; i++) {\n        var child = row.treeNode.children[i];\n        if (child.row && child.row.entity && child.row.entity.total_amount) {\n          sum += child.row.entity.total_amount;\n        }\n      }\n      return sum;\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}\">' +\n        '<md-icon md-font-icon=\"icon-credit-card\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.payment_status !== 2\"></md-icon>' +\n        '<md-icon md-font-icon md-svg-src=\"/assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.warning === true\"></md-icon>' +\n        '<md-icon md-font-icon=\"icon-flag-variant\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.incidence === true\"></md-icon>' + 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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: constructCellTemplateLink('{{row.entity.origin_code}}'),\n          cellClass: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\n        },\n        amount: {\n          displayName: $filter('translate')('GENERAL.UNITS_UPPERCASE'),\n          headerTooltip: $filter('translate')('GENERAL.UNITS_UPPERCASE'),\n          field: 'packed_amount',\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\">{{grid.appScope.$parent.vm.getGroupPackedAmount(row) | number: 0}} / {{grid.appScope.$parent.vm.getGroupTotalAmount(row) | number: 0}}</div>' +\n            '<div ng-if=\"!row.groupHeader\">{{row.entity.packed_amount | number: 0}} / {{row.entity.total_amount | number: 0}}</div>',\n          cellClass: $scope.rowClass\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: $scope.rowClass\n        }\n      };\n    }\n\n    function rowClass(grid, row, col, rowRenderIndex, colRenderIndex) {\n      if (row.entity.order_type === 'PosOrderFulfillment' && (row.entity.payment_status !== 2 || row.entity.incidence === true || row.entity.warning === true)) {\n        return 'cell-padding red-500-fg md-red-50-bg';\n      }\n      return 'cell-padding';\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    $scope.rowClass = rowClass;\n    vm.getGroupPickedAmount = getGroupPickedAmount;\n    vm.getGroupTotalAmount = getGroupTotalAmount;\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 getGroupPickedAmount(row) {\n      if (!row.groupHeader || !row.treeNode || !row.treeNode.children) {\n        return 0;\n      }\n      var sum = 0;\n      for (var i = 0; i < row.treeNode.children.length; i++) {\n        var child = row.treeNode.children[i];\n        if (child.row && child.row.entity && child.row.entity.picked_amount) {\n          sum += child.row.entity.picked_amount;\n        }\n      }\n      return sum;\n    }\n\n    function getGroupTotalAmount(row) {\n      if (!row.groupHeader || !row.treeNode || !row.treeNode.children) {\n        return 0;\n      }\n      var sum = 0;\n      for (var i = 0; i < row.treeNode.children.length; i++) {\n        var child = row.treeNode.children[i];\n        if (child.row && child.row.entity && child.row.entity.total_amount) {\n          sum += child.row.entity.total_amount;\n        }\n      }\n      return sum;\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}\">' +\n        '<md-icon md-font-icon=\"icon-credit-card\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.payment_status !== 2\"></md-icon>' +\n        '<md-icon md-font-icon md-svg-src=\"/assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.warning === true\"></md-icon>' +\n        '<md-icon md-font-icon=\"icon-flag-variant\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.incidence === true\"></md-icon>' + 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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: constructCellTemplateLink('{{row.entity.origin_code}}'),\n          cellClass: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\n        },\n        pending_picked_amount_not_finished: {\n          displayName: $filter('translate')('GENERAL.UNITS_UPPERCASE'),\n          headerTooltip: $filter('translate')('GENERAL.UNITS_UPPERCASE'),\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          cellTemplate: '<div ng-if=\"row.groupHeader\">{{grid.appScope.$parent.vm.getGroupPickedAmount(row) | number: 0}} / {{grid.appScope.$parent.vm.getGroupTotalAmount(row) | number: 0}}</div>' +\n            '<div ng-if=\"!row.groupHeader\">{{row.entity.picked_amount | number: 0}} / {{row.entity.total_amount | number: 0}}</div>',\n          cellClass: $scope.rowClass\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: $scope.rowClass\n        }\n      }\n      ;\n    }\n\n    function rowClass(grid, row, col, rowRenderIndex, colRenderIndex) {\n      if (row.entity.order_type === 'PosOrderFulfillment' && (row.entity.payment_status !== 2 || row.entity.incidence === true || row.entity.warning === true)) {\n        return 'cell-padding red-500-fg md-red-50-bg';\n      }\n      return 'cell-padding';\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    $scope.$on('ndPickingPacking::openSendcloudLabelsDialog', function (event) {\n      vm.openSendcloudLabelsDialog();\n    });\n\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.getStatusLabel = getStatusLabel;\n    vm.generatePackingOrder = generatePackingOrder;\n    vm.createPackingOrder = createPackingOrder;\n    $scope.rowClass = rowClass;\n    vm.openSendcloudLabelsDialog = openSendcloudLabelsDialog;\n    vm.getGroupPickedAmount = getGroupPickedAmount;\n    vm.getGroupTotalAmount = getGroupTotalAmount;\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 getGroupPickedAmount(row) {\n      if (!row.groupHeader || !row.treeNode || !row.treeNode.children) {\n        return 0;\n      }\n      var sum = 0;\n      for (var i = 0; i < row.treeNode.children.length; i++) {\n        var child = row.treeNode.children[i];\n        if (child.row && child.row.entity && child.row.entity.picked_amount) {\n          sum += child.row.entity.picked_amount;\n        }\n      }\n      return sum;\n    }\n\n    function getGroupTotalAmount(row) {\n      if (!row.groupHeader || !row.treeNode || !row.treeNode.children) {\n        return 0;\n      }\n      var sum = 0;\n      for (var i = 0; i < row.treeNode.children.length; i++) {\n        var child = row.treeNode.children[i];\n        if (child.row && child.row.entity && child.row.entity.total_amount) {\n          sum += child.row.entity.total_amount;\n        }\n      }\n      return sum;\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}\">' +\n        '<md-icon md-font-icon=\"icon-credit-card\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.payment_status !== 2\"></md-icon>' +\n        '<md-icon md-font-icon md-svg-src=\"/assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.warning === true\"></md-icon>' +\n        '<md-icon md-font-icon=\"icon-flag-variant\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.incidence === true\"></md-icon>' + 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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: constructCellTemplateLink('{{row.entity.origin_code}}'),\n          cellClass: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\n        },\n        picked_quantity: {\n          displayName: $filter('translate')('GENERAL.UNITS_UPPERCASE'),\n          headerTooltip: $filter('translate')('GENERAL.UNITS_UPPERCASE'),\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          cellTemplate: '<div ng-if=\"row.groupHeader\">{{grid.appScope.$parent.vm.getGroupPickedAmount(row) | number: 0}} / {{grid.appScope.$parent.vm.getGroupTotalAmount(row) | number: 0}}</div>' +\n            '<div ng-if=\"!row.groupHeader\">{{row.entity.picked_amount | number: 0}} / {{row.entity.total_amount | number: 0}}</div>',\n          cellClass: $scope.rowClass\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: $scope.rowClass\n        },\n        create_packing_order: {\n          displayName: $filter('translate')('GENERAL.ACTIONS'),\n          headerTooltip: $filter('translate')('GENERAL.ACTIONS'),\n          field: 'create_packing_order',\n          permission: true,\n          visible: true,\n          width: 150,\n          enableSorting: false,\n          enableHiding: false,\n          cellTemplate: createPackingOrderTemplate(),\n          cellClass: $scope.rowClass\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-button class=\"md-primary md-raised compact\" 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.PACK\"></span>' +\n            '</div>' +\n          '</md-button>' +\n        '</div>';\n    }\n\n    function generatePackingOrder(row) {\n      var rows = [];\n      if (row) {\n        rows = [{entity: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\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    function openSendcloudLabelsDialog() {\n      if (!vm.gridApi) {\n        return;\n      }\n\n      var selectedRows = vm.gridApi.selection.getSelectedGridRows();\n\n      if (!selectedRows || selectedRows.length === 0) {\n        return;\n      }\n\n      var posOrderFulfillments = selectedRows.filter(function (row) {\n        return row.entity.order_type === 'PosOrderFulfillment';\n      }).map(function (row) {\n        return {\n          id: row.entity.id\n        };\n      });\n\n      var saleOrderDeliveries = selectedRows.filter(function (row) {\n        return row.entity.order_type === 'SaleOrderDelivery';\n      }).map(function (row) {\n        return {\n          id: row.entity.id\n        };\n      });\n\n      var transferOrderDeliveries = selectedRows.filter(function (row) {\n        return row.entity.order_type === 'TransferOrderDelivery';\n      }).map(function (row) {\n        return {\n          id: row.entity.id\n        };\n      });\n\n      if ((!posOrderFulfillments || posOrderFulfillments.length === 0) &&\n        (!saleOrderDeliveries || saleOrderDeliveries.length === 0) &&\n        (!transferOrderDeliveries || transferOrderDeliveries.length === 0)) {\n        $mdToast.show($mdToast.simple()\n          .textContent($filter('translate')('ORDERS_SELECT_ORDERS_FOR_SENDCLOUD'))\n          .position('top right'));\n        return;\n      }\n\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        parent: angular.element($document.find('body')),\n        locals: {\n          tab: 'picked',\n          posOrdersFulfillments: posOrderFulfillments,\n          saleOrderDeliveries: saleOrderDeliveries,\n          transferOrderDeliveries: transferOrderDeliveries,\n          onLabelsGenerated: function() {\n            if (vm.gridApi) {\n              vm.gridApi.core.notifyDataChange('refresh');\n            }\n            $scope.$emit('ndPickingPacking::updateCounters');\n          }\n        }\n      });\n    }\n\n    function rowClass(grid, row, col, rowRenderIndex, colRenderIndex) {\n      if (row.entity.order_type === 'PosOrderFulfillment' && (row.entity.payment_status !== 2 || row.entity.incidence === true || row.entity.warning === true)) {\n        return 'cell-padding red-500-fg md-red-50-bg';\n      }\n      return 'cell-padding';\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 = 'UIGridPickingPackingControllerPackingListV2';\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    $scope.rowClass = rowClass;\n    vm.getGroupPackedAmount = getGroupPackedAmount;\n    vm.getGroupTotalAmount = getGroupTotalAmount;\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 getGroupPackedAmount(row) {\n      if (!row.groupHeader || !row.treeNode || !row.treeNode.children) {\n        return 0;\n      }\n      var sum = 0;\n      for (var i = 0; i < row.treeNode.children.length; i++) {\n        var child = row.treeNode.children[i];\n        if (child.row && child.row.entity && child.row.entity.packed_amount) {\n          sum += child.row.entity.packed_amount;\n        }\n      }\n      return sum;\n    }\n\n    function getGroupTotalAmount(row) {\n      if (!row.groupHeader || !row.treeNode || !row.treeNode.children) {\n        return 0;\n      }\n      var sum = 0;\n      for (var i = 0; i < row.treeNode.children.length; i++) {\n        var child = row.treeNode.children[i];\n        if (child.row && child.row.entity && child.row.entity.total_amount) {\n          sum += child.row.entity.total_amount;\n        }\n      }\n      return sum;\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}\">' +\n        '<md-icon md-font-icon=\"icon-credit-card\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.payment_status !== 2\"></md-icon>' +\n        '<md-icon md-font-icon md-svg-src=\"/assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.warning === true\"></md-icon>' +\n        '<md-icon md-font-icon=\"icon-flag-variant\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.incidence === true\"></md-icon>' + 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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\n        },\n        amount: {\n          displayName: $filter('translate')('GENERAL.UNITS_UPPERCASE'),\n          headerTooltip: $filter('translate')('GENERAL.UNITS_UPPERCASE'),\n          field: 'packed_amount',\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\">{{grid.appScope.$parent.vm.getGroupPackedAmount(row) | number: 0}} / {{grid.appScope.$parent.vm.getGroupTotalAmount(row) | number: 0}}</div>' +\n            '<div ng-if=\"!row.groupHeader\">{{row.entity.packed_amount | number: 0}} / {{row.entity.total_amount | number: 0}}</div>',\n          cellClass: $scope.rowClass\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: $scope.rowClass\n        }\n      }\n      ;\n    }\n\n    function rowClass(grid, row, col, rowRenderIndex, colRenderIndex) {\n      if (row.entity.order_type === 'PosOrderFulfillment' && (row.entity.payment_status !== 2 || row.entity.incidence === true || row.entity.warning === true)) {\n        return 'cell-padding red-500-fg md-red-50-bg';\n      }\n      return 'cell-padding';\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.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 = 'UIGridPickingPackingControllerPackedListV2';\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    $scope.rowClass = rowClass;\n    vm.getGroupPackedAmount = getGroupPackedAmount;\n    vm.getGroupTotalAmount = getGroupTotalAmount;\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 || !vm.gridApi) {\n        return;\n      }\n      var pickableOrders = vm.gridApi.selection.getSelectedGridRows();\n      var autocodes = pickableOrders.map(function (row) {\n        return row.entity.autocode;\n      });\n      var hasParcels = pickableOrders.some(function (row) {\n        return !!(row.entity && row.entity.packing_order && row.entity.packing_order.has_sendcloud_data);\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: 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 getGroupPackedAmount(row) {\n      if (!row.groupHeader || !row.treeNode || !row.treeNode.children) {\n        return 0;\n      }\n      var sum = 0;\n      for (var i = 0; i < row.treeNode.children.length; i++) {\n        var child = row.treeNode.children[i];\n        if (child.row && child.row.entity && child.row.entity.packed_amount) {\n          sum += child.row.entity.packed_amount;\n        }\n      }\n      return sum;\n    }\n\n    function getGroupTotalAmount(row) {\n      if (!row.groupHeader || !row.treeNode || !row.treeNode.children) {\n        return 0;\n      }\n      var sum = 0;\n      for (var i = 0; i < row.treeNode.children.length; i++) {\n        var child = row.treeNode.children[i];\n        if (child.row && child.row.entity && child.row.entity.total_amount) {\n          sum += child.row.entity.total_amount;\n        }\n      }\n      return sum;\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}\">' +\n        '<md-icon md-font-icon=\"icon-credit-card\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.payment_status !== 2\"></md-icon>' +\n        '<md-icon md-font-icon md-svg-src=\"/assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.warning === true\"></md-icon>' +\n        '<md-icon md-font-icon=\"icon-flag-variant\" class=\"mr-5 s20 red-fg \" ng-if=\"row.entity.incidence === true\"></md-icon>' + 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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: constructCellTemplateLink('{{row.entity.origin_code}}'),\n          cellClass: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\n        },\n        amount: {\n          displayName: $filter('translate')('GENERAL.UNITS_UPPERCASE'),\n          headerTooltip: $filter('translate')('GENERAL.UNITS_UPPERCASE'),\n          field: 'packed_amount',\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\">{{grid.appScope.$parent.vm.getGroupPackedAmount(row) | number: 0}} / {{grid.appScope.$parent.vm.getGroupTotalAmount(row) | number: 0}}</div>' +\n            '<div ng-if=\"!row.groupHeader\">{{row.entity.packed_amount | number: 0}} / {{row.entity.total_amount | number: 0}}</div>',\n          cellClass: $scope.rowClass\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: $scope.rowClass\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: $scope.rowClass\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    function rowClass(grid, row, col, rowRenderIndex, colRenderIndex) {\n      if (row.entity.order_type === 'PosOrderFulfillment' && (row.entity.payment_status !== 2 || row.entity.incidence === true || row.entity.warning === true)) {\n        return 'cell-padding red-500-fg md-red-50-bg';\n      }\n      return 'cell-padding';\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    Session,\n    INTEGRATION_APP_TYPE\n  ) {\n\n    // Data\n    var vm = this;\n\n    vm.createPickingOrder = createPickingOrder;\n    vm.createPackingOrder = createPackingOrder;\n    vm.openShippingPackingDialog = openShippingPackingDialog;\n    vm.openSendcloudLabelsDialog = openSendcloudLabelsDialog;\n    vm.showPackingButton = showPackingButton;\n    vm.showPickingButton = showPickingButton;\n    vm.showShippingButton = showShippingButton;\n    vm.showSendcloudButton = showSendcloudButton;\n\n    vm.hasSendcloudInstalledAppEnabled = Session.company.hasInstalledAppEnabled(INTEGRATION_APP_TYPE.SENDCLOUD);\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 openSendcloudLabelsDialog() {\n      $scope.$emit('ndPickingPackingActions::openSendcloudLabelsDialog');\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    function showSendcloudButton() {\n      return vm.hasSendcloudInstalledAppEnabled && $scope.navItem === 'picked';\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,93'});\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('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.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    $document,\n    PackingOrder,\n    byteArrayBufferService,\n    $mdDialog,\n    ITEM_PACKING_STATUS,\n    $timeout,\n    INTEGRATION_APP_TYPE,\n    PACKING_STATUS,\n    LabelProviderAdapterService\n  ) {\n    var vm = this;\n    vm.packingOrder = $scope.$parent.vm.packingOrder;\n    vm.packingOrder.labelsGenerationFailed = false;\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    vm.autoPrintInProgress = false;\n    vm.dialogSendcloudErrors = [];\n    vm.openingCustomerDialog = 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    var autoPrintLabelsDebouncePromise = null;\n    var labelProviderAdapter = LabelProviderAdapterService.createSendcloudAdapter({\n      getSelectedShippingMethodId: function() {\n        return vm.sendcloudOptions.selectedSendcloudShippingMethod;\n      },\n      getVolumetricWeight: function() {\n        return vm.sendcloudOptions.volumetricWeight;\n      },\n      getPrintDeliveriesAutomatically: function() {\n        return vm.sendcloudOptions.printDeliveriesAutomatically;\n      },\n      getDestinationId: function() {\n        return vm.packingOrder.destination.id;\n      },\n      onAddressTooLongError: function(errors) {\n        showSendcloudTooLongFieldsErrorDialog(errors);\n      }\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    vm.packingOrder.isGeneratingLabels = function() {\n      return vm.finishing || false;\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    vm.showCustomerPopup = showCustomerPopup;\n    vm.hideSendcloudErrorsDialog = hideSendcloudErrorsDialog;\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      if (vm.autoPrintInProgress) {\n        return;\n      }\n\n      function doAutoPrintAndFinish() {\n        vm.autoPrintInProgress = true;\n        generateLabelsAndFinish();\n      }\n\n      ensureProductShippingBoxesForPackedItems(doAutoPrintAndFinish);\n    }\n\n    function ensureProductShippingBoxesForPackedItems(onReady) {\n      if (vm.sendcloudOptions.volumetricWeight &&\n        (!vm.packingOrder.packingOrderShippingBoxes || vm.packingOrder.packingOrderShippingBoxes.length === 0)) {\n        var waitForProductBoxAssignment = $scope.$on('PackingProductsController::setProductShippingBoxForPackedItemsCompleted', function() {\n          waitForProductBoxAssignment();\n          onReady();\n        });\n        $scope.$broadcast('PackingProductsController::setProductShippingBoxForPackedItems');\n        return;\n      }\n      onReady();\n    }\n\n    function getPackingCounts(onSuccess, onError) {\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            onSuccess(response.total_packed, response.total);\n            return;\n          }\n          if (onError) {\n            onError(response, status);\n          }\n        }\n      );\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 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          parameters:{\n            forceCustomer: false,\n            forceNaturalPersonType: false,\n            selectedTab: 1,\n            shippingAddressIdToEdit: vm.packingOrder.destination.id\n          }\n        },\n        resolve: {\n          ContactsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.contacts@get', { id: vm.packingOrder.destination.contact });\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() {\n        vm.openingCustomerDialog = false;\n      }, function() {\n        vm.openingCustomerDialog = false;\n      });\n    }\n\n    function hideSendcloudErrorsDialog() {\n      $mdDialog.hide();\n    }\n\n    function showSendcloudTooLongFieldsErrorDialog(errors) {\n      vm.dialogSendcloudErrors = errors.map(function(error) {\n        var errorText = $filter('translate')('CONTACTS.' + error.field.toUpperCase());\n        var translatedError = $filter('translate')('SCAN_AND_GO.SENDCLOUD_TOO_LONG_FIELD_WITH_MAX',\n          {\n            field: errorText,\n            max_characters: error.max_characters\n          });\n        return translatedError;\n      });\n      $mdDialog.show({\n        contentElement: '#sendcloud-error-dialog-too-long-address'\n      }).then(function(result) {\n      }, function() {\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 finishPackingWithLabels(allPacked) {\n      var payload = labelProviderAdapter.buildFinishPayload(allPacked);\n      api.inventories.pickingPackingPackingOrders.update(\n        {\n          id: vm.packingOrder.id,\n          option: 'finish',\n          print_labels: payload.print_labels,\n          sendcloud_shipping_method_id: payload.sendcloud_shipping_method_id,\n          all_packed: payload.all_packed,\n          volumetric_weight: payload.volumetric_weight,\n          print_deliveries: payload.print_deliveries\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            labelProviderAdapter.handleFinishError(response);\n          }\n          vm.autoPrintInProgress = false;\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      getPackingCounts(\n        function(totalPacked, total) {\n          openFinishPackingDialog(totalPacked, total, withSendcloud);\n        },\n        function() {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          $scope.$parent.vm.finishing = false;\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            finishPackingWithLabels(allPacked);\n          } else {\n            finishPacking(allPacked);\n          }\n        }, function() {\n          $scope.$parent.vm.finishing = false;\n        });\n      } else {\n        if (withSendcloud) {\n          finishPackingWithLabels(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          vm.autoPrintInProgress = false;\n          $scope.$parent.vm.finishing = false;\n        }\n      );\n    }\n\n    function hasMissingLabelProviderConfiguration() {\n      return labelProviderAdapter.hasMissingConfiguration();\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            vm.packingOrder.packingOrderSendcloudData = [];\n            vm.packingOrder._parcelsListCache = null;\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 (hasMissingLabelProviderConfiguration()) {\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      ensureProductShippingBoxesForPackedItems(function() {\n        checkAndFinishDialog(true);\n      });\n    });\n\n    $scope.$on('generateLabels', function() {\n      if (hasMissingLabelProviderConfiguration()) {\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      var payload = labelProviderAdapter.buildGenerateLabelsPayload();\n\n      if (vm.sendcloudOptions.volumetricWeight && (!vm.packingOrder.packingOrderShippingBoxes || vm.packingOrder.packingOrderShippingBoxes.length === 0)) {\n        $scope.$broadcast('PackingProductsController::setProductShippingBoxForPackedItems');\n      }\n\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: payload.sendcloud_shipping_method_id,\n          volumetric_weight: payload.volumetric_weight,\n          print_deliveries: payload.print_deliveries\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.packingOrder.labelsGenerationFailed = false;\n            vm.printingSendcloudLabels = false;\n            printLabels(response);\n            updatePackingOrder();\n          } else if (response.error) {\n            labelProviderAdapter.handleGenerateLabelsError(response);\n          } else {\n            vm.packingOrder.labelsGenerationFailed = true;\n          }\n          vm.autoPrintInProgress = false;\n          $scope.$parent.vm.finishing = false;\n        }\n      );\n    }\n\n    function generateLabelsAndFinish() {\n      $scope.$parent.vm.finishing = true;\n      $scope.$broadcast('PackingProductsController::finishing', true);\n\n      getPackingCounts(\n        function(totalPacked, total) {\n          var allPacked = totalPacked === total;\n\n          if (!allPacked) {\n            vm.autoPrintInProgress = false;\n            $scope.$parent.vm.finishing = false;\n            $scope.$broadcast('PackingProductsController::finishing', false);\n            return;\n          }\n\n          finishPackingWithLabels(allPacked);\n        },\n        function() {\n          vm.autoPrintInProgress = false;\n          $scope.$parent.vm.finishing = false;\n          $scope.$broadcast('PackingProductsController::finishing', false);\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\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    var packingProductsGridApiUnwatch = $scope.$on('ndPackingProductsList::gridApiInitialized', function(event, gridApi) {\n      vm.gridApi = gridApi;\n    });\n\n    $scope.$on('$destroy', function() {\n      gridApiInitializedUnwatch();\n      packingProductsGridApiUnwatch();\n    });\n\n    $scope.$on('PackingController::finishPacking', function(event) {\n      checkAndFinishDialog(false);\n    });\n\n    $scope.$on('PackingProductsController::itemStatusChanged', function() {\n      if (!vm.sendcloudOptions.printLabelsAutomatically) {\n        return;\n      }\n\n      if (autoPrintLabelsDebouncePromise) {\n        $timeout.cancel(autoPrintLabelsDebouncePromise);\n      }\n\n      autoPrintLabelsDebouncePromise = $timeout(function() {\n        getPackingCounts(\n          function(totalPacked, total) {\n            checkPrintLabelsAutomatically(totalPacked === total);\n          }\n        );\n      }, 300);\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.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 '<div class=\"import-status-cell\">' +\n            '<text class=\"text-boxed ' + vm.statusColors[status] + '\" translate=\"IMPORTER.' + status + '\">Status</text>' +\n            errors +\n            '</div>';\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('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.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.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      /**\n       * VERIFACTU OPERATIONS\n       */\n      .state('app.integration_apps.verifactu.operations', {\n        url: '/operations',\n        views: {\n          'subcontent@app.integration_apps.verifactu': {\n            templateUrl: 'app/main/apps/integration-apps/views/verifactu/tabs/operations/operations.html',\n            controller: 'VeriFactuOperationsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'verifactu-operations'\n      })\n\n      /**\n       * VERIFACTU OPERATION DETAIL\n       */\n      .state('app.integration_apps.verifactu.operations.detail', {\n        url: '/:id',\n        views: {\n          'subcontent@app.integration_apps.verifactu': {\n            templateUrl: 'app/main/apps/integration-apps/views/verifactu/tabs/operation-detail/operation-detail.html',\n            controller: 'VerifactuOperationDetailController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'verifactu-operation-detail'\n      })\n\n      /**\n       * HANDLER EVENTS\n       */\n      .state('app.integration_apps.handler_events', {\n        url: '/handler-events',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/integration-apps/views/handler-events/handler-events.html',\n            controller: 'HandlerEventsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'handler-events'\n      })\n\n      /**\n       * HANDLER EVENT DETAIL\n       */\n      .state('app.integration_apps.handler_events.detail', {\n        url: '/:id',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/integration-apps/views/handler-events/event-detail/event-detail.html',\n            controller: 'HandlerEventDetailController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'handler-event-detail'\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('VeriFactuOperationsController', VeriFactuOperationsController);\n\n  /** @ngInject */\n  function VeriFactuOperationsController(\n    $scope,\n    $filter,\n    api,\n    EventListHelper,\n    SEARCH_MAX_LENGTH\n  ) {\n    var vm = this;\n    var filterKeys = ['operation_type', 'verifactu_document_type', 'statuses', 'dateRange'];\n\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\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.operationTypes = [\n      { id: 'verifactu_invoice.created', name: $filter('translate')('VERIFACTU.EVENT_INVOICE_CREATED') },\n      { id: 'verifactu_invoice.cancelled', name: $filter('translate')('VERIFACTU.EVENT_INVOICE_CANCELLED') }\n    ];\n    vm.verifactuDocumentTypes = [\n      { id: 'invoice', name: $filter('translate')('VERIFACTU.DOCUMENT_TYPE_COMPLETE_INVOICE') },\n      { id: 'pos_order_invoice', name: $filter('translate')('VERIFACTU.DOCUMENT_TYPE_SIMPLIFIED_INVOICE') },\n      { id: 'invoice_corrective', name: $filter('translate')('VERIFACTU.DOCUMENT_TYPE_RECTIFICATIVE_INVOICE') },\n      { id: 'invoice_substitutive', name: $filter('translate')('VERIFACTU.DOCUMENT_TYPE_SUBSTITUTIVE_INVOICE') }\n    ];\n    vm.statuses = [\n      { id: 1, name: $filter('translate')('VERIFACTU.STATUS_PENDING') },\n      { id: 2, name: $filter('translate')('VERIFACTU.STATUS_PROCESSING') },\n      { id: 3, name: $filter('translate')('VERIFACTU.STATUS_PROCESSED') },\n      { id: 4, name: $filter('translate')('VERIFACTU.STATUS_WITH_ERRORS') }\n    ];\n\n    vm.reloadOperations = EventListHelper.createReloadFn(vm, '_reloadTimeout');\n    vm.clearSearch = clearSearch;\n    vm.clearFilter = clearFilter;\n\n    vm.status = EventListHelper.createStatus({\n      operation_type: [],\n      verifactu_document_type: []\n    });\n    vm.listConfig = {\n      url: api.urls.integrationApps.verifactuOperations,\n      expand: 'integration_event,verifactu_app',\n      storageLabel: 'UIGridVerifactuOperationsListV1',\n      columns: createColumns()\n    };\n\n    EventListHelper.setupStatusLoadedListener($scope, vm.status, filterKeys, true);\n\n    function createColumns() {\n      return {\n        id: {\n          displayName: $filter('translate')('VERIFACTU.OPERATION_ID'),\n          field: 'id',\n          permission: true,\n          visible: true,\n          minWidth: 250,\n          width: 300,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          enableSorting: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<div><a ui-sref=\"app.integration_apps.verifactu.operations.detail({id: row.entity.id})\"> {{row.entity.id}} </a></div>'\n        },\n        processed_at: {\n          displayName: $filter('translate')('VERIFACTU.OPERATION_DATE'),\n          field: 'processed_at',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          width: 180,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableSorting: true,\n          cellClass: 'cell-padding',\n          cellTemplate: '<span>{{grid.appScope.$parent.formatDate(row.entity.processed_at)}}</span>'\n        },\n        invoice_autocode: {\n          displayName: $filter('translate')('VERIFACTU.INVOICE'),\n          field: 'invoice_autocode',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          width: 200,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableSorting: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<div>' +\n            '<a ng-if=\"row.entity.invoice.autocode && row.entity.invoice.id\" ' +\n            'ui-sref=\"app.accounting.invoices.invoice({id: row.entity.invoice.id})\" ' +\n            'style=\"color: #1976d2; text-decoration: underline; cursor: pointer;\">' +\n            '{{row.entity.invoice.autocode}}' +\n            '</a>' +\n            '<span ng-if=\"!row.entity.invoice.autocode || !row.entity.invoice.id\" style=\"color: rgba(0,0,0,0.38);\">' +\n            '{{row.entity.invoice.autocode || \"-\"}}' +\n            '</span>' +\n            '</div>'\n        },\n        operation_type: {\n          displayName: $filter('translate')('VERIFACTU.OPERATION_TYPE'),\n          field: 'operation_type',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          width: 180,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableSorting: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<nd-verifactu-badge value=\"row.entity.operation_type\" type=\"operation\"></nd-verifactu-badge>'\n        },\n        verifactu_document_type: {\n          displayName: $filter('translate')('VERIFACTU.VERIFACTU_DOCUMENT_TYPE'),\n          field: 'verifactu_document_type',\n          permission: true,\n          visible: true,\n          minWidth: 200,\n          width: 230,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableSorting: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<nd-verifactu-badge value=\"row.entity.verifactu_document_type\" type=\"document\"></nd-verifactu-badge>'\n        },\n        status: {\n          displayName: $filter('translate')('VERIFACTU.OPERATION_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          enableSorting: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<nd-verifactu-badge value=\"row.entity.status\" type=\"status\"></nd-verifactu-badge>'\n        }\n      };\n    }\n\n    function clearFilter() {\n      EventListHelper.resetFilters(vm.status, filterKeys);\n      vm.reloadOperations();\n    }\n\n    function clearSearch() {\n      vm.status.search = '';\n      vm.reloadOperations();\n    }\n  }\n})();\n\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.integration_apps')\n    .controller('VerifactuOperationDetailController', VerifactuOperationDetailController);\n\n  /** @ngInject */\n  function VerifactuOperationDetailController(\n    $state,\n    $stateParams,\n    $filter,\n    api,\n    EventDetailHelper\n  ) {\n    var vm = this;\n    var helper = EventDetailHelper;\n    var statusMap = helper.buildStatusMap('VERIFACTU');\n\n    vm.operationId = $stateParams.id;\n    vm.operation = null;\n    vm.loading = true;\n    vm.error = false;\n    vm.formattedDate = '';\n    vm.formattedOperationType = '';\n    vm.formattedDocumentType = '';\n    vm.formattedStatus = '';\n    vm.formattedRetries = '';\n    vm.hasError = false;\n    vm.translations = helper.buildTranslations('VERIFACTU');\n\n    vm.goBack = goBack;\n    vm.goToInvoice = goToInvoice;\n\n    initialize();\n\n    function initialize() {\n      helper.loadEvent(api.urls.integrationApps.verifactuOperations, vm.operationId, 'integration_event,verifactu_app')\n        .then(function(response) {\n          vm.operation = response.data;\n          vm.formattedDate = helper.formatDate(vm.operation.processed_at);\n          vm.formattedOperationType = getOperationTypeLabel(vm.operation.operation_type);\n          vm.formattedDocumentType = getDocumentTypeLabel(vm.operation.verifactu_document_type);\n          vm.formattedStatus = helper.getStatusLabel(vm.operation.status, statusMap);\n          vm.formattedRetries = helper.formatRetries(vm.operation.try_count, vm.operation.max_retries);\n          vm.hasError = vm.operation.status === 'WithErrors' || vm.operation.status === 'Error' || vm.operation.status === 4;\n          vm.loading = false;\n        })\n        .catch(function() {\n          vm.error = true;\n          vm.loading = false;\n          helper.showErrorToast('VERIFACTU.ERROR_LOADING_OPERATION');\n        });\n    }\n\n    function goBack() {\n      $state.go('app.integration_apps.verifactu.operations');\n    }\n\n    function goToInvoice(invoiceId) {\n      if (invoiceId) {\n        $state.go('app.accounting.invoices.invoice', { id: invoiceId });\n      }\n    }\n\n    function getOperationTypeLabel(operationType) {\n      var types = {\n        'verifactu_invoice.created': $filter('translate')('VERIFACTU.EVENT_INVOICE_CREATED'),\n        'verifactu_invoice.cancelled': $filter('translate')('VERIFACTU.EVENT_INVOICE_CANCELLED')\n      };\n      return types[operationType] || operationType;\n    }\n\n    function getDocumentTypeLabel(documentType) {\n      var types = {\n        'invoice': $filter('translate')('VERIFACTU.DOCUMENT_TYPE_COMPLETE_INVOICE'),\n        'pos_order_invoice': $filter('translate')('VERIFACTU.DOCUMENT_TYPE_SIMPLIFIED_INVOICE'),\n        'invoice_corrective': $filter('translate')('VERIFACTU.DOCUMENT_TYPE_RECTIFICATIVE_INVOICE'),\n        'invoice_substitutive': $filter('translate')('VERIFACTU.DOCUMENT_TYPE_SUBSTITUTIVE_INVOICE')\n      };\n      return types[documentType] || documentType;\n    }\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\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{\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('ContactDialogController', ContactDialogController);\n\n  /** @ngInject */\n  function ContactDialogController(\n    $mdDialog,\n    $compile,\n    $translate,\n    $scope,\n    $mdToast,\n    $filter,\n    $rootScope,\n    msUtils,\n    Session,\n    DTColumnBuilder,\n    api,\n    parameters,\n    ContactsData,\n    PaymentMethodsData,\n    PricingTiersData,\n    COUNTRIES_DICT,\n    CONTACT_INVOICING_TYPES,\n    CONTACT_PERSON_TYPES_REVERSE,\n    CONTACT_TYPES,\n    CONTACT_TYPES_REVERSE,\n    CONTACT_PERSON_TYPES,\n    PAYMENT_TERM_TYPES,\n    HTTP_STATUS\n) {\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 = !!parameters.forceCustomer;\n    vm.selectedTab = parameters.selectedTab || 0;\n    vm.shippingAddressIdToEdit = parameters.shippingAddressIdToEdit;\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        var address = null;\n        if (vm.shippingAddressIdToEdit) {\n          for (var i = 0; i < vm.contact.postal_addresses.length; i++) {\n            if (vm.contact.postal_addresses[i].id === vm.shippingAddressIdToEdit) {\n              address = vm.contact.postal_addresses[i];\n              break;\n            }\n          }\n          vm.editAddress(address);\n        }\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 (parameters.forceCustomer) {\n          vm.contact.type = CONTACT_TYPES_REVERSE.CONTACT_TYPE_SHOP_CUSTOMER.toString();\n        }\n\n        if (parameters.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  '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.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       * VOUCHERS\n       */\n\n      .state('app.ecommerce.sites.site.vouchers', {\n        url: '/vouchers',\n        views: {\n          'subcontent@app.ecommerce.sites.site': {\n            templateUrl: 'app/main/apps/ecommerce/views/site/tabs/vouchers.html',\n            controller: 'EcommerceSiteVouchersController as vm'\n          }\n        }\n      })\n\n      /**\n       * SITE OPERATIONS\n       */\n\n      .state('app.ecommerce.sites.site.operations', {\n        url: '/operations',\n        views: {\n          'subcontent@app.ecommerce.sites.site': {\n            templateUrl: 'app/main/apps/ecommerce/views/site/tabs/operations.html',\n            controller: 'EcommerceSiteOperationsController 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      .state('app.ecommerce.sites.site.operations.detail', {\n        url: '/:operationId',\n        views: {\n          'subcontent@app.ecommerce.sites.site': {\n            templateUrl: 'app/main/apps/ecommerce/views/site/tabs/operation-detail/operation-detail.html',\n            controller: 'EcommerceSiteOperationDetailController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'site-operation-detail'\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          currentFulfillmentId: 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('EcommerceSiteOperationDetailController', EcommerceSiteOperationDetailController);\n\n  /** @ngInject */\n  function EcommerceSiteOperationDetailController(\n    $state,\n    $stateParams,\n    api,\n    EventDetailHelper,\n    EventBadgeHelper\n  ) {\n    var vm = this;\n    var helper = EventDetailHelper;\n    var statusMap = helper.buildStatusMap('SITE');\n\n    vm.operationId = $stateParams.operationId;\n    vm.operation = null;\n    vm.loading = true;\n    vm.error = false;\n    vm.formattedStartProcessingAt = '';\n    vm.formattedProcessedAt = '';\n    vm.formattedOperationType = '';\n    vm.formattedStatus = '';\n    vm.formattedRetries = '';\n    vm.hasError = false;\n    vm.markAsPendingLoading = false;\n    vm.translations = helper.buildTranslations('SITE');\n\n    vm.goBack = goBack;\n    vm.canShowMarkAsPendingButton = canShowMarkAsPendingButton;\n    vm.markAsPending = markAsPending;\n\n    initialize();\n\n    function initialize() {\n      loadOperationDetail();\n    }\n\n    function loadOperationDetail() {\n      vm.loading = true;\n      vm.error = false;\n\n      helper.loadEvent(api.urls.ecommerce.siteHandlerEvents, vm.operationId, 'integration_event')\n        .then(function(response) {\n          vm.operation = response.data;\n          vm.formattedStartProcessingAt = helper.formatDate(vm.operation.start_processing_at);\n          vm.formattedProcessedAt = helper.formatDate(vm.operation.processed_at);\n          vm.formattedOperationType = EventBadgeHelper.getSiteOperationBadgeData(vm.operation.operation_type).label;\n          vm.formattedStatus = helper.getStatusLabel(vm.operation.status, statusMap);\n          vm.formattedRetries = helper.formatRetries(vm.operation.try_count, vm.operation.max_retries);\n          vm.hasError = vm.operation.status === 'Error' || vm.operation.status === 'WithErrors' || vm.operation.status === 4;\n          vm.loading = false;\n        })\n        .catch(function() {\n          vm.error = true;\n          vm.loading = false;\n          helper.showErrorToast('SITE.ERROR_LOADING_OPERATION');\n        });\n    }\n\n    function canShowMarkAsPendingButton() {\n      return helper.canShowMarkAsPendingAction(vm.operation);\n    }\n\n    function markAsPending() {\n      helper.markEventAsPending({\n        event: vm.operation,\n        eventId: vm.operationId,\n        baseUrl: api.urls.ecommerce.siteHandlerEvents,\n        translationPrefix: 'HANDLER_EVENTS',\n        markAsPendingLoading: vm.markAsPendingLoading,\n        setMarkAsPendingLoading: function(value) {\n          vm.markAsPendingLoading = value;\n        },\n        onSuccess: function() {\n          loadOperationDetail();\n        }\n      });\n    }\n\n    function goBack() {\n      $state.go('^');\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      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_AMAZON_US,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_EUROPE_ES,\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      saleOrderDeliveries,\n      transferOrderDeliveries,\n      SENDCLOUD_SHIPPING_METHODS,\n      PRODUCT_SHIPPING_BOX_ID,\n      LABEL_PRINT_ORDER,\n      HTTP_STATUS,\n      onLabelsGenerated\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.labelPrintOrderOptions = [\n        {\n          value: LABEL_PRINT_ORDER.PICKING,\n          label: 'ORDERS.LABEL_PRINT_ORDER_PICKING'\n        },\n        {\n          value: LABEL_PRINT_ORDER.PICKING_REVERSE,\n          label: 'ORDERS.LABEL_PRINT_ORDER_PICKING_REVERSE'\n        },\n        {\n          value: LABEL_PRINT_ORDER.SKU,\n          label: 'ORDERS.LABEL_PRINT_ORDER_SKU'\n        },\n        {\n          value: LABEL_PRINT_ORDER.SKU_REVERSE,\n          label: 'ORDERS.LABEL_PRINT_ORDER_SKU_REVERSE'\n        },\n        {\n          value: LABEL_PRINT_ORDER.STOCK_LOCATION,\n          label: 'ORDERS.LABEL_PRINT_ORDER_STOCK_LOCATION'\n        },\n        {\n          value: LABEL_PRINT_ORDER.STOCK_LOCATION_REVERSE,\n          label: 'ORDERS.LABEL_PRINT_ORDER_STOCK_LOCATION_REVERSE'\n        }\n      ];\n      vm.labelPrintOrder = LABEL_PRINT_ORDER.DEFAULT;\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.storeLabelPrintOrder = storeLabelPrintOrder;\n      vm.onSelectorOpen = onSelectorOpen;\n      vm.isValid = isValid;\n      vm.toggleVolumetricWeight = toggleVolumetricWeight;\n      vm.PRODUCT_SHIPPING_BOX_ID = PRODUCT_SHIPPING_BOX_ID;\n\n      vm.tab = tab;\n      vm.title = getTitle();\n      vm.buttonActionText = getButtonActionText();\n      vm.saleOrderDeliveries = saleOrderDeliveries || [];\n      vm.transferOrderDeliveries = transferOrderDeliveries || [];\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        vm.labelPrintOrder = localStorage.getItem(Session.company.id + '::GenerateLabelsWithSendcloudController::labelPrintOrder') || LABEL_PRINT_ORDER.DEFAULT;\n\n        api.inventories.shippingBoxes.list(function (result) {\n          vm.fetchingBoxes = false;\n          vm.shippingBoxes = addProductShippingBoxOption(result.results);\n          vm.selectedShippingBoxId = getDefaultShippingBoxId(result.results);\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        var hasPosFulfillments = posOrdersFulfillments && posOrdersFulfillments.length > 0;\n        var hasSaleDeliveries = vm.saleOrderDeliveries && vm.saleOrderDeliveries.length > 0;\n        var hasTransferDeliveries = vm.transferOrderDeliveries && vm.transferOrderDeliveries.length > 0;\n\n        var requests = [];\n\n        if (hasPosFulfillments) {\n          requests.push(function (cb) {\n            var ids = (posOrdersFulfillments || []).map(function (posOrdersFulfillment) {\n              return posOrdersFulfillment.id;\n            }).filter(function (id) { return !!id; });\n\n            api.inventories.posOrders.get({\n              option: 'print-labels',\n              pos_order_fulfillment_ids: ids.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              label_print_order: vm.labelPrintOrder,\n              redownload: tab === 'prepared'\n            }, cb);\n          });\n        }\n\n        if (hasSaleDeliveries) {\n          requests.push(function (cb) {\n            api.inventories.saleOrderDeliveries.get({\n              option: 'print-labels',\n              sale_order_delivery_ids: vm.saleOrderDeliveries.map(function (delivery) {\n                return delivery.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              label_print_order: vm.labelPrintOrder,\n              redownload: tab === 'prepared'\n            }, cb);\n          });\n        }\n\n        if (hasTransferDeliveries) {\n          requests.push(function (cb) {\n            api.inventories.transferOrderDeliveries.get({\n              option: 'print-labels',\n              transfer_order_delivery_ids: vm.transferOrderDeliveries.map(function (delivery) {\n                return delivery.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              label_print_order: vm.labelPrintOrder,\n              redownload: tab === 'prepared'\n            }, cb);\n          });\n        }\n\n        var pending = requests.length;\n        var collectedErrors = [];\n\n        function handleResponse(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              });\n            }\n            if (response.errors && response.errors.length) {\n              collectedErrors = collectedErrors.concat(response.errors.map(function (error) {\n                if (vm.errorMessages[error.error]) {\n                  error.error = vm.errorMessages[error.error];\n                }\n                return error;\n              }));\n            }\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            if (onLabelsGenerated) onLabelsGenerated();\n          }\n\n          pending -= 1;\n          if (pending === 0) {\n            vm.errors = collectedErrors;\n            vm.generating = false;\n            if (!vm.errors.length) {\n              close();\n            }\n          }\n        }\n\n        if (!requests.length) {\n          vm.generating = false;\n          return;\n        }\n\n        requests.forEach(function (fnReq) {\n          fnReq(handleResponse);\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 storeLabelPrintOrder() {\n        if (vm.labelPrintOrder) {\n          localStorage.setItem(Session.company.id + '::GenerateLabelsWithSendcloudController::labelPrintOrder', vm.labelPrintOrder);\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 isValid() {\n        return vm.selectedShippingMethodId && (!vm.volumetricWeight || vm.selectedShippingBoxId);\n      }\n\n      function getDefaultShippingBoxId(shippingBoxes) {\n        var boxes = shippingBoxes || vm.shippingBoxes;\n        var availableShippingBoxes = (boxes || []).filter(function (shippingBox) {\n          return shippingBox.id !== vm.PRODUCT_SHIPPING_BOX_ID;\n        });\n\n        if (!availableShippingBoxes.length) {\n          return vm.PRODUCT_SHIPPING_BOX_ID;\n        }\n        if (availableShippingBoxes.length === 1) {\n          return availableShippingBoxes[0].id;\n        }\n        var defaultShippingBox = availableShippingBoxes.find(function (shippingBox) {\n          return shippingBox.default;\n        });\n        if (defaultShippingBox) {\n          return defaultShippingBox.id;\n        }\n        return availableShippingBoxes[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 addProductShippingBoxOption(shippingBoxes) {\n        var productShippingBoxName = $filter('translate')('SCAN_AND_GO.PRODUCT_SHIPPING_BOX');\n        var productShippingBox = {\n          id: vm.PRODUCT_SHIPPING_BOX_ID,\n          name: productShippingBoxName,\n          getFullName: function () {\n            return productShippingBoxName;\n          }\n        };\n        return [productShippingBox].concat(shippingBoxes || []);\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.sale')\n    .controller('BulkChangeWarehouseDialogController', BulkChangeWarehouseDialogController);\n\n  /** @ngInject */\n  function BulkChangeWarehouseDialogController($scope, $mdDialog, WarehousesData) {\n    var vm = this;\n\n    // Data\n    vm.selectedWarehouse = null;\n    vm.warehouses = WarehousesData.results;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.accept = accept;\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function accept() {\n      if (vm.selectedWarehouse) {\n        $mdDialog.hide({\n          warehouseId: vm.selectedWarehouse\n        });\n      } else {\n        cancel();\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  '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('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('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('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.type === $scope.FIELD_TYPE_SELECT) {\n          return field.selectChecked !== null && typeof field.selectChecked !== 'undefined';\n        }\n\n        if (field.selectChecked) {\n          return field.selectChecked;\n        }\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(field) {\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('InvoiceZipErrorsDialogController', InvoiceZipErrorsDialogController);\n\n  /** @ngInject */\n  function InvoiceZipErrorsDialogController($mdDialog, errors, failedCount) {\n    var vm = this;\n\n    // Data\n    vm.errors = errors || [];\n    vm.failedCount = failedCount || 0;\n\n    // Methods\n    vm.close = close;\n\n    function close() {\n      $mdDialog.hide();\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.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, $mdDateRangePicker, $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    var NAV_ITEM_STORAGE_KEY = 'AddDeliveryNoteDialog::currentNavItem::' +\n      (Session && Session.company && Session.company.id ? Session.company.id : '');\n    var ONLY_MY_CONTACT_STORAGE_KEY = 'AddDeliveryNoteDialog::onlyMyContact::' +\n      (Session && Session.company && Session.company.id ? Session.company.id : '');\n    vm.onlyMyContact = getStoredOnlyMyContactValue();\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.receivedInvoice = receivedInvoice;\n    vm.currentNavItem = localStorage.getItem(NAV_ITEM_STORAGE_KEY)\n      || (vm.receivedInvoice ? 'purchases' : 'sales');\n    vm.warehouses = [];\n    vm.createdDateRange = null;\n    vm.mdLocalizationMap = Utils.GetMdDatePickerLocalizationMap();\n\n    vm.selectedTransfers = [];\n    vm.transfersStorageLabel = \"UIGridAccountingInvoiceTransferDeliveriesControllerV8\";\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 = \"UIGridAccountingInvoiceSaleDeliveriesControllerV8\";\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.purchasesStorageLabel = \"UIGridAccountingInvoicePurchaseDeliveriesControllerV8\";\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 = \"UIGridAccountingInvoiceFiscalAddressPosOrdersControllerV8\";\n    vm.fiscalAddressPosOrdersStatus = {\n      state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n        targetWarehouses: [],\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    vm.clearDateRangeFilters = clearDateRangeFilters;\n    vm.openDateRangePicker = openDateRangePicker;\n    vm.getDateRangeLabel = getDateRangeLabel;\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      loadPersistedSharedWarehouseFilters();\n\n      vm.statusLoadedWatcher = $scope.$on('ndGrid::statusLoaded', loadStatus);\n      vm.navItemWatcher = $scope.$watch('vm.currentNavItem', function(newVal) {\n        if (newVal) {\n          localStorage.setItem(NAV_ITEM_STORAGE_KEY, newVal);\n        }\n      });\n      vm.dateRangeWatcher = $scope.$watchGroup([\n        'vm.createdDateRange.dateStart',\n        'vm.createdDateRange.dateEnd'\n      ], handleDateRangeModelChanged);\n      $scope.$on('$destroy', function() {\n        vm.statusLoadedWatcher();\n        vm.navItemWatcher();\n        vm.dateRangeWatcher();\n      });\n    }\n\n    function handleDateRangeModelChanged(newValues, oldValues) {\n      var hasNewValue;\n\n      if (!newValues || !vm.createdDateRange) {\n        return;\n      }\n\n      hasNewValue = !!(newValues[0] || newValues[1]);\n      if (!hasNewValue && hasAppliedDateRangeFilter()) {\n        setDateRangeFilters();\n      }\n    }\n\n    function hasAppliedDateRangeFilter() {\n      return !!(\n        (vm.transfersStatus.filters.startDate && vm.transfersStatus.filters.endDate) ||\n        (vm.salesStatus.filters.startDate && vm.salesStatus.filters.endDate) ||\n        (vm.purchasesStatus.filters.startDate && vm.purchasesStatus.filters.endDate) ||\n        (vm.fiscalAddressPosOrdersStatus.filters.startDate && vm.fiscalAddressPosOrdersStatus.filters.endDate)\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      synchronizeSharedWarehouseFilters();\n      persistSynchronizedWarehouseFilters();\n      persistOnlyMyContactSelection();\n\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      var currentStatus = getStatusByNavItem(vm.currentNavItem);\n      var result = 0;\n\n      if (!currentStatus || !currentStatus.filters) {\n        return result;\n      }\n\n      result += currentStatus.filters.targetWarehouses && currentStatus.filters.targetWarehouses.length > 0 ? 1 : 0;\n      result += currentStatus.filters.sourceWarehouses && currentStatus.filters.sourceWarehouses.length > 0 ? 1 : 0;\n      result += currentStatus.filters.startDate !== null && currentStatus.filters.endDate !== null ? 1 : 0;\n\n      return result;\n    }\n\n    function clearFilter() {\n\n      angular.forEach(getStatusStoragePairs(), function(statusStoragePair) {\n        var status = statusStoragePair.status;\n\n        status.filters.targetWarehouses = [];\n        status.filters.sourceWarehouses = [];\n        status.filters.startDate = null;\n        status.filters.endDate = null;\n\n        persistClearedStatusFilters(statusStoragePair.storageLabel);\n      });\n\n      vm.createdDateRange.dateStart = null;\n      vm.createdDateRange.dateEnd = null;\n\n      searchChanged();\n    }\n\n    function getStatusStoragePairs() {\n      return [\n        {\n          status: vm.transfersStatus,\n          storageLabel: vm.transfersStorageLabel\n        },\n        {\n          status: vm.salesStatus,\n          storageLabel: vm.salesStorageLabel\n        },\n        {\n          status: vm.purchasesStatus,\n          storageLabel: vm.purchasesStorageLabel\n        },\n        {\n          status: vm.fiscalAddressPosOrdersStatus,\n          storageLabel: vm.fiscalAddressPosOrdersStorageLabel\n        }\n      ];\n    }\n\n    function persistClearedStatusFilters(storageLabel) {\n      var companyId = Session && Session.company && Session.company.id;\n      var storageStatus;\n\n      if (!companyId || !storageLabel) {\n        return;\n      }\n\n      storageStatus = parseLocalStorageStatus(companyId + '::' + storageLabel);\n      if (!storageStatus.filters || typeof storageStatus.filters !== 'object') {\n        storageStatus.filters = {};\n      }\n\n      storageStatus.filters.targetWarehouses = [];\n      storageStatus.filters.sourceWarehouses = [];\n      storageStatus.filters.startDate = null;\n      storageStatus.filters.endDate = null;\n\n      try {\n        localStorage.setItem(companyId + '::' + storageLabel, JSON.stringify(storageStatus));\n      } catch (error) {\n        return;\n      }\n    }\n\n    function parseLocalStorageStatus(storageKey) {\n      var parsedStatus = {};\n\n      try {\n        parsedStatus = JSON.parse(localStorage.getItem(storageKey)) || {};\n      } catch (error) {\n        parsedStatus = {};\n      }\n\n      return parsedStatus;\n    }\n\n    function getStoredOnlyMyContactValue() {\n      var persistedValue = localStorage.getItem(ONLY_MY_CONTACT_STORAGE_KEY);\n\n      if (persistedValue === null || persistedValue === undefined) {\n        return !!customerId;\n      }\n\n      return persistedValue === 'true';\n    }\n\n    function persistOnlyMyContactSelection() {\n      localStorage.setItem(ONLY_MY_CONTACT_STORAGE_KEY, vm.onlyMyContact ? 'true' : 'false');\n    }\n\n    function persistSynchronizedWarehouseFilters() {\n      angular.forEach(getStatusStoragePairs(), function(statusStoragePair) {\n        persistStatusWarehouses(statusStoragePair.status, statusStoragePair.storageLabel);\n      });\n    }\n\n    function persistStatusWarehouses(status, storageLabel) {\n      var companyId = Session && Session.company && Session.company.id;\n      var storageStatus;\n\n      if (!companyId || !storageLabel || !status || !status.filters) {\n        return;\n      }\n\n      storageStatus = parseLocalStorageStatus(companyId + '::' + storageLabel);\n      if (!storageStatus.filters || typeof storageStatus.filters !== 'object') {\n        storageStatus.filters = {};\n      }\n\n      if (angular.isArray(status.filters.sourceWarehouses)) {\n        storageStatus.filters.sourceWarehouses = status.filters.sourceWarehouses || [];\n      } else {\n        delete storageStatus.filters.sourceWarehouses;\n      }\n\n      if (angular.isArray(status.filters.targetWarehouses)) {\n        storageStatus.filters.targetWarehouses = status.filters.targetWarehouses || [];\n      } else {\n        delete storageStatus.filters.targetWarehouses;\n      }\n\n      try {\n        localStorage.setItem(companyId + '::' + storageLabel, JSON.stringify(storageStatus));\n      } catch (error) {\n        return;\n      }\n    }\n\n    function synchronizeSharedWarehouseFilters() {\n      synchronizeSharedSourceWarehouses();\n      synchronizeSharedTargetWarehouses();\n    }\n\n    function synchronizeSharedSourceWarehouses() {\n      var sourceWarehouses = getSourceWarehousesByCurrentTab();\n\n      vm.salesStatus.filters.sourceWarehouses = angular.copy(sourceWarehouses);\n      vm.transfersStatus.filters.sourceWarehouses = angular.copy(sourceWarehouses);\n    }\n\n    function synchronizeSharedTargetWarehouses() {\n      var targetWarehouses = getTargetWarehousesByCurrentTab();\n\n      vm.transfersStatus.filters.targetWarehouses = angular.copy(targetWarehouses);\n      vm.purchasesStatus.filters.targetWarehouses = angular.copy(targetWarehouses);\n      vm.fiscalAddressPosOrdersStatus.filters.targetWarehouses = angular.copy(targetWarehouses);\n    }\n\n    function getSourceWarehousesByCurrentTab() {\n      var currentStatus = getStatusByNavItem(vm.currentNavItem);\n\n      if (tabSupportsSourceWarehouses(vm.currentNavItem) &&\n        currentStatus &&\n        currentStatus.filters &&\n        angular.isArray(currentStatus.filters.sourceWarehouses)) {\n        return currentStatus.filters.sourceWarehouses;\n      }\n\n      return getFirstDefinedWarehouseFilter([\n        vm.salesStatus,\n        vm.transfersStatus\n      ], 'sourceWarehouses');\n    }\n\n    function getTargetWarehousesByCurrentTab() {\n      var currentStatus = getStatusByNavItem(vm.currentNavItem);\n\n      if (tabSupportsTargetWarehouses(vm.currentNavItem) &&\n        currentStatus &&\n        currentStatus.filters &&\n        angular.isArray(currentStatus.filters.targetWarehouses)) {\n        return currentStatus.filters.targetWarehouses;\n      }\n\n      return getFirstDefinedWarehouseFilter([\n        vm.transfersStatus,\n        vm.purchasesStatus,\n        vm.fiscalAddressPosOrdersStatus\n      ], 'targetWarehouses');\n    }\n\n    function getFirstDefinedWarehouseFilter(statuses, filterKey) {\n      var firstDefinedFilter = [];\n\n      angular.forEach(statuses, function(status) {\n        if (!status || !status.filters || !angular.isArray(status.filters[filterKey])) {\n          return;\n        }\n\n        if (status.filters[filterKey].length > 0) {\n          firstDefinedFilter = status.filters[filterKey];\n          return false;\n        }\n      });\n\n      return firstDefinedFilter;\n    }\n\n    function getStatusByNavItem(navItem) {\n      if (navItem === 'sales') {\n        return vm.salesStatus;\n      }\n\n      if (navItem === 'transfers') {\n        return vm.transfersStatus;\n      }\n\n      if (navItem === 'purchases') {\n        return vm.purchasesStatus;\n      }\n\n      if (navItem === 'fiscal-address-pos-orders') {\n        return vm.fiscalAddressPosOrdersStatus;\n      }\n\n      return null;\n    }\n\n    function tabSupportsSourceWarehouses(navItem) {\n      return navItem === 'sales' || navItem === 'transfers';\n    }\n\n    function tabSupportsTargetWarehouses(navItem) {\n      return navItem === 'transfers' || navItem === 'purchases' || navItem === 'fiscal-address-pos-orders';\n    }\n\n    function loadPersistedSharedWarehouseFilters() {\n      var sourceWarehouses = getPersistedWarehouseFilter([\n        vm.salesStorageLabel,\n        vm.transfersStorageLabel\n      ], 'sourceWarehouses');\n      var targetWarehouses = getPersistedWarehouseFilter([\n        vm.transfersStorageLabel,\n        vm.purchasesStorageLabel,\n        vm.fiscalAddressPosOrdersStorageLabel\n      ], 'targetWarehouses');\n\n      vm.salesStatus.filters.sourceWarehouses = angular.copy(sourceWarehouses);\n      vm.transfersStatus.filters.sourceWarehouses = angular.copy(sourceWarehouses);\n\n      vm.transfersStatus.filters.targetWarehouses = angular.copy(targetWarehouses);\n      vm.purchasesStatus.filters.targetWarehouses = angular.copy(targetWarehouses);\n      vm.fiscalAddressPosOrdersStatus.filters.targetWarehouses = angular.copy(targetWarehouses);\n    }\n\n    function getPersistedWarehouseFilter(storageLabels, filterKey) {\n      var companyId = Session && Session.company && Session.company.id;\n      var persistedFilter = [];\n\n      if (!companyId) {\n        return persistedFilter;\n      }\n\n      angular.forEach(storageLabels, function(storageLabel) {\n        var storageStatus;\n        var statusFilters;\n\n        storageStatus = parseLocalStorageStatus(companyId + '::' + storageLabel);\n        statusFilters = storageStatus && storageStatus.filters ? storageStatus.filters : {};\n\n        if (angular.isArray(statusFilters[filterKey]) && statusFilters[filterKey].length > 0) {\n          persistedFilter = statusFilters[filterKey];\n          return false;\n        }\n      });\n\n      return persistedFilter;\n    }\n\n    function setDateRangeFilters() {\n      function formatDate(date) {\n        if (date === null || date === undefined || date === '') {\n          return null;\n        }\n\n        if (moment.isMoment(date)) {\n          return date.isValid() ? date.toISOString() : null;\n        }\n\n        if (date instanceof Date && !isNaN(date)) {\n          return date.toISOString();\n        }\n\n        if (typeof date === 'string') {\n          var parsedDate = moment(date, moment.ISO_8601, true);\n          return parsedDate.isValid() ? parsedDate.toISOString() : null;\n        }\n\n        return 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      persistSynchronizedDateFilters();\n\n      searchChanged();\n    }\n\n    function clearDateRangeFilters() {\n      vm.createdDateRange.dateStart = null;\n      vm.createdDateRange.dateEnd = null;\n      setDateRangeFilters();\n    }\n\n    function openDateRangePicker() {\n      $mdDateRangePicker.show({\n        multiple: true,\n        model: angular.copy(vm.createdDateRange),\n        showTemplate: true,\n        localizationMap: vm.mdLocalizationMap\n      }).then(function(model) {\n        vm.createdDateRange.dateStart = model && model.dateStart ? model.dateStart : null;\n        vm.createdDateRange.dateEnd = model && model.dateEnd ? model.dateEnd : null;\n        vm.createdDateRange.selectedTemplate = model && model.selectedTemplate ? model.selectedTemplate : null;\n        vm.createdDateRange.selectedTemplateName = model && model.selectedTemplateName ? model.selectedTemplateName : '';\n        setDateRangeFilters();\n      }).catch(function() {\n        return;\n      });\n    }\n\n    function getDateRangeLabel() {\n      return vm.createdDateRange.format(vm.createdDateRange.dateStart, vm.createdDateRange.dateEnd);\n    }\n\n    function persistSynchronizedDateFilters() {\n      angular.forEach(getStatusStoragePairs(), function(statusStoragePair) {\n        persistStatusDateRange(statusStoragePair.status, statusStoragePair.storageLabel);\n      });\n    }\n\n    function persistStatusDateRange(status, storageLabel) {\n      var companyId = Session && Session.company && Session.company.id;\n      var storageStatus;\n\n      if (!companyId || !storageLabel || !status || !status.filters) {\n        return;\n      }\n\n      storageStatus = parseLocalStorageStatus(companyId + '::' + storageLabel);\n      if (!storageStatus.filters || typeof storageStatus.filters !== 'object') {\n        storageStatus.filters = {};\n      }\n\n      storageStatus.filters.startDate = status.filters.startDate || null;\n      storageStatus.filters.endDate = status.filters.endDate || null;\n\n      try {\n        localStorage.setItem(companyId + '::' + storageLabel, JSON.stringify(storageStatus));\n      } catch (error) {\n        return;\n      }\n    }\n\n    function loadStatus() {\n\n      loadPersistedSharedWarehouseFilters();\n      synchronizeSharedWarehouseFilters();\n\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      var savedStartDate = vm.transfersStatus.filters.startDate\n        || vm.salesStatus.filters.startDate\n        || vm.purchasesStatus.filters.startDate\n        || vm.fiscalAddressPosOrdersStatus.filters.startDate;\n      var savedEndDate = vm.transfersStatus.filters.endDate\n        || vm.salesStatus.filters.endDate\n        || vm.purchasesStatus.filters.endDate\n        || vm.fiscalAddressPosOrdersStatus.filters.endDate;\n\n      vm.createdDateRange.dateStart = savedStartDate || null;\n      vm.createdDateRange.dateEnd = savedEndDate || null;\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                                          HTTP_STATUS) {\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 (vm.saving) {\n        return;\n      }\n\n      if (Session.hasPermissions('wholesale.sales.create,wholesale.presales.presale.preorders.create')) {\n\n        vm.saving = true;\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 == HTTP_STATUS.HTTP_201_CREATED) {\n              $state.go('app.wholesale.sales.sale.products', {id: result.id});\n            } else {\n              vm.saving = false;\n            }\n          },\n          function(error) {\n            vm.saving = false;\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      if (Session.hasPermission('wholesale.sales.sale.delivery.generate_invoice')) {\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          if (!vm.generatingInvoice) {\n            vm.generatingInvoice = true;\n            api.inventories.saleOrderDeliveries.save({\n              option: 'generate-invoice',\n              id: vm.saleOrderDelivery.id\n            }, function(response) {\n              vm.generatingInvoice = false;\n              vm.saleOrderDelivery.invoice = new Invoice(response);\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('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{\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  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('PosFinalLineMappingStrategy', _PosFinalLineMappingStrategy);\n\n  _PosFinalLineMappingStrategy.$inject = [\n    'MonetaryLineMappingStrategy',\n    'MonetaryLineFromFinalPriceDTO'\n  ];\n\n  function _PosFinalLineMappingStrategy(\n    MonetaryLineMappingStrategy,\n    MonetaryLineFromFinalPriceDTO\n  ) {\n    function toNumber(value) {\n      var parsedValue = Number(value);\n\n      if (!isFinite(parsedValue)) {\n        return 0;\n      }\n\n      return parsedValue;\n    }\n\n    function PosFinalLineMappingStrategy() {\n      MonetaryLineMappingStrategy.call(this);\n    }\n\n    PosFinalLineMappingStrategy.prototype = Object.create(\n      MonetaryLineMappingStrategy.prototype\n    );\n    PosFinalLineMappingStrategy.prototype.constructor = PosFinalLineMappingStrategy;\n\n    PosFinalLineMappingStrategy.prototype.map = function(\n      line,\n      lineTaxes,\n      lineDiscount\n    ) {\n      return new MonetaryLineFromFinalPriceDTO(\n        toNumber(line && line.quantity),\n        this._resolveUnitFinalPrice(line),\n        lineTaxes,\n        lineDiscount\n      );\n    };\n\n    PosFinalLineMappingStrategy.prototype._resolveUnitFinalPrice = function(line) {\n      if (\n        line &&\n        line.custom_price_incl_tax !== null &&\n        line.custom_price_incl_tax !== undefined\n      ) {\n        return toNumber(line.custom_price_incl_tax);\n      }\n\n      return toNumber(line && line.price_incl_tax);\n    };\n\n    return PosFinalLineMappingStrategy;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryLineMappingStrategy', _MonetaryLineMappingStrategy);\n\n  function _MonetaryLineMappingStrategy() {\n    function MonetaryLineMappingStrategy() {}\n\n    MonetaryLineMappingStrategy.prototype.map = function() {\n      throw new Error('MonetaryLineMappingStrategy.map must be implemented');\n    };\n\n    return MonetaryLineMappingStrategy;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('LineMappingStrategySelector', _LineMappingStrategySelector);\n\n  _LineMappingStrategySelector.$inject = [\n    'BaseLineMappingStrategy',\n    'PosFinalLineMappingStrategy'\n  ];\n\n  function _LineMappingStrategySelector(\n    BaseLineMappingStrategy,\n    PosFinalLineMappingStrategy\n  ) {\n    function LineMappingStrategySelector() {\n      this.baseLineMappingStrategy = new BaseLineMappingStrategy();\n      this.posFinalLineMappingStrategy = new PosFinalLineMappingStrategy();\n    }\n\n    LineMappingStrategySelector.prototype.select = function(line) {\n      if (this._isPosOrderLine(line)) {\n        return this.posFinalLineMappingStrategy;\n      }\n\n      return this.baseLineMappingStrategy;\n    };\n\n    LineMappingStrategySelector.prototype._isPosOrderLine = function(line) {\n      return !!(\n        line &&\n        line.related_order &&\n        line.related_order.order_type === 'PosOrder'\n      );\n    };\n\n    return LineMappingStrategySelector;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('BaseLineMappingStrategy', _BaseLineMappingStrategy);\n\n  _BaseLineMappingStrategy.$inject = [\n    'MonetaryLineMappingStrategy',\n    'MonetaryLineFromBasePriceDTO'\n  ];\n\n  function _BaseLineMappingStrategy(\n    MonetaryLineMappingStrategy,\n    MonetaryLineFromBasePriceDTO\n  ) {\n    function toNumber(value) {\n      var parsedValue = Number(value);\n\n      if (!isFinite(parsedValue)) {\n        return 0;\n      }\n\n      return parsedValue;\n    }\n\n    function BaseLineMappingStrategy() {\n      MonetaryLineMappingStrategy.call(this);\n    }\n\n    BaseLineMappingStrategy.prototype = Object.create(\n      MonetaryLineMappingStrategy.prototype\n    );\n    BaseLineMappingStrategy.prototype.constructor = BaseLineMappingStrategy;\n\n    BaseLineMappingStrategy.prototype.map = function(line, lineTaxes, lineDiscount) {\n      return new MonetaryLineFromBasePriceDTO(\n        toNumber(line && line.quantity),\n        this._resolveUnitBasePrice(line),\n        lineTaxes,\n        lineDiscount\n      );\n    };\n\n    BaseLineMappingStrategy.prototype._resolveUnitBasePrice = function(line) {\n      if (\n        line &&\n        line.custom_price_excl_tax !== null &&\n        line.custom_price_excl_tax !== undefined\n      ) {\n        return toNumber(line.custom_price_excl_tax);\n      }\n\n      return toNumber(line && line.price_excl_tax);\n    };\n\n    return BaseLineMappingStrategy;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryTaxBreakdownDTO', _MonetaryTaxBreakdownDTO);\n\n  function _MonetaryTaxBreakdownDTO(MonetaryFiniteNumber) {\n\n    function MonetaryTaxBreakdownDTO(taxId, name, percentage, base, amount, surcharge) {\n      this.tax_id = taxId;\n      this.name = name || '';\n      this.percentage = MonetaryFiniteNumber.toFiniteNumber(percentage);\n      this.base = MonetaryFiniteNumber.toFiniteNumber(base);\n      this.amount = MonetaryFiniteNumber.toFiniteNumber(amount);\n\n      if (surcharge && typeof surcharge === 'object') {\n        this.surcharge = {\n          percentage: MonetaryFiniteNumber.toFiniteNumber(surcharge.percentage),\n          amount: MonetaryFiniteNumber.toFiniteNumber(surcharge.amount),\n        };\n      }\n    }\n\n    return MonetaryTaxBreakdownDTO;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryAmountDTO', _MonetaryAmountDTO)\n    .factory('MonetaryTaxSummaryDTO', _MonetaryTaxSummaryDTO)\n    .factory('MonetarySummaryDTO', _MonetarySummaryDTO);\n\n  function _MonetaryAmountDTO(MonetaryFiniteNumber) {\n    function MonetaryAmountDTO(amount, amountBeforeDiscount) {\n      this.amount = MonetaryFiniteNumber.toFiniteNumber(amount);\n      this.amount_before_discount = MonetaryFiniteNumber.toFiniteNumber(amountBeforeDiscount);\n    }\n\n    return MonetaryAmountDTO;\n  }\n\n  function _MonetaryTaxSummaryDTO(MonetaryFiniteNumber) {\n    function MonetaryTaxSummaryDTO(amount, amountBeforeDiscount, breakdown) {\n      this.amount = MonetaryFiniteNumber.toFiniteNumber(amount);\n      this.amount_before_discount = MonetaryFiniteNumber.toFiniteNumber(amountBeforeDiscount);\n      this.breakdown = angular.isArray(breakdown) ? breakdown : [];\n    }\n\n    return MonetaryTaxSummaryDTO;\n  }\n\n  function _MonetarySummaryDTO() {\n    function MonetarySummaryDTO(subtotal, taxes, total) {\n      this.subtotal = subtotal;\n      this.taxes = taxes;\n      this.total = total;\n    }\n\n    return MonetarySummaryDTO;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryLineResultDTO', _MonetaryLineResultDTO);\n\n  function _MonetaryLineResultDTO(MonetaryFiniteNumber) {\n\n    function MonetaryLineResultDTO(\n      quantity,\n      unitBasePrice,\n      unitFinalPrice,\n      subtotalBase,\n      discount,\n      taxAmount,\n      total,\n      taxesBreakdown\n    ) {\n      this.quantity = MonetaryFiniteNumber.toFiniteNumber(quantity);\n      this.unit_base_price = MonetaryFiniteNumber.toFiniteNumber(unitBasePrice);\n      this.unit_final_price = MonetaryFiniteNumber.toFiniteNumber(unitFinalPrice);\n      this.subtotal_base = MonetaryFiniteNumber.toFiniteNumber(subtotalBase);\n      this.discount = discount || null;\n      this.tax_amount = MonetaryFiniteNumber.toFiniteNumber(taxAmount);\n      this.total = MonetaryFiniteNumber.toFiniteNumber(total);\n      this.taxes_breakdown = angular.isArray(taxesBreakdown) ? taxesBreakdown : [];\n    }\n\n    Object.defineProperty(MonetaryLineResultDTO.prototype, 'taxable_base', {\n      get: function() {\n        return this.subtotal_base;\n      }\n    });\n\n    return MonetaryLineResultDTO;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryDocumentDTO', _MonetaryDocumentDTO);\n\n  function _MonetaryDocumentDTO() {\n    function MonetaryDocumentDTO(lines, discounts, summary) {\n      this.lines = angular.isArray(lines) ? lines : [];\n      this.discounts = angular.isArray(discounts) ? discounts : [];\n      this.summary = summary;\n    }\n\n    return MonetaryDocumentDTO;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryDiscountResultDTO', _MonetaryDiscountResultDTO);\n\n  function _MonetaryDiscountResultDTO(MonetaryFiniteNumber) {\n\n    function MonetaryDiscountResultDTO(\n      isPercentage,\n      percentage,\n      fixedAmount,\n      appliedAmount\n    ) {\n      this.is_percentage = Boolean(isPercentage);\n      this.percentage = percentage === null || typeof percentage === 'undefined'\n        ? null\n        : MonetaryFiniteNumber.toFiniteNumber(percentage);\n      this.fixed_amount = fixedAmount === null || typeof fixedAmount === 'undefined'\n        ? null\n        : MonetaryFiniteNumber.toFiniteNumber(fixedAmount);\n      this.applied_amount = MonetaryFiniteNumber.toFiniteNumber(appliedAmount);\n    }\n\n    return MonetaryDiscountResultDTO;\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, DOJO_PAYMENT_STATUS) {\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    vm.showingSignatureConfirmation = false;\n    vm.currentPaymentData = null;\n    vm.processingSignature = false;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.retry = retry;\n    vm.close = close;\n    vm.acceptSignature = acceptSignature;\n    vm.denySignature = denySignature;\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              \n              if (paymentStatus === DOJO_PAYMENT_STATUS.SIGNATURE_VERIFICATION_REQUIRED) {\n                if (!vm.showingSignatureConfirmation && !vm.processingSignature) {\n                  showSignatureDialog(response.data);\n                }\n              }\n              \n              var errors = [\n                DOJO_PAYMENT_STATUS.CANCELLED,\n                DOJO_PAYMENT_STATUS.SIGNATURE_VERIFICATION_REJECTED,\n                DOJO_PAYMENT_STATUS.EXPIRED,\n                DOJO_PAYMENT_STATUS.DECLINED,\n                DOJO_PAYMENT_STATUS.TIMEOUT\n              ];\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 === DOJO_PAYMENT_STATUS.CANCELLED) {\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 showSignatureDialog(paymentData) {\n      vm.showingSignatureConfirmation = true;\n      vm.currentPaymentData = paymentData;\n    }\n\n    function acceptSignature() {\n      handleSignatureDecision(vm.currentPaymentData, true);\n    }\n\n    function denySignature() {\n      handleSignatureDecision(vm.currentPaymentData, false);\n    }\n\n    function handleSignatureDecision(paymentData, accepted) {\n      vm.showingSignatureConfirmation = false;\n      vm.processingSignature = true;\n      api.inventories.posOrderPaymentMethods.save(\n        {\n          id: vm.pos_order_payment_method.id,\n          option: 'payment-gateway-handle-signature'\n        },\n        {\n          payment_gateway_data_id: paymentData.id,\n          accepted: accepted\n        },\n        function (response, fn, status) {\n          vm.processingSignature = false;\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.pulling = true;\n            checkPaymentStatus();\n          } else {\n            vm.errorMessage = $filter('translate')('GENERAL.ERROR_TOAST');\n            $mdToast.show($mdToast.simple().textContent(vm.errorMessage).position('top right'));\n            stopPulling();\n          }\n        }\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_ACCEPTED_WITH_ERRORS';\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-yellow-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.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 && response.error === ERROR_CODES.ERROR_04067_CREATING_STOCKTAKING_ORDER_PRODUCT_VARIANT_ERROR_DUE_TO_PRODUCT_VARIANT_DELETED) {\n                $mdToast.show($mdToast.simple()\n                  .textContent($translate.instant('STOCKTAKING.STOCKTAKING_PRODUCT_VARIANT_ARCHIVED'))\n                  .position('top right'));\n                orderProductVariant.amount = null;\n              } else if (status == HTTP_STATUS.HTTP_409_CONFLICT) {\n                showReloadToast('ORDER.ERROR_ORDER_STATUS_CHANGED');\n              } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n                  orderProductVariant.amount = null;\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('STOCKTAKING.STOCKTAKING_PRODUCT_VARIANT_DOESNT_EXIST')).position('top right'));\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 && response.error === ERROR_CODES.ERROR_04067_CREATING_STOCKTAKING_ORDER_PRODUCT_VARIANT_ERROR_DUE_TO_PRODUCT_VARIANT_DELETED) {\n                $mdToast.show($mdToast.simple()\n                  .textContent($translate.instant('STOCKTAKING.STOCKTAKING_PRODUCT_VARIANT_ARCHIVED'))\n                  .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')('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.inventories.purchaseOrders.save({\n          option: 'generate-invoice',\n          id: vm.purchaseOrder.id\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\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, CONTACT_TYPES_REVERSE) {\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        type: CONTACT_TYPES_REVERSE.CONTACT_TYPE_PROVIDER\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                                               SiteProduct,\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    \n    vm.siteProducts = SiteProductsData.results.map(function(siteProduct) {\n      return new SiteProduct(siteProduct);\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      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.originalProductSnapshot = 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.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      vm.originalProductSnapshot = angular.copy(vm.product);\n    }\n\n    function showSavingProgressBar() {\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: 'PRODUCT.SAVING',\n          body: 'CONFIGURATION.PLEASE_WAIT'\n        }\n      });\n    }\n\n    function saveProduct() {\n      var product = angular.copy(vm.product);\n      if (product.id) {\n        var patch = buildWhitelistPatch(vm.originalProductSnapshot || {}, product);\n        if (!Object.keys(patch).length) {\n          $scope.$broadcast('InventoryProductDetailsController::productUpdated');\n          return;\n        }\n\n        addRequiredContextFields(patch, product);\n\n        showSavingProgressBar();\n        api.inventories.products.patch(\n          patch, function(response, callback, status) {\n            $mdDialog.hide();\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              vm.product = response;\n              saveProductCallback();\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            $mdDialog.hide();\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     * 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 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          $mdDialog.hide();\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      showSavingProgressBar();\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', '/update-product-fields');\n      vm.ngFlow.flow.opts.query = { id: vm.product.id };\n      vm.ngFlow.flow.opts.uploadMethod = 'PATCH';\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    function normalizePlanningConfig(val) {\n      var v = val || {};\n      return {\n        id: v.id || null,\n        is_limit_min: !!v.is_limit_min,\n        limit_min_qty: (v.limit_min_qty === 0 || v.limit_min_qty) ? v.limit_min_qty : null,\n        is_limit_max: !!v.is_limit_max,\n        max_type: (v.max_type === 0 || v.max_type) ? v.max_type : null,\n        max_percentage_value: (v.max_percentage_value === 0 || v.max_percentage_value) ? v.max_percentage_value : null,\n        max_fixed_amount_value: (v.max_fixed_amount_value === 0 || v.max_fixed_amount_value) ? v.max_fixed_amount_value : null,\n        is_limit_max_to_min_stock_origin: !!v.is_limit_max_to_min_stock_origin,\n      };\n    }\n\n    function serializePlanningConfig(val) {\n      return normalizePlanningConfig(val);\n    }\n\n    function isPlanningConfigChanged(ov, cv) {\n      return !angular.equals(normalizePlanningConfig(ov), normalizePlanningConfig(cv));\n    }\n\n    function idOf(val) { return val && typeof val === 'object' ? val.id : val; }\n\n    function diffReferenceIds(patch, original, current, keys) {\n      keys.forEach(function(k) {\n        var ov = original[k];\n        var cv = current[k];\n        var oId = (ov && typeof ov === 'object') ? ov.id : ov;\n        var cId = (cv && typeof cv === 'object') ? cv.id : cv;\n        if (!angular.equals(oId, cId)) {\n          patch[k] = cId != null ? { id: cId } : null;\n        }\n      });\n    }\n\n    function diffNumericFields(patch, original, current, keys) {\n      keys.forEach(function(k) {\n        var ov = original[k];\n        var cv = current[k];\n        if (ov != null && cv != null) {\n          var on = Number(ov);\n          var cn = Number(cv);\n          if (!(isFinite(on) && isFinite(cn)) || on !== cn) {\n            patch[k] = cv;\n          }\n        } else if (!angular.equals(ov, cv)) {\n          patch[k] = typeof cv === 'undefined' ? null : cv;\n        }\n      });\n    }\n\n    function diffGenericFields(patch, original, current, keys) {\n      keys.forEach(function(k) {\n        var ov = original[k];\n        var cv = current[k];\n        if (!angular.equals(ov, cv)) {\n          patch[k] = typeof cv === 'undefined' ? null : cv;\n        }\n      });\n    }\n\n    function diffBasicFields(original, current) {\n      var patch = {};\n      var o = original || {};\n      var c = current || {};\n\n      if (!angular.equals(o.code, c.code)) { patch.code = c.code; }\n      if (!angular.equals(o.name, c.name)) { patch.name = c.name; }\n\n      var obId = idOf(o.brand), cbId = idOf(c.brand);\n      if (!angular.equals(obId, cbId)) { patch.brand = cbId != null ? { id: cbId } : null; }\n      var osId = idOf(o.season), csId = idOf(c.season);\n      if (!angular.equals(osId, csId)) { patch.season = csId != null ? { id: csId } : null; }\n      var ocId = idOf(o.category), ccId = idOf(c.category);\n      if (!angular.equals(ocId, ccId)) { patch.category = ccId != null ? { id: ccId } : null; }\n      var ocoId = idOf(o.composition), ccoId = idOf(c.composition);\n      if (!angular.equals(ocoId, ccoId)) { patch.category = ccoId != null ? { id: ccoId } : null; }\n\n      var oProviderId = idOf(o.provider), cProviderId = idOf(c.provider);\n      if (!angular.equals(oProviderId, cProviderId)) {\n        patch.provider_id = cProviderId != null ? cProviderId : null;\n      }\n\n      diffReferenceIds(patch, o, c, ['company', 'subcategory']);\n      diffNumericFields(patch, o, c, ['width', 'height', 'depth', 'weight', 'ddp_price', 'initial_ddp_price']);\n      diffGenericFields(patch, o, c, [\n        'weight_unit', 'origin_code', 'inventory_policy_type', 'autogenerate', 'manage_uids',\n        'manage_lots', 'discount_active', 'allow_b2b_pre_sales', 'description', 'description_long',\n        'prices', 'manage_stock', 'is_noos', 'default_barcode_type', 'backorders_allowed',\n        'b2b_ecommerces', 'purchase_lead_time', 'fob_price', 'fob_price_currency',\n        'sale_store_comment',\n        'cost_price_notes', 'group_code', 'harmonised_code', 'collections', 'composition', 'tags'\n      ]);\n\n      return patch;\n    }\n\n    function buildWhitelistPatch(original, current) {\n      var patch = diffBasicFields(original, current);\n\n      if (isPlanningConfigChanged(original.replenishment_planning_configuration, current.replenishment_planning_configuration)) {\n        patch.replenishment_planning_configuration = serializePlanningConfig(current.replenishment_planning_configuration);\n      }\n      if (isPlanningConfigChanged(original.purchase_planning_configuration, current.purchase_planning_configuration)) {\n        patch.purchase_planning_configuration = serializePlanningConfig(current.purchase_planning_configuration);\n      }\n\n      return patch;\n    }\n\n    function addRequiredContextFields(patch, current) {\n      function idOf(val) { return val && typeof val === 'object' ? val.id : val; }\n      patch.option = 'update-product-fields';\n      patch.code = current.code;\n      patch.name = current.name;\n      patch.id = current.id;\n      var bId = idOf(current.brand);\n      var sId = idOf(current.season);\n      var cId = idOf(current.category);\n      var coId = idOf(current.composition);\n      patch.brand = bId != null ? { id: bId } : null;\n      patch.season = sId != null ? { id: sId } : null;\n      patch.category = cId != null ? { id: cId } : null;\n      patch.composition = coId != null ? { id: coId } : null;\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().toArray(),\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      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      function reloadVariantsTable() {\n        vm.dtInstance2.DataTable.search('').columns().search('');\n        vm.dtInstance2.DataTable.ajax.reload(null, false);\n      }\n\n      if (vm.dtInstance2.DataTable) {\n        reloadVariantsTable();\n      } else {\n        var attempts = 0;\n        var maxAttempts = 20;\n\n        var checkTableInterval = $interval(function () {\n          attempts++;\n\n          if (vm.dtInstance2.DataTable) {\n            $interval.cancel(checkTableInterval);\n            reloadVariantsTable();\n          } else if (attempts >= maxAttempts) {\n            $interval.cancel(checkTableInterval);\n          }\n        }, 100);\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('ConfigurationSupportController', ConfigurationSupportController);\n\n  /** @ngInject */\n  function ConfigurationSupportController(\n    $filter,\n    $mdToast,\n    $scope,\n    TemporaryAccountAccess,\n    TemporaryAccountAccessData,\n    api,\n    Session,\n    HTTP_STATUS\n  ) {\n\n    var vm = this;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.SUPPORT;\n\n    // Data\n    vm.temporaryAccountAccess = TemporaryAccountAccessData[0] ? new TemporaryAccountAccess(TemporaryAccountAccessData[0]) : null;\n    vm.accessOptions = [];\n    vm.expiresAt = null;\n    vm.saving = false;\n\n    // Methods\n    vm.grantAccess = grantAccess;\n    vm.revokeAccess = revokeAccess;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      initializeAccessOptions();\n    }\n\n    function initializeAccessOptions() {\n      var now = new Date();\n      now.setMinutes(0, 0, 0);\n      var tomorrow = new Date(now);\n      tomorrow.setDate(tomorrow.getDate() + 1);\n      var oneWeek = new Date(now);\n      oneWeek.setDate(oneWeek.getDate() + 7);\n      var oneMonth = new Date(now);\n      oneMonth.setMonth(oneMonth.getMonth() + 1);\n      var oneYear = new Date(now);\n      oneYear.setFullYear(oneYear.getFullYear() + 1);\n      vm.accessOptions.push({\n        label: 'SUPPORT_CONFIGURATION.ONE_DAY',\n        value: tomorrow\n      });\n      vm.accessOptions.push({\n        label: 'SUPPORT_CONFIGURATION.ONE_WEEK',\n        value: oneWeek\n      });\n      vm.accessOptions.push({\n        label: 'SUPPORT_CONFIGURATION.ONE_MONTH',\n        value: oneMonth\n      });\n      vm.accessOptions.push({\n        label: 'SUPPORT_CONFIGURATION.ONE_YEAR',\n        value: oneYear\n      });\n    }\n\n    function grantAccess() {\n      if (!Session.hasPermission('inventory.configuration.support.grant_access')) {\n        return;\n      }\n      if (vm.temporaryAccountAccess) {\n        return;\n      }\n      if (vm.saving) {\n        return;\n      }\n\n      vm.saving = true;\n      api.account.temporaryAccountAccess.save({\n        expires_at: vm.expiresAt\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_201_CREATED) {\n          vm.temporaryAccountAccess = new TemporaryAccountAccess(response);\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SUPPORT_CONFIGURATION.ACCESS_GRANTED_SUCCESS')).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 revokeAccess() {\n      if (!Session.hasPermission('inventory.configuration.support.revoke_access')) {\n        return;\n      }\n      if (!vm.temporaryAccountAccess || !vm.temporaryAccountAccess.id) {\n        return;\n      }\n      if (vm.saving) {\n        return;\n      }\n      vm.saving = true;\n      api.account.temporaryAccountAccess.revoke({\n        id: vm.temporaryAccountAccess.id\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.temporaryAccountAccess = null;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SUPPORT_CONFIGURATION.ACCESS_REVOKED_SUCCESS')).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 () {\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    angular\n      .module('app.inventory')\n      .controller('ConfigurationPickingPackingController', ConfigurationPickingPackingController);\n\n    /** @ngInject */\n    function ConfigurationPickingPackingController($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.PICKING_PACKING_CONFIGURATION;\n\n      // Data\n      vm.configurationData = angular.copy(ConfigurationData.results[0] || {\n        allow_orders_with_incidence: true,\n        allow_orders_with_pending_fulfillment: true,\n        allow_orders_with_warning: true,\n        allow_unpaid_orders: true,\n        display_sku_at_shipping_label: false\n      });\n      vm.prevConfigurationData = angular.copy(vm.configurationData);\n\n      vm.saving = false;\n\n      // Methods\n      vm.savePickingPackingConfiguration = savePickingPackingConfiguration;\n      vm.cancel = cancel;\n\n      // Functions\n\n      function savePickingPackingConfiguration(showToast) {\n        if (Session.hasPermission('inventory.configuration.picking_packing.update')) {\n          vm.saving = true;\n          var saveAction = vm.configurationData.id ? 'update' : 'save';\n\n          api.inventories.pickingAndPackingConfiguration[saveAction](\n            vm.configurationData,\n            function (result, response, status, message) {\n              if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n                vm.configurationData = angular.copy(result);\n                vm.prevConfigurationData = angular.copy(vm.configurationData);\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 cancel() {\n        vm.configurationData = angular.copy(vm.prevConfigurationData);\n        $scope.balanceForm.$setPristine();\n      }\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.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\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        if (vm.columns.loyalty_percentage) {\n          vm.columns.loyalty_percentage.width = '*';\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, '*', 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          if (!vm.configurationData.minimum_balance_spend_amount || vm.configurationData.minimum_balance_spend_amount <= 0) {\n            vm.configurationData.minimum_balance_spend_amount = null;\n          }\n          if (!vm.configurationData.balance_spend_multiple || vm.configurationData.balance_spend_multiple <= 0) {\n            vm.configurationData.balance_spend_multiple = null;\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('DevelopersController', DevelopersController);\n\n  /** @ngInject */\n  function DevelopersController(api, Session, $q, $mdToast, $filter, $window) {\n\n    var vm = this;\n\n    vm.swaggerUrl = api.url + 'swagger/';\n    vm.redocUrl = api.url + 'redoc/';\n    vm.token = 'Token ' + Session.token;\n    vm.hiddenToken = 'Token ' + Session.token.replace(/.(?=.{4})/g, '*');\n    vm.copyToken = copyToken;\n\n    function copyToken() {\n      if (!vm.token) {\n        showToast('DEVELOPERS.TOKEN_COPY_ERROR');\n        return;\n      }\n\n      copyToClipboard(vm.token).then(function () {\n        showToast('DEVELOPERS.TOKEN_COPIED');\n      }).catch(function () {\n        showToast('DEVELOPERS.TOKEN_COPY_ERROR');\n      });\n    }\n\n    function copyToClipboard(value) {\n      if ($window.navigator && $window.navigator.clipboard && $window.navigator.clipboard.writeText) {\n        return $q.when($window.navigator.clipboard.writeText(value));\n      }\n\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\n      var successful = false;\n      try {\n        successful = document.execCommand('copy');\n      } catch (error) {\n        successful = false;\n      }\n\n      textarea.remove();\n      return successful ? $q.resolve() : $q.reject();\n    }\n\n    function showToast(translationKey) {\n      $mdToast.show(\n        $mdToast.simple().textContent($filter('translate')(translationKey)).position('top right')\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    vm.getVerifactuSerialNumberTypes = getVerifactuSerialNumberTypes;\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    function getVerifactuSerialNumberTypes() {\n      var verifactuApp = Session.company.getVerifactuApp(null);\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('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\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    } else if (!isCategory) {\n      vm.allCategories = categories || [];\n      vm.selectedId = vm.object.category;\n      vm.selectFilter = '';\n    }\n\n    hotkeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT', 'SELECT', 'TEXTAREA'],\n      callback: function () {\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 || (!isCategory && (!categories || categories.length === 0))) {\n        api.inventories.variantCategories.list(function (results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.allCategories = results.results;\n          } else if (specificCategory) {\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        if (!vm.isCategory && vm.selectedId) {\n          vm.object.category = vm.selectedId;\n        }\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 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.adjustmentOrders.update(\n        {\n          id: vm.adjustment.id,\n          option: option\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n\n            vm.adjustment.status = response.status;\n            $scope.$parent.vm.adjustment.status = vm.adjustment.status;\n            $scope.$parent.vm.adjustment.single_delivery = response.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          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.integration_apps')\n    .controller('HandlerEventDetailController', HandlerEventDetailController);\n\n  /** @ngInject */\n  function HandlerEventDetailController(\n    $state,\n    $stateParams,\n    api,\n    EventDetailHelper,\n    EventBadgeHelper\n  ) {\n    var vm = this;\n    var helper = EventDetailHelper;\n\n    vm.eventId = $stateParams.id;\n    vm.event = null;\n    vm.loading = true;\n    vm.error = false;\n    vm.formattedProcessedAt = '';\n    vm.formattedStartProcessingAt = '';\n    vm.formattedOperationType = '';\n    vm.formattedStatus = '';\n    vm.formattedRetries = '';\n    vm.hasError = false;\n    vm.markAsPendingLoading = false;\n    vm.translations = {\n      status: 'HANDLER_EVENTS.STATUS',\n      details: 'HANDLER_EVENTS.DETAILS',\n      errorLoading: 'HANDLER_EVENTS.ERROR_LOADING_EVENT',\n      goBack: 'HANDLER_EVENTS.GO_BACK',\n      processedResult: 'HANDLER_EVENTS.PROCESSED_RESULT',\n      eventError: 'HANDLER_EVENTS.EVENT_ERROR'\n    };\n\n    vm.goBack = goBack;\n    vm.canShowMarkAsPendingButton = canShowMarkAsPendingButton;\n    vm.markAsPending = markAsPending;\n\n    initialize();\n\n    function initialize() {\n      loadEventDetail();\n    }\n\n    function loadEventDetail() {\n      vm.loading = true;\n      vm.error = false;\n\n      helper.loadEvent(api.urls.integrationApps.handlerEvents, vm.eventId, 'integration_event')\n        .then(function(response) {\n          setEventData(response.data);\n          vm.loading = false;\n        })\n        .catch(function() {\n          vm.error = true;\n          vm.loading = false;\n          helper.showErrorToast('HANDLER_EVENTS.ERROR_LOADING_EVENT');\n        });\n    }\n\n    function setEventData(event) {\n      vm.event = event;\n      vm.formattedProcessedAt = helper.formatDate(vm.event.processed_at);\n      vm.formattedStartProcessingAt = helper.formatDate(vm.event.start_processing_at);\n      vm.formattedOperationType = EventBadgeHelper.getHandlerOperationBadgeData(vm.event.operation_type).label;\n      vm.formattedStatus = EventBadgeHelper.getStatusBadgeData(vm.event.status, 'HANDLER_EVENTS').label;\n      vm.formattedRetries = helper.formatRetries(vm.event.try_count, vm.event.max_retries);\n      vm.hasError = vm.event.status === 'Error' || vm.event.status === 'WithErrors' || vm.event.status === 4;\n    }\n\n    function canShowMarkAsPendingButton() {\n      return helper.canShowMarkAsPendingAction(vm.event);\n    }\n\n    function markAsPending() {\n      helper.markEventAsPending({\n        event: vm.event,\n        eventId: vm.eventId,\n        baseUrl: api.urls.integrationApps.handlerEvents,\n        translationPrefix: 'HANDLER_EVENTS',\n        markAsPendingLoading: vm.markAsPendingLoading,\n        setMarkAsPendingLoading: function(value) {\n          vm.markAsPendingLoading = value;\n        },\n        onSuccess: function() {\n          loadEventDetail();\n        }\n      });\n    }\n\n    function goBack() {\n      $state.go('app.integration_apps.handler_events');\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, INVOICE_PAYMENT_STATUSES) {\n\n    var vm = this;\n    vm.contact = ContactData;\n    vm.invoices = InvoicesData.results;\n    vm.INVOICE_PAYMENT_STATUSES = INVOICE_PAYMENT_STATUSES;\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.mutable_fields.payment_status == vm.INVOICE_PAYMENT_STATUSES['PAYMENT_STATUS_PENDING']) {\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.mutable_fields.payment_status == vm.INVOICE_PAYMENT_STATUSES['PAYMENT_STATUS_PENDING']) {\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, ArtifactService) {\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      if (vm.waiting) {\n        return;\n      }\n\n      vm.waiting = true;\n      ArtifactService.generateInvoiceZip({ invoice_ids: vm.selected }, function () {\n        vm.waiting = false;\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    vm.latestPrivacyContractSignature = vm.contact.latest_privacy_contract_signature || null;\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  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('EcommerceSiteVouchersController', EcommerceSiteVouchersController);\n\n  /** @ngInject */\n  function EcommerceSiteVouchersController($scope, SiteData, ECOMMERCE_PLATFORMS) {\n    var vm = this;\n\n    $scope.$parent.vm.currentNavItem = 'vouchers';\n\n    vm.site = angular.copy(SiteData);\n    vm.isPrestashopSite = vm.site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP;\n    vm.isVouchersEnabled = vm.isPrestashopSite && !!vm.site.sync_gift_card_enabled;\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_PRODUCT_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('last_stock_sync')\n          .withTitle($filter('translate')('SITES.LAST_STOCK_SYNC'))\n          .renderWith(function (data, type, full) {\n            if (full.last_stock_sync)\n              return $filter('date')(full.last_stock_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 += '<span>' +\n                '<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 || vm.isArchivedOrDeletedSiteProduct(vm.siteProductsDict[' + full.id + '])\"' +\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                '<md-tooltip ng-if=\"vm.isArchivedOrDeletedSiteProduct(vm.siteProductsDict[' + full.id + '])\">{{\"PRODUCT.SYNC_DISABLED_ARCHIVED_PRODUCT\" | translate}}</md-tooltip>' +\n                '</span>';\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    vm.isArchivedOrDeletedSiteProduct = isArchivedOrDeletedSiteProduct;\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      if (vm.isArchivedOrDeletedSiteProduct(vm.siteProductsDict[id])) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.SYNC_DISABLED_ARCHIVED_PRODUCT')).position('top right'));\n        return;\n      }\n\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].last_stock_sync = response.last_stock_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 isArchivedOrDeletedSiteProduct(siteProduct) {\n      return siteProduct && siteProduct.archived;\n    }\n\n    function showErrors(siteProductId) {\n      var siteProduct = vm.siteProductsDict[siteProductId];\n      var xmlSnippet = siteProduct && (siteProduct.xml_snippet || siteProduct.error_snippet);\n\n      if (xmlSnippet) {\n        showXmlErrorDialog(String(xmlSnippet));\n        return;\n      }\n\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 showXmlErrorDialog(xmlSnippet) {\n      $mdDialog.show({\n        clickOutsideToClose: true,\n        parent: angular.element(document.body),\n        locals: {\n          xmlSnippet: xmlSnippet,\n        },\n        controller: 'XmlErrorDialogController',\n        controllerAs: 'vm',\n        bindToController: true,\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/xml-error-dialog/xml-error-dialog.html'\n      });\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('EcommerceSiteOperationsController', EcommerceSiteOperationsController);\n\n  /** @ngInject */\n  function EcommerceSiteOperationsController(\n    $scope,\n    $stateParams,\n    $filter,\n    api,\n    EventBadgeHelper,\n    EventListHelper,\n    SEARCH_MAX_LENGTH\n  ) {\n    var vm = this;\n    var filterKeys = ['operation_type', 'statuses', 'dateRange'];\n\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.siteId = $stateParams.id;\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.operationTypes = [\n      'stock.moved',\n      'stock.belonging_to_bundle_moved',\n      'site_order.pending_to_import',\n      'pos_order_fulfillment.status_updated'\n    ].map(function(operationType) {\n      return {\n        id: operationType,\n        name: EventBadgeHelper.getSiteOperationBadgeData(operationType).label\n      };\n    });\n    vm.statuses = [\n      { id: 1, name: $filter('translate')('SITE.STATUS_PENDING') },\n      { id: 2, name: $filter('translate')('SITE.STATUS_PROCESSING') },\n      { id: 3, name: $filter('translate')('SITE.STATUS_PROCESSED') },\n      { id: 4, name: $filter('translate')('SITE.STATUS_WITH_ERRORS') }\n    ];\n\n    vm.reloadOperations = EventListHelper.createReloadFn(vm, '_reloadTimeout');\n    vm.clearSearch = clearSearch;\n    vm.clearFilter = clearFilter;\n\n    vm.status = EventListHelper.createStatus(\n      { operation_type: [] },\n      { nonStorableFilters: {} }\n    );\n    vm.listConfig = {\n      url: api.urls.ecommerce.siteHandlerEvents,\n      expand: 'integration_event',\n      storageLabel: 'UIGridSiteOperationsListV2',\n      nonStorableFilters: {\n        sites: [vm.siteId]\n      },\n      columnsConfig: {\n        translationPrefix: 'SITE',\n        idTranslationKey: 'OPERATION_ID',\n        processedAtTranslationKey: 'OPERATION_DATE',\n        operationTypeTranslationKey: 'OPERATION_TYPE',\n        statusTranslationKey: 'OPERATION_STATUS',\n        detailState: 'app.ecommerce.sites.site.operations.detail',\n        detailStateParam: 'operationId',\n        badgeDirective: 'nd-site-operation-badge',\n        statusEnableSorting: true\n      }\n    };\n\n    EventListHelper.setupStatusLoadedListener($scope, vm.status, filterKeys, false);\n\n    function clearFilter() {\n      EventListHelper.resetFilters(vm.status, filterKeys);\n      vm.reloadOperations();\n    }\n\n    function clearSearch() {\n      vm.status.search = '';\n      vm.reloadOperations();\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(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')\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        name: 'NOTES',\n        selected: true,\n        default: true\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\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\n    vm.filterByEcommerceOnly = null;\n    vm.customFields = [\n      {\n        id: 'filterByEcommerceOnly',\n        type: 'select',\n        selectChecked: vm.filterByEcommerceOnly,\n        title: 'SALES.SALES',\n        options: {\n          'REPORTS.ORDER_SOURCE_ALL': null,\n          'REPORTS.ORDER_SOURCE_ECOMMERCE': true,\n          'REPORTS.ORDER_SOURCE_PHYSICAL_STORE': false\n        }\n      }\n    ];\n\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, customFields) {\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 sourceFilterField = (customFields || []).find(function (field) {\n        return field.id === 'filterByEcommerceOnly';\n      });\n\n      api.reports.ticketsReport.get(\n        {\n          date_start: dateRange.dateStart,\n          date_end: dateRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType,\n          filterByEcommerceOnly: sourceFilterField ? sourceFilterField.selectChecked : 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('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\n    vm.filterByEcommerceOnly = null;\n    vm.customFields = [\n      {\n        id: 'filterByEcommerceOnly',\n        type: 'select',\n        selectChecked: vm.filterByEcommerceOnly,\n        title: 'SALES.SALES',\n        options: {\n          'REPORTS.ORDER_SOURCE_ALL': null,\n          'REPORTS.ORDER_SOURCE_ECOMMERCE': true,\n          'REPORTS.ORDER_SOURCE_PHYSICAL_STORE': false\n        }\n      }\n    ];\n\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();\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    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 sourceFilterField = (customFields || []).find(function (field) {\n        return field.id === 'filterByEcommerceOnly';\n      });\n\n      api.reports.dailyBillingsReport.get(\n        {\n          dateStart: dateRange.dateStart,\n          dateEnd: dateRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType,\n          filterByEcommerceOnly: sourceFilterField ? sourceFilterField.selectChecked : 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('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.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('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.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\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  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    vm.getPricingTierCurrency = getPricingTierCurrency;\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    function getPricingTierCurrency() {\n      var pricingTier = vm.pricingTiers.find(function(pt) {\n        return pt.id === vm.b2bEcommerce.pricing_tier;\n      });\n      if (pricingTier && pricingTier.currency) {\n        return pricingTier.currency;\n      }\n      return Session.company.currency;\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.shared-kernel.monetary')\n    .factory('MonetaryPosOrderResultApplier', _MonetaryPosOrderResultApplier);\n\n  _MonetaryPosOrderResultApplier.$inject = ['MonetaryRounder'];\n\n  function _MonetaryPosOrderResultApplier(MonetaryRounder) {\n    function toNumber(value) {\n      var parsedValue = Number(value);\n\n      if (!isFinite(parsedValue)) {\n        return 0;\n      }\n\n      return parsedValue;\n    }\n\n    function roundPrice(value) {\n      return MonetaryRounder.roundFinal(toNumber(value));\n    }\n\n    function MonetaryPosOrderResultApplier() {}\n\n    MonetaryPosOrderResultApplier.prototype.apply = function(posOrder, monetaryDocument) {\n      if (!posOrder || !monetaryDocument || !monetaryDocument.summary) {\n        return;\n      }\n\n      this._applyLineResults(posOrder, monetaryDocument.lines || []);\n\n      posOrder.subtotal = roundPrice(\n        toNumber(monetaryDocument.summary.subtotal && monetaryDocument.summary.subtotal.amount)\n      );\n      posOrder.total_taxes = roundPrice(\n        toNumber(monetaryDocument.summary.taxes && monetaryDocument.summary.taxes.amount)\n      );\n      posOrder.total = roundPrice(\n        toNumber(monetaryDocument.summary.total && monetaryDocument.summary.total.amount)\n      );\n    };\n\n    MonetaryPosOrderResultApplier.prototype._applyLineResults = function(posOrder, lineResults) {\n      if (!angular.isArray(posOrder.pos_order_product_variants)) {\n        return;\n      }\n\n      posOrder.pos_order_product_variants.forEach(function(popv, index) {\n        if (!lineResults[index]) {\n          return;\n        }\n\n        popv.subtotal = toNumber(lineResults[index].subtotal_base);\n        popv.total = toNumber(lineResults[index].total);\n      });\n    };\n\n    return MonetaryPosOrderResultApplier;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryPosOrderInputMapper', _MonetaryPosOrderInputMapper);\n\n  _MonetaryPosOrderInputMapper.$inject = [\n    'MonetaryLineFromFinalPriceDTO',\n    'MonetaryTaxDTO',\n    'FixedInclTaxMonetaryDiscountDTO',\n    'FeatureFlagService'\n  ];\n\n  function _MonetaryPosOrderInputMapper(\n    MonetaryLineFromFinalPriceDTO,\n    MonetaryTaxDTO,\n    FixedInclTaxMonetaryDiscountDTO,\n    FeatureFlagService\n  ) {\n    function toNumber(value) {\n      var parsedValue = Number(value);\n\n      if (!isFinite(parsedValue)) {\n        return 0;\n      }\n\n      return parsedValue;\n    }\n\n    function hasValue(value) {\n      return value !== null && typeof value !== 'undefined';\n    }\n\n    function MonetaryPosOrderInputMapper() {}\n\n    MonetaryPosOrderInputMapper.prototype.map = function(posOrder, options) {\n      var normalizedOptions = options || {};\n      var mappedLines = this._mapLines(posOrder, normalizedOptions);\n\n      return {\n        lines: mappedLines,\n        discounts: this._mapDocumentDiscounts(\n          posOrder,\n          normalizedOptions,\n          mappedLines\n        )\n      };\n    };\n\n    MonetaryPosOrderInputMapper.prototype._mapDocumentDiscounts = function(\n      posOrder,\n      options,\n      lines\n    ) {\n      if (options.includeBalanceDiscount === false) {\n        return [];\n      }\n\n      if (!posOrder) {\n        return [];\n      }\n\n      var discounts = [];\n\n      var balanceDiscount = toNumber(posOrder.balance_discount);\n      if (balanceDiscount !== 0) {\n        discounts.push(new FixedInclTaxMonetaryDiscountDTO(balanceDiscount));\n      }\n\n      var orderDiscountInclTax = this._getEffectiveOrderDiscountInclTax(posOrder);\n      if (orderDiscountInclTax > 0) {\n        discounts.push(new FixedInclTaxMonetaryDiscountDTO(orderDiscountInclTax));\n      }\n\n      return discounts;\n    };\n\n    MonetaryPosOrderInputMapper.prototype._getEffectiveOrderDiscountInclTax = function(\n      posOrder\n    ) {\n      var discountInclTax = toNumber(posOrder.discount_incl_tax);\n      if (discountInclTax > 0) {\n        return discountInclTax;\n      }\n\n      var discountExclTax = toNumber(posOrder.discount_excl_tax);\n      if (discountExclTax <= 0) {\n        return 0;\n      }\n\n      return this._calculateProratedDiscountConvertedValue(\n        posOrder,\n        discountExclTax\n      );\n    };\n\n    MonetaryPosOrderInputMapper.prototype._calculateProratedDiscountConvertedValue = function(\n      posOrder,\n      sourceDiscount\n    ) {\n      if (!angular.isArray(posOrder.pos_order_product_variants) || posOrder.pos_order_product_variants.length === 0) {\n        return 0;\n      }\n\n      var totalSourceAmount = 0;\n      var totalTargetAmount = 0;\n\n      posOrder.pos_order_product_variants.forEach(function(popv) {\n        var quantity = toNumber(popv.amount) - toNumber(popv.canceled_amount);\n        if (quantity <= 0) {\n          return;\n        }\n\n        var unitPriceExclTax = toNumber(popv.price_excl_tax);\n        var unitPriceInclTax = toNumber(popv.price_incl_tax);\n\n        if (hasValue(popv.custom_price_excl_tax)) {\n          unitPriceExclTax = toNumber(popv.custom_price_excl_tax);\n        }\n        if (hasValue(popv.custom_price_incl_tax)) {\n          unitPriceInclTax = toNumber(popv.custom_price_incl_tax);\n        } else if (hasValue(popv.discount) && hasValue(popv.discount_price_incl_tax)) {\n          unitPriceInclTax = toNumber(popv.discount_price_incl_tax);\n        }\n\n        totalSourceAmount += unitPriceExclTax * quantity;\n        totalTargetAmount += unitPriceInclTax * quantity;\n      });\n\n      if (totalSourceAmount === 0) {\n        return 0;\n      }\n\n      return sourceDiscount * (totalTargetAmount / totalSourceAmount);\n    };\n\n    MonetaryPosOrderInputMapper.prototype._mapLines = function(posOrder, options) {\n      var lines = [];\n\n      if (!posOrder) {\n        return lines;\n      }\n\n      var includeShipping = options.includeShipping !== false;\n      var ignoreReturns = !!options.ignoreReturns;\n      var isV2 = !!posOrder.is_v2 && FeatureFlagService.isFeatureFlagEnabled('CREATE_POS_ORDER_V2');\n\n      if (angular.isArray(posOrder.pos_order_product_variants)) {\n        posOrder.pos_order_product_variants.forEach(function(popv) {\n          var quantity = this._resolveLineQuantity(popv, ignoreReturns, isV2);\n          var unitPrice = this._resolveLineUnitFinalPrice(popv);\n\n          lines.push(\n            new MonetaryLineFromFinalPriceDTO(\n              quantity,\n              unitPrice,\n              this._resolveTaxes(popv),\n              null\n            )\n          );\n        }, this);\n      }\n\n      if (includeShipping && angular.isArray(posOrder.pos_order_shipping_methods)) {\n        posOrder.pos_order_shipping_methods.forEach(function(shippingMethod) {\n          lines.push(\n            new MonetaryLineFromFinalPriceDTO(\n              1,\n              toNumber(shippingMethod.price_incl_tax),\n              this._resolveTaxes(shippingMethod),\n              null,\n              false\n            )\n          );\n        }, this);\n      }\n\n      return lines;\n    };\n\n    MonetaryPosOrderInputMapper.prototype._resolveLineQuantity = function(popv, ignoreReturns, isV2) {\n      var amount = toNumber(popv && popv.amount);\n\n      if (isV2) {\n        return amount;\n      }\n\n      var canceledAmount = toNumber(popv && popv.canceled_amount);\n      if (ignoreReturns) {\n        var returnedAmount = toNumber(popv && popv.returned_amount);\n        return amount - returnedAmount - canceledAmount;\n      }\n\n      return amount - canceledAmount;\n    };\n\n    MonetaryPosOrderInputMapper.prototype._resolveLineUnitFinalPrice = function(popv) {\n      if (hasValue(popv && popv.custom_price_incl_tax)) {\n        return toNumber(popv.custom_price_incl_tax);\n      }\n\n      if (hasValue(popv && popv.discount) && hasValue(popv.discount_price_incl_tax)) {\n        return toNumber(popv.discount_price_incl_tax);\n      }\n\n      return toNumber(popv && popv.price_incl_tax);\n    };\n\n    MonetaryPosOrderInputMapper.prototype._resolveTaxes = function(line) {\n      var taxPercentage = toNumber(line && line.tax_percent_value);\n      // Fallback: if tax_percent_value is not a flat field (e.g. shipping methods\n      // serialized with a nested tax object), read percent_value from the nested tax.\n      if (!taxPercentage && line && line.tax && typeof line.tax === 'object') {\n        taxPercentage = toNumber(line.tax.percent_value);\n      }\n      var taxId;\n      var taxName;\n\n      if (line && line.tax && typeof line.tax === 'object') {\n        taxId = hasValue(line.tax.id) ? line.tax.id : (hasValue(line.tax.name) ? line.tax.name : (line.tax_id || line.tax_name));\n        taxName = line.tax_name || line.tax.name;\n      } else {\n        taxId = line && (line.tax || line.tax_id || line.tax_name);\n        taxName = line && line.tax_name;\n      }\n\n      if (!taxPercentage) {\n        return [];\n      }\n\n      return [new MonetaryTaxDTO(taxPercentage, taxId, taxName)];\n    };\n\n    return MonetaryPosOrderInputMapper;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryInvoiceResultApplier', _MonetaryInvoiceResultApplier);\n\n  _MonetaryInvoiceResultApplier.$inject = ['SubtotalByTax'];\n\n  function _MonetaryInvoiceResultApplier(SubtotalByTax) {\n    function toNumber(value) {\n      var parsedValue = Number(value);\n\n      if (!isFinite(parsedValue)) {\n        return 0;\n      }\n\n      return parsedValue;\n    }\n\n    function MonetaryInvoiceResultApplier() {}\n\n    MonetaryInvoiceResultApplier.prototype.apply = function(invoice, monetaryDocument) {\n      if (!invoice || !monetaryDocument || !monetaryDocument.summary) {\n        return;\n      }\n\n      this._applyLines(invoice, monetaryDocument.lines);\n      this._applySubtotalsByTax(invoice, monetaryDocument.summary.taxes.breakdown);\n      this._applyDocumentDiscounts(invoice, monetaryDocument);\n      this._applyTotals(invoice, monetaryDocument.summary);\n    };\n\n    MonetaryInvoiceResultApplier.prototype._applyLines = function(invoice, lineResults) {\n      if (!angular.isArray(invoice.invoice_lines)) {\n        return;\n      }\n\n      invoice.invoice_lines.forEach(function(line, index) {\n        var lineResult = angular.isArray(lineResults) ? lineResults[index] : null;\n\n        if (!lineResult) {\n          return;\n        }\n\n        line.total_price_excl_tax = toNumber(lineResult.subtotal_base);\n        line.total_price_incl_tax = invoice.exclude_taxes\n          ? toNumber(lineResult.subtotal_base)\n          : toNumber(lineResult.total);\n\n        if (invoice.exclude_taxes) {\n          line.price_incl_tax = toNumber(lineResult.unit_base_price);\n        } else {\n          line.price_incl_tax = toNumber(lineResult.unit_final_price);\n        }\n      });\n    };\n\n    MonetaryInvoiceResultApplier.prototype._applySubtotalsByTax = function(\n      invoice,\n      taxesBreakdown\n    ) {\n      invoice.subtotals_by_tax = {};\n\n      if (invoice.exclude_taxes || !angular.isArray(taxesBreakdown)) {\n        return;\n      }\n\n      var taxSurchargeById = this._buildTaxSurchargeById(invoice);\n\n      taxesBreakdown.forEach(function(taxBreakdown) {\n        var taxId = taxBreakdown.tax_id;\n\n        if (taxId === undefined || taxId === null) {\n          taxId = taxBreakdown.name;\n        }\n\n        if (taxId === undefined || taxId === null) {\n          return;\n        }\n\n        var taxSurcharge = toNumber(taxSurchargeById[taxId]);\n        var surchargeBreakdown = angular.isObject(taxBreakdown.surcharge)\n          ? taxBreakdown.surcharge\n          : null;\n        var surchargePercentage = invoice.surcharge\n          ? toNumber(surchargeBreakdown && surchargeBreakdown.percentage)\n          : taxSurcharge;\n\n        if (!surchargePercentage) {\n          surchargePercentage = taxSurcharge;\n        }\n\n        if (!invoice.subtotals_by_tax[taxId]) {\n          invoice.subtotals_by_tax[taxId] = new SubtotalByTax({\n            id: taxId,\n            name: taxBreakdown.name,\n            percent_value: toNumber(taxBreakdown.percentage),\n            surcharge: surchargePercentage,\n            amount: 0,\n            surcharge_amount: 0,\n            surcharge_difference: 0,\n            total_price_excl_tax_sum: 0\n          });\n        }\n\n        var subtotalByTax = invoice.subtotals_by_tax[taxId];\n        var taxBase = toNumber(taxBreakdown.base);\n\n        subtotalByTax.total_price_excl_tax_sum += taxBase;\n        subtotalByTax.amount += toNumber(taxBreakdown.amount);\n\n        if (invoice.surcharge) {\n          var surchargeAmount = toNumber(surchargeBreakdown && surchargeBreakdown.amount);\n          subtotalByTax.surcharge_amount += surchargeAmount;\n          subtotalByTax.surcharge_difference += surchargeAmount;\n        }\n      }, this);\n    };\n\n    MonetaryInvoiceResultApplier.prototype._buildTaxSurchargeById = function(invoice) {\n      var taxSurchargeById = {};\n\n      if (!invoice || !angular.isArray(invoice.invoice_lines)) {\n        return taxSurchargeById;\n      }\n\n      invoice.invoice_lines.forEach(function(line) {\n        var taxId = line.tax_id;\n\n        if ((taxId === undefined || taxId === null) && !angular.isObject(line.tax)) {\n          taxId = line.tax;\n        }\n\n        if (angular.isObject(line.tax)) {\n          if (taxId === undefined || taxId === null) {\n            taxId = line.tax.id;\n          }\n\n          if (taxId === undefined || taxId === null) {\n            taxId = line.tax.name;\n          }\n        }\n\n        if (taxId === undefined || taxId === null) {\n          taxId = line.tax_name;\n        }\n\n        if (\n          taxId === undefined ||\n          taxId === null ||\n          taxSurchargeById[taxId] !== undefined\n        ) {\n          return;\n        }\n\n        if (line.tax_instance && line.tax_instance.surcharge !== undefined) {\n          taxSurchargeById[taxId] = toNumber(line.tax_instance.surcharge);\n          return;\n        }\n\n        if (angular.isObject(line.tax) && line.tax.surcharge !== undefined) {\n          taxSurchargeById[taxId] = toNumber(line.tax.surcharge);\n          return;\n        }\n\n        if (line.tax_surcharge !== undefined) {\n          taxSurchargeById[taxId] = toNumber(line.tax_surcharge);\n          return;\n        }\n\n        taxSurchargeById[taxId] = 0;\n      });\n\n      return taxSurchargeById;\n    };\n\n    MonetaryInvoiceResultApplier.prototype._applyDocumentDiscounts = function(\n      invoice,\n      monetaryDocument\n    ) {\n      var firstDiscount = monetaryDocument.discounts[0] || null;\n      var secondDiscount = monetaryDocument.discounts[1] || null;\n\n      invoice.subtotal_discount = firstDiscount ? toNumber(firstDiscount.applied_amount) : 0;\n      invoice.subtotal_early_payment_discount = secondDiscount\n        ? toNumber(secondDiscount.applied_amount)\n        : 0;\n\n      if (invoice.discount_as_absolut) {\n        this._applyAbsoluteDiscountPercentages(invoice, monetaryDocument.summary);\n        return;\n      }\n\n      invoice.discount = firstDiscount ? toNumber(firstDiscount.percentage) : 0;\n      invoice.early_payment_discount = secondDiscount\n        ? toNumber(secondDiscount.percentage)\n        : 0;\n    };\n\n    MonetaryInvoiceResultApplier.prototype._applyAbsoluteDiscountPercentages = function(\n      invoice,\n      summary\n    ) {\n      var firstBaseAmount = invoice.is_retail\n        ? toNumber(summary.total.amount_before_discount)\n        : toNumber(summary.subtotal.amount_before_discount);\n      var firstDiscountAmount = toNumber(invoice.subtotal_discount);\n\n      invoice.discount = firstBaseAmount\n        ? (firstDiscountAmount / firstBaseAmount) * 100\n        : 0;\n\n      var secondBaseAmount = toNumber(firstBaseAmount - firstDiscountAmount);\n      var secondDiscountAmount = toNumber(invoice.subtotal_early_payment_discount);\n\n      invoice.early_payment_discount = secondBaseAmount\n        ? (secondDiscountAmount / secondBaseAmount) * 100\n        : 0;\n    };\n\n    MonetaryInvoiceResultApplier.prototype._applyTotals = function(invoice, summary) {\n      invoice.total_excl_tax = toNumber(summary.subtotal.amount);\n      invoice.subtotal = toNumber(summary.subtotal.amount_before_discount);\n      invoice.total_tax = invoice.exclude_taxes ? 0 : toNumber(summary.taxes.amount);\n      invoice.total_excl_tax_after_discount = toNumber(summary.subtotal.amount);\n\n      invoice.total_incl_tax = invoice.exclude_taxes\n        ? toNumber(summary.subtotal.amount)\n        : toNumber(summary.total.amount);\n    };\n\n    return MonetaryInvoiceResultApplier;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryInvoiceInputMapper', _MonetaryInvoiceInputMapper);\n\n  _MonetaryInvoiceInputMapper.$inject = [\n    'LineMappingStrategySelector',\n    'MonetaryTaxDTO',\n    'PercentageMonetaryDiscountDTO',\n    'FixedMonetaryDiscountDTO'\n  ];\n\n  function _MonetaryInvoiceInputMapper(\n    LineMappingStrategySelector,\n    MonetaryTaxDTO,\n    PercentageMonetaryDiscountDTO,\n    FixedMonetaryDiscountDTO\n  ) {\n    function toNumber(value) {\n      var parsedValue = Number(value);\n\n      if (!isFinite(parsedValue)) {\n        return 0;\n      }\n\n      return parsedValue;\n    }\n\n    function MonetaryInvoiceInputMapper() {\n      this.lineMappingStrategySelector = new LineMappingStrategySelector();\n    }\n\n    MonetaryInvoiceInputMapper.prototype.map = function(invoice, taxes) {\n      var mappedTaxes = angular.isArray(taxes) ? taxes : [];\n\n      return {\n        lines: this._mapLines(invoice, mappedTaxes),\n        discounts: this._mapDocumentDiscounts(invoice)\n      };\n    };\n\n    MonetaryInvoiceInputMapper.prototype._mapLines = function(invoice, taxes) {\n      if (!invoice || !angular.isArray(invoice.invoice_lines)) {\n        return [];\n      }\n\n      return invoice.invoice_lines.map(function(line) {\n        return this._mapLine(invoice, line, taxes);\n      }, this);\n    };\n\n    MonetaryInvoiceInputMapper.prototype._mapLine = function(invoice, line, taxes) {\n      var lineTaxes = this._resolveLineTaxes(invoice, line, taxes);\n      var lineDiscount = this._mapLineDiscount(line);\n      var lineMappingStrategy = this.lineMappingStrategySelector.select(line);\n\n      return lineMappingStrategy.map(\n        line,\n        lineTaxes,\n        lineDiscount\n      );\n    };\n\n    MonetaryInvoiceInputMapper.prototype._resolveLineUnitBasePrice = function(line) {\n      if (\n        line &&\n        line.custom_price_excl_tax !== null &&\n        line.custom_price_excl_tax !== undefined\n      ) {\n        return toNumber(line.custom_price_excl_tax);\n      }\n\n      return toNumber(line && line.price_excl_tax);\n    };\n\n    MonetaryInvoiceInputMapper.prototype._mapLineDiscount = function(line) {\n      var lineDiscountPercentage = toNumber(line && line.discount);\n\n      if (\n        !lineDiscountPercentage ||\n        lineDiscountPercentage <= 0 ||\n        lineDiscountPercentage > 100\n      ) {\n        return null;\n      }\n\n      return new PercentageMonetaryDiscountDTO(lineDiscountPercentage);\n    };\n\n    MonetaryInvoiceInputMapper.prototype._resolveLineTaxes = function(\n      invoice,\n      line,\n      taxes\n    ) {\n      if (invoice.exclude_taxes) {\n        return [new MonetaryTaxDTO(0, line.tax || line.tax_id || line.tax_name, line.tax_name)];\n      }\n\n      var resolvedTax = null;\n\n      if (line.tax_instance) {\n        resolvedTax = line.tax_instance;\n      } else if (line.tax !== null && line.tax !== undefined) {\n        resolvedTax = taxes.find(function(tax) {\n          return tax.id === line.tax || String(tax.id) === String(line.tax);\n        });\n      }\n\n      if (!resolvedTax) {\n        resolvedTax = {\n          id: line.tax_id || line.tax || line.tax_name,\n          name: line.tax_name,\n          percent_value: toNumber(line.tax_percent_value)\n        };\n      }\n\n      var surchargePercentage = toNumber(\n        resolvedTax.surcharge || resolvedTax.surcharge_percent_value || line.tax_surcharge\n      );\n      var mappedSurchargePercentage =\n        invoice.surcharge && surchargePercentage > 0 ? surchargePercentage : undefined;\n\n      return [\n        new MonetaryTaxDTO(\n          toNumber(resolvedTax.percent_value),\n          resolvedTax.id,\n          resolvedTax.name,\n          mappedSurchargePercentage\n        )\n      ];\n    };\n\n    MonetaryInvoiceInputMapper.prototype._mapDocumentDiscounts = function(invoice) {\n      if (!invoice) {\n        return [];\n      }\n\n      if (invoice.discount_as_absolut) {\n        return this._mapAbsoluteDocumentDiscounts(invoice);\n      }\n\n      return this._mapPercentageDocumentDiscounts(invoice);\n    };\n\n    MonetaryInvoiceInputMapper.prototype._mapAbsoluteDocumentDiscounts = function(invoice) {\n      var mappedDiscounts = [];\n      var subtotalDiscount = toNumber(invoice.subtotal_discount);\n      var subtotalEarlyPaymentDiscount = toNumber(invoice.subtotal_early_payment_discount);\n\n      if (subtotalDiscount) {\n        mappedDiscounts.push(new FixedMonetaryDiscountDTO(subtotalDiscount));\n      }\n\n      if (subtotalEarlyPaymentDiscount) {\n        mappedDiscounts.push(new FixedMonetaryDiscountDTO(subtotalEarlyPaymentDiscount));\n      }\n\n      return mappedDiscounts;\n    };\n\n    MonetaryInvoiceInputMapper.prototype._mapPercentageDocumentDiscounts = function(invoice) {\n      var mappedDiscounts = [];\n      var discount = toNumber(invoice.discount);\n      var earlyPaymentDiscount = toNumber(invoice.early_payment_discount);\n\n      if (discount > 0 && discount <= 100) {\n        mappedDiscounts.push(new PercentageMonetaryDiscountDTO(discount));\n      }\n\n      if (earlyPaymentDiscount > 0 && earlyPaymentDiscount <= 100) {\n        mappedDiscounts.push(new PercentageMonetaryDiscountDTO(earlyPaymentDiscount));\n      }\n\n      return mappedDiscounts;\n    };\n\n    return MonetaryInvoiceInputMapper;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('LineCalculationStrategySelector', _LineCalculationStrategySelector);\n\n  _LineCalculationStrategySelector.$inject = [\n    'BasePriceLineCalculationStrategy',\n    'FinalPriceLineCalculationStrategy',\n    'MonetaryLineFromFinalPriceDTO'\n  ];\n\n  function _LineCalculationStrategySelector(\n    BasePriceLineCalculationStrategy,\n    FinalPriceLineCalculationStrategy,\n    MonetaryLineFromFinalPriceDTO\n  ) {\n    function LineCalculationStrategySelector() {\n      this._basePriceStrategy = new BasePriceLineCalculationStrategy();\n      this._finalPriceStrategy = new FinalPriceLineCalculationStrategy();\n    }\n\n    LineCalculationStrategySelector.prototype.select = function(line) {\n      if (line instanceof MonetaryLineFromFinalPriceDTO) {\n        return this._finalPriceStrategy;\n      }\n\n      return this._basePriceStrategy;\n    };\n\n    return LineCalculationStrategySelector;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('LineCalculationDependencies', _LineCalculationDependencies);\n\n  _LineCalculationDependencies.$inject = [\n    'MonetaryRounder',\n    'MonetaryTaxBreakdownDTO',\n    'MonetaryDiscountResultDTO',\n    'PercentageMonetaryDiscountDTO',\n    'FixedMonetaryDiscountDTO'\n  ];\n\n  function _LineCalculationDependencies(\n    MonetaryRounder,\n    MonetaryTaxBreakdownDTO,\n    MonetaryDiscountResultDTO,\n    PercentageMonetaryDiscountDTO,\n    FixedMonetaryDiscountDTO\n  ) {\n    function calculateTaxesForTotal(line, total) {\n      var taxesBreakdown = [];\n      var totalTaxAmount = 0;\n      var totalTaxPercentage = line.getTotalTaxPercentage();\n\n      if (totalTaxPercentage === 0) {\n        return {\n          taxesBreakdown: taxesBreakdown,\n          totalTaxAmount: totalTaxAmount\n        };\n      }\n\n      var denominator = 100 + totalTaxPercentage;\n\n      line.taxes.forEach(function(tax) {\n        var taxAmount = MonetaryRounder.roundFinal(\n          total * (tax.percentage / denominator)\n        );\n        var surchargeAmount = 0;\n        var surchargeBreakdown;\n\n        if (\n          typeof tax.surcharge_percentage !== 'undefined'\n          && tax.surcharge_percentage\n        ) {\n          surchargeAmount = MonetaryRounder.roundFinal(\n            total * (tax.surcharge_percentage / denominator)\n          );\n          surchargeBreakdown = {\n            percentage: tax.surcharge_percentage,\n            amount: surchargeAmount\n          };\n        }\n\n        totalTaxAmount += taxAmount + surchargeAmount;\n        taxesBreakdown.push(\n          new MonetaryTaxBreakdownDTO(\n            tax.id,\n            tax.name,\n            tax.percentage,\n            0,\n            taxAmount,\n            surchargeBreakdown\n          )\n        );\n      });\n\n      return {\n        taxesBreakdown: taxesBreakdown,\n        totalTaxAmount: totalTaxAmount\n      };\n    }\n\n    function calculateTaxesForSubtotal(line, subtotalBase) {\n      var taxesBreakdown = [];\n      var totalTaxAmount = 0;\n\n      line.taxes.forEach(function(tax) {\n        var taxAmount = MonetaryRounder.roundFinal(\n          subtotalBase * (tax.percentage / 100)\n        );\n        var surchargeAmount = 0;\n        var surchargeBreakdown;\n\n        if (\n          typeof tax.surcharge_percentage !== 'undefined'\n          && tax.surcharge_percentage\n        ) {\n          surchargeAmount = MonetaryRounder.roundFinal(\n            subtotalBase * (tax.surcharge_percentage / 100)\n          );\n          surchargeBreakdown = {\n            percentage: tax.surcharge_percentage,\n            amount: surchargeAmount\n          };\n        }\n\n        totalTaxAmount += taxAmount + surchargeAmount;\n        taxesBreakdown.push(\n          new MonetaryTaxBreakdownDTO(\n            tax.id,\n            tax.name,\n            tax.percentage,\n            subtotalBase,\n            taxAmount,\n            surchargeBreakdown\n          )\n        );\n      });\n\n      return {\n        taxesBreakdown: taxesBreakdown,\n        totalTaxAmount: totalTaxAmount\n      };\n    }\n\n    function calculateUnitFinalPrice(line, unitBasePrice) {\n      return MonetaryRounder.roundFinal(\n        unitBasePrice * (1 + line.getTotalTaxPercentage() / 100)\n      );\n    }\n\n    function buildLineDiscountResult(line, appliedAmount) {\n      if (line.discount === null || typeof line.discount === 'undefined') {\n        return null;\n      }\n\n      if (line.discount instanceof PercentageMonetaryDiscountDTO) {\n        return new MonetaryDiscountResultDTO(\n          true,\n          line.discount.percentage,\n          null,\n          appliedAmount\n        );\n      }\n\n      if (line.discount instanceof FixedMonetaryDiscountDTO) {\n        var unitBasePriceBeforeDiscount = line.getUnitBasePriceBeforeDiscount();\n        var calculatedPercentage = null;\n\n        if (unitBasePriceBeforeDiscount && unitBasePriceBeforeDiscount !== 0) {\n          calculatedPercentage = MonetaryRounder.roundFinal(\n            (Math.abs(appliedAmount) / unitBasePriceBeforeDiscount) * 100\n          );\n        }\n\n        return new MonetaryDiscountResultDTO(\n          false,\n          calculatedPercentage,\n          line.discount.amount,\n          appliedAmount\n        );\n      }\n\n      return null;\n    }\n\n    return {\n      calculateTaxesForTotal: calculateTaxesForTotal,\n      calculateTaxesForSubtotal: calculateTaxesForSubtotal,\n      calculateUnitFinalPrice: calculateUnitFinalPrice,\n      buildLineDiscountResult: buildLineDiscountResult\n    };\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('FinalPriceLineCalculationStrategy', _FinalPriceLineCalculationStrategy);\n\n  _FinalPriceLineCalculationStrategy.$inject = [\n    'LineCalculationDependencies',\n    'MonetaryRounder',\n    'MonetaryLineResultDTO',\n    'MonetaryTaxBreakdownDTO'\n  ];\n\n  function _FinalPriceLineCalculationStrategy(\n    LineCalculationDependencies,\n    MonetaryRounder,\n    MonetaryLineResultDTO,\n    MonetaryTaxBreakdownDTO\n  ) {\n    function FinalPriceLineCalculationStrategy() {}\n\n    FinalPriceLineCalculationStrategy.prototype.calculate = function(line) {\n      var quantity = line.quantity;\n      var unitBasePriceBeforeDiscount = line.getUnitBasePriceBeforeDiscount();\n      var unitBasePrice = line.getUnitBasePrice();\n      var unitDiscountAmount = unitBasePriceBeforeDiscount - unitBasePrice;\n      var unitFinalPrice = MonetaryRounder.roundFinal(\n        line.unitPrice - this._getUnitDiscountAmountInclTax(line)\n      );\n      var discountAmount = MonetaryRounder.roundFinal(unitDiscountAmount * quantity);\n      var discountResult = LineCalculationDependencies.buildLineDiscountResult(\n        line,\n        discountAmount\n      );\n      var total = MonetaryRounder.roundFinal(unitFinalPrice * quantity);\n      var taxesCalculation = LineCalculationDependencies.calculateTaxesForTotal(\n        line,\n        total\n      );\n      var taxesBreakdown = taxesCalculation.taxesBreakdown;\n      var totalTaxAmount = taxesCalculation.totalTaxAmount;\n      var subtotalBase = MonetaryRounder.roundFinal(total - totalTaxAmount);\n      var adjustedTaxesBreakdown = taxesBreakdown.map(function(taxBreakdown) {\n        return new MonetaryTaxBreakdownDTO(\n          taxBreakdown.tax_id,\n          taxBreakdown.name,\n          taxBreakdown.percentage,\n          subtotalBase,\n          taxBreakdown.amount,\n          taxBreakdown.surcharge\n        );\n      });\n\n      return new MonetaryLineResultDTO(\n        quantity,\n        unitBasePrice,\n        unitFinalPrice,\n        subtotalBase,\n        discountResult,\n        totalTaxAmount,\n        total,\n        adjustedTaxesBreakdown\n      );\n    };\n\n    FinalPriceLineCalculationStrategy.prototype._getUnitDiscountAmountInclTax = function(line) {\n      var discount = line.discount;\n\n      if (discount === null || typeof discount === 'undefined') {\n        return 0;\n      }\n\n      return discount.calculateDiscountAmount(line.unitPrice);\n    };\n\n    return FinalPriceLineCalculationStrategy;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('BasePriceLineCalculationStrategy', _BasePriceLineCalculationStrategy);\n\n  _BasePriceLineCalculationStrategy.$inject = [\n    'LineCalculationDependencies',\n    'MonetaryRounder',\n    'MonetaryLineResultDTO'\n  ];\n\n  function _BasePriceLineCalculationStrategy(\n    LineCalculationDependencies,\n    MonetaryRounder,\n    MonetaryLineResultDTO\n  ) {\n    function BasePriceLineCalculationStrategy() {}\n\n    BasePriceLineCalculationStrategy.prototype.calculate = function(line) {\n      var quantity = line.quantity;\n      var unitBasePriceBeforeDiscount = line.getUnitBasePriceBeforeDiscount();\n      var unitBasePrice = line.getUnitBasePrice();\n      var unitDiscountAmount = unitBasePriceBeforeDiscount - unitBasePrice;\n      var unitFinalPrice = LineCalculationDependencies.calculateUnitFinalPrice(\n        line,\n        unitBasePrice\n      );\n      var subtotalBase = MonetaryRounder.roundFinal(unitBasePrice * quantity);\n      var discountAmount = MonetaryRounder.roundFinal(unitDiscountAmount * quantity);\n      var discountResult = LineCalculationDependencies.buildLineDiscountResult(\n        line,\n        discountAmount\n      );\n      var taxesCalculation = LineCalculationDependencies.calculateTaxesForSubtotal(\n        line,\n        subtotalBase\n      );\n      var taxesBreakdown = taxesCalculation.taxesBreakdown;\n      var totalTaxAmount = taxesCalculation.totalTaxAmount;\n      var total = MonetaryRounder.roundFinal(subtotalBase + totalTaxAmount);\n\n      return new MonetaryLineResultDTO(\n        quantity,\n        unitBasePrice,\n        unitFinalPrice,\n        subtotalBase,\n        discountResult,\n        totalTaxAmount,\n        total,\n        taxesBreakdown\n      );\n    };\n\n    return BasePriceLineCalculationStrategy;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('FinalPriceDocumentCalculationStrategy', _FinalPriceDocumentCalculationStrategy);\n\n  _FinalPriceDocumentCalculationStrategy.$inject = [\n    'MonetaryRounder',\n    'MonetaryTaxBreakdownDTO',\n    'MonetaryDiscountResultDTO'\n  ];\n\n  function _FinalPriceDocumentCalculationStrategy(\n    MonetaryRounder,\n    MonetaryTaxBreakdownDTO,\n    MonetaryDiscountResultDTO\n  ) {\n    function FinalPriceDocumentCalculationStrategy() {\n      this._defaultStrategy = null;\n    }\n\n    FinalPriceDocumentCalculationStrategy.prototype.calculate = function(\n      lines,\n      lineResults,\n      documentDiscounts,\n      taxesBeforeDiscount,\n      eligibleSubtotalBeforeDiscount\n    ) {\n      var eligibleTotalBeforeDiscount = this._calculateEligibleTotalBeforeDiscount(\n        lines,\n        lineResults\n      );\n      var documentDiscountData = this._calculateDocumentDiscounts(\n        eligibleTotalBeforeDiscount,\n        documentDiscounts\n      );\n      var discountResults = documentDiscountData.results;\n      var totalDiscountInclTax = documentDiscountData.totalDiscount;\n\n      if (totalDiscountInclTax === 0) {\n        var taxesBreakdownWithoutDiscount = this._aggregateWithoutDiscount(lineResults);\n\n        return {\n          discountResults: discountResults,\n          totalDiscountAmount: 0,\n          taxesAfterDiscount: taxesBeforeDiscount,\n          taxesBreakdown: taxesBreakdownWithoutDiscount\n        };\n      }\n\n      var taxesBreakdown = this._aggregateWithFixedInclTaxDiscount(\n        lines,\n        lineResults,\n        totalDiscountInclTax,\n        eligibleTotalBeforeDiscount\n      );\n      var taxesAfterDiscount = this._calculateTaxesFromBreakdown(taxesBreakdown);\n      var totalTaxesReduction = MonetaryRounder.roundFinal(\n        taxesBeforeDiscount - taxesAfterDiscount\n      );\n      var totalDiscountAmount = MonetaryRounder.roundFinal(\n        totalDiscountInclTax - totalTaxesReduction\n      );\n\n      return {\n        discountResults: discountResults,\n        totalDiscountAmount: totalDiscountAmount,\n        taxesAfterDiscount: taxesAfterDiscount,\n        taxesBreakdown: taxesBreakdown\n      };\n    };\n\n    FinalPriceDocumentCalculationStrategy.prototype._calculateEligibleTotalBeforeDiscount = function(\n      lines,\n      lineResults\n    ) {\n      var total = 0;\n      var lineCount = Math.min(lines.length, lineResults.length);\n\n      for (var i = 0; i < lineCount; i++) {\n        if (lines[i].isDocumentDiscountEligible) {\n          total += lineResults[i].total;\n        }\n      }\n\n      return total;\n    };\n\n    FinalPriceDocumentCalculationStrategy.prototype._calculateDocumentDiscounts = function(\n      total,\n      documentDiscounts\n    ) {\n      if (total === 0) {\n        return {\n          results: [],\n          totalDiscount: 0\n        };\n      }\n\n      var results = [];\n      var remainingTotal = total;\n      var totalDiscount = 0;\n\n      documentDiscounts.forEach(function(discount) {\n        var rawAmount = discount.calculateDiscountAmount(remainingTotal);\n        var appliedAmount = MonetaryRounder.roundFinal(rawAmount);\n\n        if (Math.abs(appliedAmount) > Math.abs(remainingTotal)) {\n          appliedAmount = remainingTotal;\n        }\n\n        totalDiscount += appliedAmount;\n        remainingTotal = MonetaryRounder.roundFinal(remainingTotal - appliedAmount);\n\n        results.push(\n          new MonetaryDiscountResultDTO(\n            false,\n            null,\n            discount.amount,\n            appliedAmount\n          )\n        );\n      });\n\n      return {\n        results: results,\n        totalDiscount: totalDiscount\n      };\n    };\n\n    FinalPriceDocumentCalculationStrategy.prototype._aggregateWithFixedInclTaxDiscount = function(\n      lines,\n      lineResults,\n      totalDiscountInclTax,\n      eligibleTotalBeforeDiscount\n    ) {\n      var perLineDiscountAllocations = this._buildDiscountAllocationsByLine(\n        lines,\n        lineResults,\n        totalDiscountInclTax,\n        eligibleTotalBeforeDiscount\n      );\n      var taxAggregation = {};\n\n      lineResults.forEach(function(lineResult, lineIndex) {\n        var lineTotal = lineResult.total;\n\n        if (lineTotal === 0) {\n          return;\n        }\n\n        var lineDiscountInclTax = perLineDiscountAllocations[lineIndex];\n        var adjustedLineTotal = MonetaryRounder.roundFinal(\n          lineTotal - lineDiscountInclTax\n        );\n        var adjustmentRatio = adjustedLineTotal / lineTotal;\n\n        lineResult.taxes_breakdown.forEach(function(breakdown) {\n          var adjustedBase = MonetaryRounder.roundFinal(\n            breakdown.base * adjustmentRatio\n          );\n          var adjustedAmount = MonetaryRounder.roundFinal(\n            breakdown.amount * adjustmentRatio\n          );\n          var adjustedSurchargeAmount = 0;\n\n          if (breakdown.surcharge && typeof breakdown.surcharge === 'object') {\n            adjustedSurchargeAmount = MonetaryRounder.roundFinal(\n              breakdown.surcharge.amount * adjustmentRatio\n            );\n          }\n\n          var key = String(breakdown.tax_id);\n\n          if (!taxAggregation[key]) {\n            taxAggregation[key] = {\n              tax_id: breakdown.tax_id,\n              name: '',\n              percentage: 0,\n              base: 0,\n              amount: 0,\n              surcharge_percentage: null,\n              surcharge_amount: 0\n            };\n          }\n\n          taxAggregation[key].name = breakdown.name;\n          taxAggregation[key].percentage = breakdown.percentage;\n          taxAggregation[key].base += adjustedBase;\n          taxAggregation[key].amount += adjustedAmount;\n\n          if (breakdown.surcharge && typeof breakdown.surcharge === 'object') {\n            taxAggregation[key].surcharge_percentage = breakdown.surcharge.percentage;\n          }\n\n          taxAggregation[key].surcharge_amount += adjustedSurchargeAmount;\n        });\n      });\n\n      return Object.keys(taxAggregation).map(function(taxKey) {\n        var taxData = taxAggregation[taxKey];\n\n        return new MonetaryTaxBreakdownDTO(\n          taxData.tax_id,\n          taxData.name,\n          taxData.percentage,\n          MonetaryRounder.roundFinal(taxData.base),\n          MonetaryRounder.roundFinal(taxData.amount),\n          taxData.surcharge_percentage !== null\n            ? {\n              percentage: taxData.surcharge_percentage,\n              amount: MonetaryRounder.roundFinal(taxData.surcharge_amount)\n            }\n            : undefined\n        );\n      });\n    };\n\n    FinalPriceDocumentCalculationStrategy.prototype._buildDiscountAllocationsByLine = function(\n      lines,\n      lineResults,\n      totalDiscountInclTax,\n      eligibleTotalBeforeDiscount\n    ) {\n      var allocations = new Array(lineResults.length).fill(0);\n\n      if (totalDiscountInclTax === 0) {\n        return allocations;\n      }\n\n      var eligibleIndexes = [];\n      var lineCount = Math.min(lines.length, lineResults.length);\n\n      for (var i = 0; i < lineCount; i++) {\n        if (\n          lines[i].isDocumentDiscountEligible &&\n          lineResults[i].total !== 0\n        ) {\n          eligibleIndexes.push(i);\n        }\n      }\n\n      if (eligibleIndexes.length === 0) {\n        return allocations;\n      }\n\n      var remainingDiscount = totalDiscountInclTax;\n      var remainingEligibleTotal = eligibleTotalBeforeDiscount;\n\n      for (var j = 0; j < eligibleIndexes.length - 1; j++) {\n        var lineIndex = eligibleIndexes[j];\n        var lineTotal = lineResults[lineIndex].total;\n\n        if (remainingEligibleTotal === 0) {\n          break;\n        }\n\n        var lineDiscount = MonetaryRounder.roundFinal(\n          remainingDiscount * (lineTotal / remainingEligibleTotal)\n        );\n\n        if (Math.abs(lineDiscount) > Math.abs(lineTotal)) {\n          lineDiscount = lineTotal;\n        }\n\n        if (Math.abs(lineDiscount) > Math.abs(remainingDiscount)) {\n          lineDiscount = remainingDiscount;\n        }\n\n        allocations[lineIndex] = lineDiscount;\n        remainingDiscount = MonetaryRounder.roundFinal(\n          remainingDiscount - lineDiscount\n        );\n        remainingEligibleTotal = MonetaryRounder.roundFinal(\n          remainingEligibleTotal - lineTotal\n        );\n      }\n\n      var lastLineIndex = eligibleIndexes[eligibleIndexes.length - 1];\n      var lastLineTotal = lineResults[lastLineIndex].total;\n      allocations[lastLineIndex] = remainingDiscount >= 0\n        ? Math.min(remainingDiscount, lastLineTotal)\n        : Math.max(remainingDiscount, lastLineTotal);\n\n      return allocations;\n    };\n\n    FinalPriceDocumentCalculationStrategy.prototype._aggregateWithoutDiscount = function(\n      lineResults\n    ) {\n      var taxAggregation = {};\n\n      lineResults.forEach(function(lineResult) {\n        lineResult.taxes_breakdown.forEach(function(breakdown) {\n          var key = String(breakdown.tax_id);\n\n          if (!taxAggregation[key]) {\n            taxAggregation[key] = {\n              tax_id: breakdown.tax_id,\n              name: '',\n              percentage: 0,\n              base: 0,\n              amount: 0,\n              surcharge_percentage: null,\n              surcharge_amount: 0\n            };\n          }\n\n          taxAggregation[key].name = breakdown.name;\n          taxAggregation[key].percentage = breakdown.percentage;\n          taxAggregation[key].base += breakdown.base;\n          taxAggregation[key].amount += breakdown.amount;\n\n          if (breakdown.surcharge && typeof breakdown.surcharge === 'object') {\n            taxAggregation[key].surcharge_percentage = breakdown.surcharge.percentage;\n            taxAggregation[key].surcharge_amount += breakdown.surcharge.amount;\n          }\n        });\n      });\n\n      return Object.keys(taxAggregation).map(function(taxKey) {\n        var taxData = taxAggregation[taxKey];\n\n        return new MonetaryTaxBreakdownDTO(\n          taxData.tax_id,\n          taxData.name,\n          taxData.percentage,\n          MonetaryRounder.roundFinal(taxData.base),\n          MonetaryRounder.roundFinal(taxData.amount),\n          taxData.surcharge_percentage !== null\n            ? {\n              percentage: taxData.surcharge_percentage,\n              amount: MonetaryRounder.roundFinal(taxData.surcharge_amount)\n            }\n            : undefined\n        );\n      });\n    };\n\n    FinalPriceDocumentCalculationStrategy.prototype._calculateTaxesFromBreakdown = function(\n      taxesBreakdown\n    ) {\n      var totalTaxes = 0;\n\n      taxesBreakdown.forEach(function(taxBreakdown) {\n        totalTaxes += taxBreakdown.amount;\n\n        if (taxBreakdown.surcharge && typeof taxBreakdown.surcharge === 'object') {\n          totalTaxes += taxBreakdown.surcharge.amount;\n        }\n      });\n\n      return MonetaryRounder.roundFinal(totalTaxes);\n    };\n\n    return FinalPriceDocumentCalculationStrategy;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('BaseDocumentCalculationStrategy', _BaseDocumentCalculationStrategy);\n\n  _BaseDocumentCalculationStrategy.$inject = [\n    'MonetaryRounder',\n    'MonetaryTaxBreakdownDTO',\n    'MonetaryDiscountResultDTO',\n    'PercentageMonetaryDiscountDTO',\n    'FixedMonetaryDiscountDTO'\n  ];\n\n  function _BaseDocumentCalculationStrategy(\n    MonetaryRounder,\n    MonetaryTaxBreakdownDTO,\n    MonetaryDiscountResultDTO,\n    PercentageMonetaryDiscountDTO,\n    FixedMonetaryDiscountDTO\n  ) {\n    function BaseDocumentCalculationStrategy() {\n    }\n\n    BaseDocumentCalculationStrategy.prototype.calculate = function(\n      lines,\n      lineResults,\n      documentDiscounts,\n      taxesBeforeDiscount,\n      eligibleSubtotalBeforeDiscount\n    ) {\n      var documentDiscountData = this._calculateDocumentDiscounts(\n        eligibleSubtotalBeforeDiscount,\n        documentDiscounts\n      );\n\n      var discountResults = documentDiscountData.results;\n      var totalDiscountAmount = documentDiscountData.totalDiscount;\n\n      var taxesAfterDiscount = this._recalculateTaxesAfterDiscount(\n        lines,\n        lineResults,\n        taxesBeforeDiscount,\n        eligibleSubtotalBeforeDiscount,\n        totalDiscountAmount\n      );\n\n      var taxesBreakdown = this._aggregateTaxesBreakdown(\n        lines,\n        lineResults,\n        eligibleSubtotalBeforeDiscount,\n        totalDiscountAmount\n      );\n\n      return {\n        discountResults: discountResults,\n        totalDiscountAmount: totalDiscountAmount,\n        taxesAfterDiscount: taxesAfterDiscount,\n        taxesBreakdown: taxesBreakdown\n      };\n    };\n\n    BaseDocumentCalculationStrategy.prototype._calculateDocumentDiscounts = function(\n      subtotal,\n      documentDiscounts\n    ) {\n      if (subtotal === 0) {\n        return {\n          results: [],\n          totalDiscount: 0\n        };\n      }\n\n      var results = [];\n      var remainingSubtotal = subtotal;\n      var totalDiscount = 0;\n\n      documentDiscounts.forEach(function(discount) {\n        var rawAmount = discount.calculateDiscountAmount(remainingSubtotal);\n        var appliedAmount = MonetaryRounder.roundFinal(rawAmount);\n\n        totalDiscount += appliedAmount;\n        remainingSubtotal = MonetaryRounder.roundFinal(\n          remainingSubtotal - appliedAmount\n        );\n\n        var isPercentage = discount instanceof PercentageMonetaryDiscountDTO;\n\n        results.push(\n          new MonetaryDiscountResultDTO(\n            isPercentage,\n            isPercentage ? discount.percentage : null,\n            discount instanceof FixedMonetaryDiscountDTO ? discount.amount : null,\n            appliedAmount\n          )\n        );\n      });\n\n      return {\n        results: results,\n        totalDiscount: totalDiscount\n      };\n    };\n\n    BaseDocumentCalculationStrategy.prototype._recalculateTaxesAfterDiscount = function(\n      lines,\n      lineResults,\n      taxesBeforeDiscount,\n      eligibleSubtotalBeforeDiscount,\n      totalDiscountAmount\n    ) {\n      if (totalDiscountAmount === 0) {\n        return taxesBeforeDiscount;\n      }\n\n      if (eligibleSubtotalBeforeDiscount === 0) {\n        return 0;\n      }\n\n      var discountRatio = totalDiscountAmount / eligibleSubtotalBeforeDiscount;\n      var totalTaxes = 0;\n      var lineCount = Math.min(lines.length, lineResults.length);\n\n      for (var i = 0; i < lineCount; i++) {\n        var lineInput = lines[i];\n        var lineResult = lineResults[i];\n\n        if (lineResult.taxable_base === 0) {\n          continue;\n        }\n\n        var adjustedBaseRatio = 1;\n\n        if (lineInput.isDocumentDiscountEligible) {\n          var lineDiscountPortion = MonetaryRounder.roundFinal(\n            lineResult.taxable_base * discountRatio\n          );\n          var adjustedBase = MonetaryRounder.roundFinal(\n            lineResult.taxable_base - lineDiscountPortion\n          );\n\n          adjustedBaseRatio = adjustedBase / lineResult.taxable_base;\n        }\n\n        lineResult.taxes_breakdown.forEach(function(breakdown) {\n          var taxAmount = MonetaryRounder.roundFinal(\n            breakdown.amount * adjustedBaseRatio\n          );\n          var surchargeAmount = 0;\n\n          if (breakdown.surcharge && typeof breakdown.surcharge === 'object') {\n            surchargeAmount = MonetaryRounder.roundFinal(\n              breakdown.surcharge.amount * adjustedBaseRatio\n            );\n          }\n\n          totalTaxes += taxAmount + surchargeAmount;\n        });\n      }\n\n      return totalTaxes;\n    };\n\n    BaseDocumentCalculationStrategy.prototype._aggregateTaxesBreakdown = function(\n      lines,\n      lineResults,\n      eligibleSubtotalBeforeDiscount,\n      totalDiscountAmount\n    ) {\n      if (totalDiscountAmount === 0) {\n        var taxAggregationWithoutDiscount = {};\n\n        lineResults.forEach(function(lineResult) {\n          lineResult.taxes_breakdown.forEach(function(breakdown) {\n            var surchargeAmount =\n              breakdown.surcharge && typeof breakdown.surcharge === 'object'\n                ? breakdown.surcharge.amount\n                : 0;\n\n            if (breakdown.base === 0 && breakdown.amount === 0 && surchargeAmount === 0) {\n              return;\n            }\n\n            var key = String(breakdown.tax_id);\n\n            if (!taxAggregationWithoutDiscount[key]) {\n              taxAggregationWithoutDiscount[key] = {\n                tax_id: breakdown.tax_id,\n                name: '',\n                percentage: 0,\n                base: 0,\n                amount: 0,\n                surcharge_percentage: null,\n                surcharge_amount: 0\n              };\n            }\n\n            taxAggregationWithoutDiscount[key].name = breakdown.name;\n            taxAggregationWithoutDiscount[key].percentage = breakdown.percentage;\n            taxAggregationWithoutDiscount[key].base += breakdown.base;\n            taxAggregationWithoutDiscount[key].amount += breakdown.amount;\n\n            if (breakdown.surcharge && typeof breakdown.surcharge === 'object') {\n              taxAggregationWithoutDiscount[key].surcharge_percentage =\n                breakdown.surcharge.percentage;\n              taxAggregationWithoutDiscount[key].surcharge_amount +=\n                breakdown.surcharge.amount;\n            }\n          });\n        });\n\n        return Object.keys(taxAggregationWithoutDiscount).map(function(taxKey) {\n          var taxData = taxAggregationWithoutDiscount[taxKey];\n\n          return new MonetaryTaxBreakdownDTO(\n            taxData.tax_id,\n            taxData.name,\n            taxData.percentage,\n            MonetaryRounder.roundFinal(taxData.base),\n            MonetaryRounder.roundFinal(taxData.amount),\n            taxData.surcharge_percentage !== null\n              ? {\n                percentage: taxData.surcharge_percentage,\n                amount: MonetaryRounder.roundFinal(taxData.surcharge_amount)\n              }\n              : undefined\n          );\n        });\n      }\n\n      if (eligibleSubtotalBeforeDiscount === 0) {\n        return [];\n      }\n\n      var discountRatio = totalDiscountAmount / eligibleSubtotalBeforeDiscount;\n      var taxAggregation = {};\n      var lineCount = Math.min(lines.length, lineResults.length);\n\n      for (var i = 0; i < lineCount; i++) {\n        var lineInput = lines[i];\n        var lineResult = lineResults[i];\n\n        if (lineResult.taxable_base === 0) {\n          continue;\n        }\n\n        var adjustedBase = lineResult.taxable_base;\n        var adjustedBaseRatio = 1;\n\n        if (lineInput.isDocumentDiscountEligible) {\n          var lineDiscountPortion = MonetaryRounder.roundFinal(\n            lineResult.taxable_base * discountRatio\n          );\n          adjustedBase = MonetaryRounder.roundFinal(\n            lineResult.taxable_base - lineDiscountPortion\n          );\n          adjustedBaseRatio = adjustedBase / lineResult.taxable_base;\n        }\n\n        lineResult.taxes_breakdown.forEach(function(breakdown) {\n          var taxAmount = MonetaryRounder.roundFinal(\n            breakdown.amount * adjustedBaseRatio\n          );\n          var surchargeAmount = 0;\n\n          if (breakdown.surcharge && typeof breakdown.surcharge === 'object') {\n            surchargeAmount = MonetaryRounder.roundFinal(\n              breakdown.surcharge.amount * adjustedBaseRatio\n            );\n          }\n\n          var key = String(breakdown.tax_id);\n\n          if (!taxAggregation[key]) {\n            taxAggregation[key] = {\n              tax_id: breakdown.tax_id,\n              name: '',\n              percentage: 0,\n              base: 0,\n              amount: 0,\n              surcharge_percentage: null,\n              surcharge_amount: 0\n            };\n          }\n\n          taxAggregation[key].name = breakdown.name;\n          taxAggregation[key].percentage = breakdown.percentage;\n          taxAggregation[key].base += adjustedBase;\n          taxAggregation[key].amount += taxAmount;\n\n          if (breakdown.surcharge && typeof breakdown.surcharge === 'object') {\n            taxAggregation[key].surcharge_percentage =\n              breakdown.surcharge.percentage;\n            taxAggregation[key].surcharge_amount += surchargeAmount;\n          }\n        });\n      }\n\n      return Object.keys(taxAggregation).map(function(taxKey) {\n        var taxData = taxAggregation[taxKey];\n\n        return new MonetaryTaxBreakdownDTO(\n          taxData.tax_id,\n          taxData.name,\n          taxData.percentage,\n          MonetaryRounder.roundFinal(taxData.base),\n          MonetaryRounder.roundFinal(taxData.amount),\n          taxData.surcharge_percentage !== null\n            ? {\n              percentage: taxData.surcharge_percentage,\n              amount: MonetaryRounder.roundFinal(taxData.surcharge_amount)\n            }\n            : undefined\n        );\n      });\n    };\n\n    return BaseDocumentCalculationStrategy;\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                                PosOrder, PosOrderProductVariant, apiResolver, $translate, Utils, PAYMENT_METHOD_GATEWAYS,\n                                MonetaryRounder,\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.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.deletePosOrderProductVariantFull = deletePosOrderProductVariantFull;\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.getPriceByPrices = getPriceByPrices;\n      vm.getTotalAssigned = getTotalAssigned;\n      vm.getTotalDevolutionCardAmount = getTotalDevolutionCardAmount;\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.getMaxApplicableBalanceDiscount = getMaxApplicableBalanceDiscount;\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.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.showSaleStoreCommentIcon = showSaleStoreCommentIcon;\n      vm.showSaleStoreCommentDialog = showSaleStoreCommentDialog;\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.discountChanged = discountChanged;\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      vm.showSplitLineButton = showSplitLineButton;\n      vm.splitLine = splitLine;\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 saleData = {\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          var sale = new PosOrder(saleData);\n          angular.extend(sale, saleData);\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              discount_incl_tax = Math.abs(parseFloat(olderSale.devolution_of.discount_incl_tax));\n            } else {\n              total = Math.abs(parseFloat(olderSale.total));\n              discount_incl_tax = Math.abs(parseFloat(olderSale.discount_incl_tax));\n            }\n            // Use the draft's balance_discount: the backend already recalculates it\n            // proportionally to the returnable items, so for a second devolution of\n            // 87 remaining items this will be 3.51 instead of the full 4.04.\n            balance_discount = Math.abs(parseFloat(olderSale.balance_discount));\n            sale.original_balance_discount = balance_discount;\n            sale.original_total_without_discount = total + balance_discount + discount_incl_tax;\n\n            // Compute devolution_base_total using the same price formula as\n            // updatePosOrderProductVariantDiscountPrices so both sides of the\n            // proportion always use identical values, regardless of how many\n            // decimal places the API serialises discount_price_incl_tax with.\n            sale.devolution_base_total = 0;\n            olderSale.pos_order_product_variants.forEach(function(popv) {\n              var unitPrice;\n              if (popv.custom_price_incl_tax != null) {\n                unitPrice = Math.abs(parseFloat(popv.custom_price_incl_tax));\n              } else if (popv.discount != null) {\n                unitPrice = parseFloat(popv.price_incl_tax || 0) * (1.0 - parseFloat(popv.discount || 0) / 100.0);\n              } else {\n                unitPrice = parseFloat(popv.price_incl_tax || 0);\n              }\n              sale.devolution_base_total += Math.abs(parseFloat(popv.amount || 0)) * unitPrice;\n            });\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        var saleData = {\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        var sale = new PosOrder(saleData);\n        angular.extend(sale, saleData);\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      function mergeServerResponseIntoSale(sale, response) {\n        var previousSaleSnapshot = angular.copy(sale);\n        var mergedSaleData = angular.extend({}, previousSaleSnapshot, response);\n        var rehydratedSale = new PosOrder(mergedSaleData);\n        var uiFieldsToKeep = [\n          'title',\n          'productAutocomplete',\n          'customerAutocomplete',\n          'currentView',\n          'currentViewType',\n          'in_stock',\n          'successfullyPaid',\n          'paymentValue',\n          'promotions',\n          'isFetching',\n          'paying',\n          'available_payment_methods',\n          'generateDevolutionCard',\n          'generateDevolutionCardClicked',\n          'refundByPaymentMethod',\n          'refundByPaymentMethodCash',\n          'refundByPaymentMethodCard',\n          'devolution_of_object',\n          'original_balance_discount',\n          'original_total_without_discount',\n          'devolution_base_total',\n          'selectedProduct',\n          'customer_discount_applied',\n          'showTaxesDict',\n          'isDevolution'\n        ];\n\n        angular.extend(sale, rehydratedSale);\n\n        uiFieldsToKeep.forEach(function(field) {\n          if (Object.prototype.hasOwnProperty.call(previousSaleSnapshot, field)\n            && !Object.prototype.hasOwnProperty.call(response || {}, field)) {\n            sale[field] = previousSaleSnapshot[field];\n          }\n        });\n\n        if (typeof sale.isDevolution === 'undefined' || sale.isDevolution === null) {\n          sale.isDevolution = !!sale.is_devolution;\n        }\n\n        return sale;\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      function deletePosOrderProductVariantFull(sale, index) {\n        sale.pos_order_product_variants.splice(index, 1);\n        vm.hasBundle(sale);\n        amountChanged(sale);\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        var total = sale ? sale.getTotal() : 0;\n        return !!(\n          sale &&\n          (total > 0.00 || sale.balance_discount) &&\n          sale.customerAutocomplete &&\n          sale.customerAutocomplete.selectedItem &&\n          vm.inventoryConfiguration &&\n          vm.inventoryConfiguration.default_contact_balance_ratio_active &&\n          getMaxApplicableBalanceDiscount(sale) > 0\n        );\n      }\n\n      function applyOrRemoveBalanceDiscount(sale) {\n        var total = sale.getTotal();\n        if (sale.balance_discount === undefined || sale.balance_discount === null || sale.balance_discount === 0.00) {\n          sale.balance_discount = getMaxApplicableBalanceDiscount(sale);\n          if (sale.balance_discount <= 0) {\n            return;\n          }\n          sale.discountAsPercentage = sale.balance_discount != total ? sale.balance_discount / total : 0.;\n        } else {\n          delete sale.balance_discount;\n          delete sale.discountAsPercentage;\n        }\n        updateSale(sale);\n      }\n\n      function getMaxApplicableBalanceDiscount(sale) {\n        if (!sale) {\n          return 0;\n        }\n\n        var selectedCustomer = sale.customerAutocomplete\n          ? sale.customerAutocomplete.selectedItem\n          : null;\n        if (!selectedCustomer) {\n          return 0;\n        }\n\n        var customerBalance = getNumericValue(selectedCustomer.balance);\n        if (customerBalance <= 0) {\n          return 0;\n        }\n\n        var currentDiscount = getNumericValue(sale.balance_discount);\n        var totalWithoutDiscount = Utils.roundPrice(\n          Math.max(getNumericValue(sale.getTotal()) + currentDiscount, 0)\n        );\n        if (totalWithoutDiscount <= 0) {\n          return 0;\n        }\n\n        return getMaxApplicableBalanceDiscountFromTotal(\n          totalWithoutDiscount,\n          customerBalance\n        );\n      }\n\n      function getMaxApplicableBalanceDiscountFromTotal(totalWithoutDiscount, customerBalance) {\n        var maxApplicableAmount = Utils.roundPrice(\n          Math.max(Math.min(totalWithoutDiscount, customerBalance), 0)\n        );\n        if (maxApplicableAmount <= 0) {\n          return 0;\n        }\n\n        var balanceSpendMultiple = getBalanceSpendMultiple();\n        if (balanceSpendMultiple !== null) {\n          maxApplicableAmount = floorToMultiple(\n            maxApplicableAmount,\n            balanceSpendMultiple\n          );\n        }\n\n        if (maxApplicableAmount <= 0) {\n          return 0;\n        }\n\n        var minimumBalanceSpendAmount = getMinimumBalanceSpendAmount();\n        if (\n          minimumBalanceSpendAmount !== null &&\n          maxApplicableAmount < minimumBalanceSpendAmount\n        ) {\n          return 0;\n        }\n\n        return Utils.roundPrice(maxApplicableAmount);\n      }\n\n      function getMinimumBalanceSpendAmount() {\n        if (!vm.inventoryConfiguration) {\n          return null;\n        }\n\n        var minimumBalanceSpendAmount = getNumericValue(\n          vm.inventoryConfiguration.minimum_balance_spend_amount\n        );\n        return minimumBalanceSpendAmount > 0 ? minimumBalanceSpendAmount : null;\n      }\n\n      function getBalanceSpendMultiple() {\n        if (!vm.inventoryConfiguration) {\n          return null;\n        }\n\n        var balanceSpendMultiple = getNumericValue(\n          vm.inventoryConfiguration.balance_spend_multiple\n        );\n        return balanceSpendMultiple > 0 ? balanceSpendMultiple : null;\n      }\n\n      function floorToMultiple(amount, multiple) {\n        var multipleCents = toCents(multiple);\n        if (multipleCents <= 0) {\n          return Utils.roundPrice(amount);\n        }\n\n        var flooredAmountCents = Math.floor(toCents(amount) / multipleCents) * multipleCents;\n        return Utils.roundPrice(flooredAmountCents / 100);\n      }\n\n      function toCents(amount) {\n        return Math.round(getNumericValue(amount) * 100);\n      }\n\n      function getNumericValue(value) {\n        var normalizedValue = angular.isString(value) ? value.replace(',', '.') : value;\n        var parsedValue = parseFloat(normalizedValue);\n        if (isNaN(parsedValue)) {\n          return 0;\n        }\n\n        return Utils.roundPrice(parsedValue);\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            parameters:{\n              forceCustomer: true,\n              forceNaturalPersonType: true\n            }\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 showSaleStoreCommentIcon(posOrderProductVariant) {\n        if (!posOrderProductVariant) {\n          return false;\n        }\n\n        if (typeof posOrderProductVariant.sale_store_comment !== 'string') {\n          return false;\n        }\n\n        return posOrderProductVariant.sale_store_comment.trim().length > 0;\n      }\n\n      function showSaleStoreCommentDialog(posOrderProductVariant, ev) {\n        if (!showSaleStoreCommentIcon(posOrderProductVariant)) {\n          return;\n        }\n\n        var dialog = $mdDialog.alert()\n          .parent(angular.element(document.body))\n          .title($filter('translate')('SALES.STORE_SALE_COMMENT_TITLE'))\n          .textContent(posOrderProductVariant.sale_store_comment)\n          .targetEvent(ev)\n          .clickOutsideToClose(true)\n          .ok($filter('translate')('GENERAL.CLOSE'));\n\n        $mdDialog.show(dialog);\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       * 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      function checkBalanceDiscount(sale, total) {\n        if (sale.customerAutocomplete.selectedItem === null || total < 0) {\n          return Utils.roundPrice(total - sale.balance_discount);\n        }\n\n        var customerBalance = getNumericValue(sale.customerAutocomplete.selectedItem.balance);\n        sale.balance_discount = getMaxApplicableBalanceDiscountFromTotal(\n          Utils.roundPrice(Math.max(total, 0)),\n          customerBalance\n        );\n\n        if (sale.balance_discount <= 0) {\n          delete sale.balance_discount;\n          delete sale.discountAsPercentage;\n          return Utils.roundPrice(total);\n        }\n\n        sale.discountAsPercentage = sale.balance_discount != total ? sale.balance_discount / total : 0.;\n        return Utils.roundPrice(total - sale.balance_discount);\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.getTotal() + 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.getTotal() + 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.getTotal() + 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.getTotal() + 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.getTotal() + 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            var queryParams = {'fields': 'id,autocode,pos_order_invoices,register,source_warehouse'};\n            if(vm.has_gateway_payment){\n              queryParams['fields'] += ',pos_order_payment_methods';\n            }\n            vm.createPosOrderApiVersion.save(\n              queryParams,\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          mergeServerResponseIntoSale(sale, results);\n          sale.generateDevolutionCardClicked = false;\n          sale.taxes = {};\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_04002_REGISTER_CLOSED) {\n            openRegister();\n            $mdToast.show($mdToast.simple()\n              .textContent($filter('translate')('ERRORS.ERROR_04002_REGISTER_CLOSED'))\n              .position('top right')\n            );\n            sale.paying = false;\n          }\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          mergeServerResponseIntoSale(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 if (results.Error === ERROR_CODES.ERROR_04002_REGISTER_CLOSED) {\n          openRegister();\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('ERRORS.ERROR_04002_REGISTER_CLOSED'))\n            .position('top right')\n            );\n          sale.paying = false;\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.getTotal() <= 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          showCustomerAccumulatedBalance: vm.inventoryConfiguration.default_contact_balance_ratio_active\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        // For devolutions with a loyalty balance discount, recalculate the balance_discount\n        // proportionally to the items actually being returned before updating totals.\n        // Only items that belong to the original sale (devolution_of is set) and have\n        // negative amount count towards the proration; newly added items or items from\n        // other sales are not part of the original balance_discount.\n        if (sale.isDevolution && sale.original_balance_discount && sale.devolution_base_total) {\n          var returnedItemsTotal = 0;\n          sale.pos_order_product_variants.forEach(function(popv) {\n            if (!popv.devolution_of) {\n              return;\n            }\n            var amount = parseFloat(popv.amount || 0);\n            if (amount >= 0) {\n              return;\n            }\n            var unitPrice;\n            if (popv.custom_price_incl_tax != null) {\n              unitPrice = Math.abs(parseFloat(popv.custom_price_incl_tax));\n            } else if (popv.discount != null) {\n              unitPrice = parseFloat(popv.price_incl_tax || 0) * (1.0 - parseFloat(popv.discount || 0) / 100.0);\n            } else {\n              unitPrice = parseFloat(popv.price_incl_tax || 0);\n            }\n            returnedItemsTotal += Math.abs(amount) * unitPrice;\n          });\n          var proportion = sale.devolution_base_total > 0\n            ? Math.min(returnedItemsTotal / sale.devolution_base_total, 1)\n            : 0;\n          sale.balance_discount = -Utils.roundPrice(proportion * sale.original_balance_discount);\n        }\n\n        // Recalculate totals\n        sale.updateTotals();\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.getTotal() < 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          posOrderProductVariant.fetchingPromotion = true;\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          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          sale.pos_order_product_variants.forEach(function(popv){\n            popv.fetchingPromotion = false;\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(sale, 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(sale, 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.isSplitted !== popv2.isSplitted) {\n          return false;\n        }\n        if (popv1.discount_price_incl_tax !== popv2.discount_price_incl_tax ||\n        popv1.custom_price_incl_tax !== popv2.custom_price_incl_tax) {\n          return false;\n        }\n        if(popv1.product_name !== popv2.product_name){\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                mergeServerResponseIntoSale(sale, result);\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                mergeServerResponseIntoSale(sale, result);\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        if (popv.custom_price_incl_tax !== undefined && popv.custom_price_incl_tax !== null && !isNaN(popv.custom_price_incl_tax)) {\n          popv.custom_price_incl_tax = MonetaryRounder.roundFinal(popv.custom_price_incl_tax);\n        }\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 = Utils.roundPrice(sale.getTotal());\n        if (avoidConsumedGiftCards) {\n          total = Utils.roundPrice(total + getTotalConsumedGiftCards(sale));\n        }\n\n        var totalAssigned = getTotalAssigned(sale, false, true);\n        return Utils.roundPrice(Math.max(total - totalAssigned, 0));\n      }\n\n      function getBalance(sale) {\n        var total = Utils.roundPrice(sale.getTotal());\n        total = Utils.roundPrice(total + getTotalConsumedGiftCards(sale));\n\n        return Utils.roundPrice(Math.max(getTotalAssigned(sale) - total, 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.getTotal() < 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.getTotal() >= 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.getTotal() * -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.getTotal());\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.getTotal() + 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        sale.updateTotals();\n        var pendingToAssigned = vm.getPendingToAssigned(sale, true);\n\n        if (!posOrderProductVariant) {\n          getConsumedGiftCards(sale).forEach(function(popv) {\n            var total = Utils.roundPrice(popv.getTotal(true, true, sale ? sale.is_v2 : false)) * -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 = Utils.roundPrice(posOrderProductVariant.getTotal(true, true, sale ? sale.is_v2 : false));\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 += Utils.roundPrice(popv.getTotal(true, true, sale ? sale.is_v2 : false)) * -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        vm.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, 6, '%').then(function(value) {\n            posOrderProductVariant.discount = MonetaryRounder.roundUnitBase(value);\n            vm.updateSale(sale, true);\n          }, function() {\n            // Nothing to do\n          });\n        }\n      }\n\n      function discountChanged(sale, posOrderProductVariant) {\n        var discountValue = parseFloat(\n          angular.isString(posOrderProductVariant.discount)\n            ? posOrderProductVariant.discount.replace(',', '.')\n            : posOrderProductVariant.discount\n        );\n\n        if (posOrderProductVariant.discount !== undefined && posOrderProductVariant.discount !== null && !isNaN(discountValue)) {\n          posOrderProductVariant.discount = MonetaryRounder.roundUnitBase(discountValue);\n        }\n        vm.updateSale(sale, true);\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      function showSplitLineButton(popv){\n        return !popv.isSplitted && !popv.promotion && !popv.fetchingPromotion && Math.abs(popv.amount) > 1;\n      }\n      \n      function splitLine(sale, popv, $event){\n        if(!showSplitLineButton(popv)){\n          return;\n        }\n        var amount = popv.amount > 0 ? 1 : -1;\n        popv.amount -= amount;\n        var newPopv = angular.copy(popv);\n        newPopv.isSplitted = true;\n        newPopv.id = null;\n        newPopv.amount = amount;\n        sale.pos_order_product_variants.push(newPopv);\n        updateSale(sale);\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.showToggleValidityDialog = showToggleValidityDialog;\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          parameters:{\n            forceCustomer: true,\n            forceNaturalPersonType: true\n          }\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 showToggleValidityDialog(giftCard) {\n      $mdDialog.show({\n        controller: 'ToggleValidityDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/sale/views/gift-cards/dialogs/toggle-validity/toggle-validity-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        locals: {\n          giftCard: giftCard\n        }\n      }).then(function () {\n        getGridGiftCardsPage();\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 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: '<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        actions: {\n          displayName: $filter('translate')('GIFT_CARDS.ACTIONS'),\n          headerTooltip: $filter('translate')('GIFT_CARDS.ACTIONS'),\n          field: 'actions',\n          permission: Session.hasPermission('sale.gift-cards.update'),\n          enableSorting: false,\n          enableColumnMenu: false,\n          enableHiding: false,\n          enablePinning: false,\n          enableColumnMoving: false,\n          pinnedRight: true,\n          minWidth: 80,\n          width: 130,\n          cellTemplate: '<div class=\"cell-right full-width layout-row layout-align-end-center\">' +\n            '<md-menu>' +\n            '  <md-button class=\"md-icon-button\" ng-click=\"$mdMenu.open($event)\" aria-label=\"{{ \\'GIFT_CARDS.ACTIONS\\' | translate }}\">' +\n            '    <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>' +\n            '  </md-button>' +\n            '  <md-menu-content width=\"3\">' +\n            '    <md-menu-item>' +\n            '      <md-button ng-click=\"grid.appScope.vm.showToggleValidityDialog(row.entity)\">' +\n            '        <span ng-if=\"row.entity.is_valid\" translate=\"GIFT_CARDS.MARK_AS_INVALID\"></span>' +\n            '        <span ng-if=\"!row.entity.is_valid\" translate=\"GIFT_CARDS.MARK_AS_VALID\"></span>' +\n            '      </md-button>' +\n            '    </md-menu-item>' +\n            '    <md-menu-item ng-if=\"row.entity.is_voucher\">' +\n            '      <md-button ng-click=\"grid.appScope.vm.printGiftCard(row.entity)\">' +\n            '        <md-icon md-svg-src=\"assets/images/custom-material-design-icons/printer-pos-outline.9f86b6d1.svg\" class=\"mr-8\"></md-icon>' +\n            '        <span translate=\"GIFT_CARDS.PRINT_VOUCHER\"></span>' +\n            '      </md-button>' +\n            '    </md-menu-item>' +\n            '  </md-menu-content>' +\n            '</md-menu>' +\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 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          vm.loading = false;\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 + '::UIGridSaleGiftCardsControllerV2', JSON.stringify(vm.status));\n    }\n\n    function loadStatus() {\n      var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::UIGridSaleGiftCardsControllerV2'));\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        // Skip non-permitted or synthetic columns (those without a visible property)\n        if (!column.permission || column.visible === undefined) {\n          return;\n        }\n        if (!column.visible) {\n          all = false;\n        } else {\n          fields += column.field + ',';\n        }\n      });\n\n      // Always include is_valid as it is required by the actions cell template\n      if (!all && fields.indexOf('is_valid') === -1) {\n        fields += 'is_valid,';\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(function () {\n  'use strict';\n\n  angular\n    .module('app.public-registration', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider) {\n    $stateProvider\n      .state('public_registration', {\n        url: '/public-registration/:uid',\n        views: {\n          'main@': {\n            templateUrl: 'app/core/layouts/content-only.html',\n            controller: 'MainController as vm'\n          },\n          'content@public_registration': {\n            templateUrl: 'app/main/apps/public-registration/views/public-registration/public-registration.html',\n            controller: 'PublicRegistrationController',\n            controllerAs: 'vm'\n          }\n        },\n        bodyClass: 'public-registration'\n      })\n      .state('app.public_registration_management', {\n        parent: 'app.inventory.configuration',\n        url: '/contracts',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/public-registration/views/contract-management/contract-management.html',\n            controller: 'ContractManagementController as vm'\n          }\n        },\n        bodyClass: 'public-registration-contract-management'\n      })\n      .state('app.public_registration_management_legacy', {\n        url: '/public-registration/contracts',\n        onEnter: ['$state', function ($state) {\n          $state.go('app.public_registration_management');\n        }],\n        bodyClass: 'public-registration-contract-management'\n      })\n      .state('app.location_registration_assets', {\n        url: '/public-registration/location-assets/:warehouseId',\n        onEnter: ['$state', '$stateParams', function ($state, $stateParams) {\n          if ($stateParams.warehouseId) {\n            $state.go('app.inventory.warehouses.warehouse.contract', { id: $stateParams.warehouseId });\n            return;\n          }\n          $state.go('app.inventory.warehouses');\n        }],\n        bodyClass: 'public-registration-location-assets'\n      });\n\n    $translatePartialLoaderProvider.addPart('app/main/apps/public-registration');\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.public-registration')\n    .controller('PublicRegistrationController', PublicRegistrationController);\n\n  /** @ngInject */\n  function PublicRegistrationController(PublicRegistrationApiService, $stateParams, $translate, $timeout, $scope) {\n    var vm = this;\n    var supportedLanguages = ['es', 'en', 'ca', 'fr'];\n    var successResetPromise = null;\n    var turnstileWidgetId = null;\n    var turnstileCallbacksInitialized = false;\n    var turnstileScriptId = 'public-registration-turnstile-script';\n    var pendingFormForTurnstile = null;\n    var waitTurnstilePromise = null;\n\n    vm.uid = $stateParams.uid;\n    vm.formData = {};\n    vm.formConfig = {};\n    vm.languages = {\n      en: {\n        title: 'English',\n        translation: 'TOOLBAR.ENGLISH',\n        code: 'en',\n        flag: 'us'\n      },\n      es: {\n        title: 'Español',\n        translation: 'TOOLBAR.SPANISH',\n        code: 'es',\n        flag: 'es'\n      },\n      ca: {\n        title: 'Català',\n        translation: 'TOOLBAR.CATALAN',\n        code: 'ca',\n        flag: 'ca'\n      },\n      fr: {\n        title: 'Français',\n        translation: 'TOOLBAR.FRENCH',\n        code: 'fr',\n        flag: 'fr'\n      }\n    };\n    vm.currentLanguage = 'es';\n    vm.isSuccess = false;\n    vm.showSuccessCard = false;\n    vm.error = null;\n    vm.isReady = false;\n    vm.showContract = false;\n    vm.hasSignature = false;\n    vm.clearSignature = clearSignature;\n    vm.changeLanguage = changeLanguage;\n    vm.toggleContract = toggleContract;\n    vm.submit = submit;\n    vm.load = load;\n\n    initialize();\n\n    function initialize() {\n      $scope.$on('$destroy', function () {\n        if (successResetPromise) {\n          $timeout.cancel(successResetPromise);\n        }\n        if (waitTurnstilePromise) {\n          $timeout.cancel(waitTurnstilePromise);\n        }\n        delete window.onPublicRegistrationTurnstileSuccess;\n        delete window.onPublicRegistrationTurnstileExpired;\n      });\n      if (vm.uid) {\n        load(vm.uid);\n      }\n    }\n\n    function load(uid) {\n      vm.uid = uid;\n      return PublicRegistrationApiService.getForm(uid).then(function (response) {\n        vm.formConfig = response.data;\n        changeLanguage(vm.formConfig.contract_language);\n        vm.isReady = true;\n        vm.formData.challenge_token = vm.formConfig.challenge_token;\n        vm.formData.turnstile_token = '';\n        vm.formData.website = '';\n        vm.formData.marketing_accepted = false;\n        vm.formData.contract_accepted = false;\n        initializeTurnstileCallbacks();\n        waitAndRenderTurnstile();\n        $timeout(initializeSignatureCanvas);\n      }).catch(function () {\n        vm.isReady = false;\n        vm.error = 'PUBLIC_REGISTRATION.UNAVAILABLE';\n      });\n    }\n\n    function submit(form) {\n      vm.error = null;\n      if (form && angular.isFunction(form.$setSubmitted)) {\n        form.$setSubmitted();\n      }\n      if (form && form.$invalid) {\n        return;\n      }\n      if (!vm.isReady || !vm.formData.contract_accepted || !vm.formData.signature_data) {\n        return;\n      }\n      if (vm.formConfig.turnstile_site_key && !vm.formData.turnstile_token) {\n        pendingFormForTurnstile = form || null;\n        if (window.turnstile && turnstileWidgetId !== null) {\n          window.turnstile.execute(turnstileWidgetId);\n        } else {\n          vm.error = 'PUBLIC_REGISTRATION.TURNSTILE_REQUIRED';\n        }\n        return;\n      }\n      return PublicRegistrationApiService.submit(vm.uid, vm.formData).then(function () {\n        vm.isSuccess = true;\n        vm.showSuccessCard = true;\n        if (successResetPromise) {\n          $timeout.cancel(successResetPromise);\n        }\n        successResetPromise = $timeout(function () {\n          vm.showSuccessCard = false;\n          vm.isSuccess = false;\n          resetForm(form);\n          $timeout(initializeSignatureCanvas);\n        }, 3000);\n      }).catch(function () {\n        vm.error = 'PUBLIC_REGISTRATION.SUBMIT_FAILED';\n      });\n    }\n\n    function toggleContract() {\n      vm.showContract = !vm.showContract;\n    }\n\n    function clearSignature() {\n      var canvas = document.getElementById('public-registration-signature-canvas');\n      if (!canvas) {\n        return;\n      }\n\n      var context = canvas.getContext('2d');\n      context.clearRect(0, 0, canvas.width, canvas.height);\n      vm.hasSignature = false;\n      vm.formData.signature_data = '';\n    }\n\n    function changeLanguage(langKey) {\n      vm.currentLanguage = getSupportedLanguage(langKey);\n      $translate.use(vm.currentLanguage);\n    }\n\n    function resetForm(form) {\n      vm.formData = {\n        challenge_token: vm.formConfig.challenge_token,\n        turnstile_token: '',\n        website: '',\n        marketing_accepted: false,\n        contract_accepted: false\n      };\n      resetTurnstileWidget();\n      clearSignature();\n      if (form) {\n        form.$setPristine();\n        form.$setUntouched();\n      }\n    }\n\n    function initializeSignatureCanvas() {\n      var canvas = document.getElementById('public-registration-signature-canvas');\n      if (!canvas || canvas.dataset.initialized === 'true') {\n        return;\n      }\n\n      var context = canvas.getContext('2d');\n      var drawing = false;\n      context.lineWidth = 2;\n      context.lineCap = 'round';\n      context.strokeStyle = '#1f2937';\n\n      function getPoint(event) {\n        var rect = canvas.getBoundingClientRect();\n        var source = event.touches && event.touches.length ? event.touches[0] : event;\n        return {\n          x: source.clientX - rect.left,\n          y: source.clientY - rect.top\n        };\n      }\n\n      function start(event) {\n        event.preventDefault();\n        drawing = true;\n        var point = getPoint(event);\n        context.beginPath();\n        context.moveTo(point.x, point.y);\n      }\n\n      function move(event) {\n        if (!drawing) {\n          return;\n        }\n        event.preventDefault();\n        var point = getPoint(event);\n        context.lineTo(point.x, point.y);\n        context.stroke();\n      }\n\n      function end(event) {\n        if (!drawing) {\n          return;\n        }\n        event.preventDefault();\n        drawing = false;\n        $scope.$applyAsync(function () {\n          vm.hasSignature = true;\n          vm.formData.signature_data = canvas.toDataURL('image/png');\n        });\n      }\n\n      canvas.addEventListener('mousedown', start);\n      canvas.addEventListener('mousemove', move);\n      canvas.addEventListener('mouseup', end);\n      canvas.addEventListener('mouseleave', end);\n      canvas.addEventListener('touchstart', start, { passive: false });\n      canvas.addEventListener('touchmove', move, { passive: false });\n      canvas.addEventListener('touchend', end, { passive: false });\n      canvas.dataset.initialized = 'true';\n    }\n\n    function initializeTurnstileCallbacks() {\n      if (turnstileCallbacksInitialized) {\n        return;\n      }\n      window.onPublicRegistrationTurnstileSuccess = function (token) {\n        vm.formData.turnstile_token = token || '';\n        vm.error = null;\n        if (pendingFormForTurnstile) {\n          var formToSubmit = pendingFormForTurnstile;\n          pendingFormForTurnstile = null;\n          submit(formToSubmit);\n          return;\n        }\n        $scope.$applyAsync();\n      };\n      window.onPublicRegistrationTurnstileExpired = function () {\n        vm.formData.turnstile_token = '';\n        $scope.$applyAsync();\n      };\n      turnstileCallbacksInitialized = true;\n    }\n\n    function waitAndRenderTurnstile() {\n      if (!vm.formConfig.turnstile_site_key) {\n        return;\n      }\n      ensureTurnstileScriptLoaded();\n      if (!window.turnstile || !window.turnstile.render) {\n        waitTurnstilePromise = $timeout(waitAndRenderTurnstile, 100);\n        return;\n      }\n      renderTurnstile();\n    }\n\n    function renderTurnstile() {\n      var container = document.getElementById('public-registration-turnstile');\n      if (!container || turnstileWidgetId !== null) {\n        return;\n      }\n\n      turnstileWidgetId = window.turnstile.render(container, {\n        sitekey: vm.formConfig.turnstile_site_key,\n        size: 'invisible',\n        callback: window.onPublicRegistrationTurnstileSuccess,\n        'expired-callback': window.onPublicRegistrationTurnstileExpired\n      });\n    }\n\n    function ensureTurnstileScriptLoaded() {\n      if (window.turnstile || document.getElementById(turnstileScriptId)) {\n        return;\n      }\n\n      var script = document.createElement('script');\n      script.id = turnstileScriptId;\n      script.src = 'https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit';\n      script.async = true;\n      script.defer = true;\n      document.head.appendChild(script);\n    }\n\n    function resetTurnstileWidget() {\n      vm.formData.turnstile_token = '';\n      if (window.turnstile && turnstileWidgetId !== null) {\n        window.turnstile.reset(turnstileWidgetId);\n      }\n    }\n\n    function getSupportedLanguage(language) {\n      var normalizedLanguage = ((language || '') + '').toLowerCase().trim();\n      var normalizedBaseLanguage = normalizedLanguage.split(/[-_]/)[0];\n\n      if (supportedLanguages.indexOf(normalizedLanguage) !== -1) {\n        return normalizedLanguage;\n      }\n\n      if (supportedLanguages.indexOf(normalizedBaseLanguage) !== -1) {\n        return normalizedBaseLanguage;\n      }\n\n      return 'es';\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.public-registration')\n    .controller('LocationRegistrationController', LocationRegistrationController);\n\n  /** @ngInject */\n  function LocationRegistrationController(LocationRegistrationApiService, $stateParams, $translate, WarehouseData, $scope, $state) {\n    var vm = this;\n\n    $scope.$parent.vm.currentNavItem = 'contract';\n    vm.warehouseId = (WarehouseData && WarehouseData.id) || $stateParams.id || $stateParams.warehouseId || null;\n    vm.settings = null;\n    vm.error = null;\n    vm.isSaving = false;\n    vm.toggleRegistrationEnabled = toggleRegistrationEnabled;\n    vm.hasActiveContractVersion = hasActiveContractVersion;\n    vm.goToContractsConfiguration = goToContractsConfiguration;\n\n    initialize();\n\n    function initialize() {\n      $translate.use($translate.preferredLanguage() || $translate.use());\n      if (vm.warehouseId) {\n        load();\n      }\n    }\n\n    function load() {\n      vm.error = null;\n      vm.settings = null;\n      if (!vm.warehouseId) {\n        return;\n      }\n      return LocationRegistrationApiService.getSettings(vm.warehouseId)\n        .then(function (response) {\n          vm.settings = response.data;\n        })\n        .catch(function () {\n          vm.error = 'PUBLIC_REGISTRATION.ERROR_LOAD_SETTINGS';\n        });\n    }\n\n    function toggleRegistrationEnabled() {\n      if (!vm.settings || vm.isSaving) {\n        return;\n      }\n      vm.error = null;\n      vm.isSaving = true;\n      return LocationRegistrationApiService.updateSettings(vm.warehouseId, {\n        registration_enabled: vm.settings.registration_enabled\n      }).then(function (response) {\n        vm.settings = response.data;\n      }).catch(function () {\n        vm.error = 'PUBLIC_REGISTRATION.ERROR_UPDATE_SETTINGS';\n      }).finally(function () {\n        vm.isSaving = false;\n      });\n    }\n\n    function hasActiveContractVersion() {\n      return !!(vm.settings && vm.settings.active_contract_version_id);\n    }\n\n    function goToContractsConfiguration() {\n      $state.go('app.public_registration_management');\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.public-registration')\n    .controller('ContractManagementController', ContractManagementController);\n\n  /** @ngInject */\n  function ContractManagementController(ContractManagementApiService, $translate, api, $mdDialog, UiGridService, $timeout, $filter, $window, WAREHOUSE_TYPES, PUBLIC_REGISTRATION_CONTRACT_LANGUAGES) {\n    var vm = this;\n\n    vm.taToolbar = [\n      ['h1', 'h2', 'h3', 'p', 'pre', 'quote', 'bold', 'italics', 'underline', 'strikeThrough', 'ul', 'ol', 'redo', 'undo', 'clear'],\n      ['indent', 'outdent', 'html', 'insertImage', 'insertLink', 'wordcount', 'charcount']\n    ];\n    vm.availableLanguages = buildAvailableLanguages(PUBLIC_REGISTRATION_CONTRACT_LANGUAGES);\n    vm.contracts = [];\n    vm.assignedLocations = [];\n    vm.warehouses = [];\n    vm.WAREHOUSE_TYPES = WAREHOUSE_TYPES;\n    vm.assignableContracts = [];\n    vm.contractActionLoading = {};\n    vm.isContractActionLoading = false;\n    vm.form = {\n      language: ($translate.use() || $translate.preferredLanguage() || 'es').toLowerCase(),\n      html_content: ''\n    };\n    vm.error = null;\n    vm.load = load;\n    vm.createContract = createContract;\n    vm.publishContract = publishContract;\n    vm.cloneContract = cloneContract;\n    vm.unassignContract = unassignContract;\n    vm.toggleAssignedRegistration = toggleAssignedRegistration;\n    vm.removeContract = removeContract;\n    vm.openCreateDialog = openCreateDialog;\n    vm.openEditDialog = openEditDialog;\n    vm.openViewDialog = openViewDialog;\n    vm.openAssignDialog = openAssignDialog;\n    vm.canEditContract = canEditContract;\n    vm.getLanguageLabel = getLanguageLabel;\n    vm.contractsGridOptions = UiGridService.getGridOptions({\n      enableGridMenu: false,\n      enableRowSelection: false,\n      enableSelectAll: false,\n      multiSelect: false,\n      useExternalPagination: false,\n      useExternalSorting: false,\n      paginationPageSize: 10,\n      paginationPageSizes: [10, 25, 50],\n      onRegisterApi: function (gridApi) {\n        vm.contractsGridApi = gridApi;\n      },\n      columnDefs: [\n        {\n          field: 'language',\n          displayName: 'PUBLIC_REGISTRATION.LANGUAGE',\n          headerCellFilter: 'translate',\n          minWidth: 120,\n          cellTemplate:\n            '<div class=\"ui-grid-cell-contents\">' +\n            '  {{ grid.appScope.vm.getLanguageLabel(row.entity.language) }}' +\n            '</div>'\n        },\n        { field: 'version_number', displayName: 'PUBLIC_REGISTRATION.VERSION', headerCellFilter: 'translate', width: 90, enableColumnMenu: false },\n        {\n          field: 'status',\n          displayName: 'PUBLIC_REGISTRATION.STATUS',\n          headerCellFilter: 'translate',\n          minWidth: 140,\n          enableColumnMenu: false,\n          cellTemplate:\n            '<div class=\"ui-grid-cell-contents\">' +\n            '  <span class=\"contract-status-badge contract-status-badge--{{ row.entity.status | lowercase }}\">' +\n            '    {{ (\\'PUBLIC_REGISTRATION.CONTRACT_STATUS_\\' + row.entity.status) | translate }}' +\n            '  </span>' +\n            '</div>'\n        },\n        { field: 'signed_customers_count', displayName: 'PUBLIC_REGISTRATION.SIGNATURES', headerCellFilter: 'translate', minWidth: 100 },\n        {\n          name: 'actions',\n          displayName: 'PUBLIC_REGISTRATION.ACTIONS',\n          headerCellFilter: 'translate',\n          width: 90,\n          enableSorting: false,\n          enableColumnMenu: false,\n          cellTemplate:\n            '<div class=\"ui-grid-cell-contents contract-grid-actions\">' +\n            '  <md-menu>' +\n            '    <md-button class=\"md-icon-button m-0\" ng-click=\"$mdOpenMenu($event); $event.stopPropagation();\" aria-label=\"{{ \\'PUBLIC_REGISTRATION.ACTIONS\\' | translate }}\" ng-disabled=\"grid.appScope.vm.contractActionLoading[row.entity.id]\">' +\n            '      <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>' +\n            '    </md-button>' +\n            '    <md-menu-content class=\"md-menu-bar-menu md-dense contract-actions-menu\" width=\"4\">' +\n            '      <md-menu-item class=\"contract-actions-menu-item\">' +\n            '        <md-button ng-click=\"grid.appScope.vm.openViewDialog(row.entity)\">' +\n            '          <md-icon class=\"line-actions-menu-icon\" md-font-icon=\"icon-eye\"></md-icon>' +\n            '          {{ \\'PUBLIC_REGISTRATION.VIEW_CONTRACT_TEXT\\' | translate }}' +\n            '        </md-button>' +\n            '      </md-menu-item>' +\n            '      <md-menu-item class=\"contract-actions-menu-item\" ng-if=\"row.entity.status === \\'DRAFT\\'\">' +\n            '        <md-button ng-click=\"grid.appScope.vm.confirmAndPublishContract(row.entity)\" ng-disabled=\"grid.appScope.vm.contractActionLoading[row.entity.id]\">' +\n            '          <md-icon class=\"line-actions-menu-icon\" md-font-icon=\"icon-check-circle\"></md-icon>' +\n            '          {{ \\'PUBLIC_REGISTRATION.PUBLISH\\' | translate }}' +\n            '        </md-button>' +\n            '      </md-menu-item>' +\n            '      <md-menu-item class=\"contract-actions-menu-item\">' +\n            '        <md-button ng-click=\"grid.appScope.vm.confirmAndCloneContract(row.entity)\" ng-disabled=\"grid.appScope.vm.contractActionLoading[row.entity.id]\">' +\n            '          <md-icon class=\"line-actions-menu-icon\" md-font-icon=\"icon-content-copy\"></md-icon>' +\n            '          {{ \\'PUBLIC_REGISTRATION.CREATE_NEW_VERSION\\' | translate }}' +\n            '        </md-button>' +\n            '      </md-menu-item>' +\n            '      <md-menu-item class=\"contract-actions-menu-item\" ng-if=\"grid.appScope.vm.canEditContract(row.entity)\">' +\n            '        <md-button ng-click=\"grid.appScope.vm.openEditDialog(row.entity)\" ng-disabled=\"grid.appScope.vm.contractActionLoading[row.entity.id]\">' +\n            '          <md-icon class=\"line-actions-menu-icon\" md-font-icon=\"icon-pencil\"></md-icon>' +\n            '          {{ \\'PUBLIC_REGISTRATION.EDIT\\' | translate }}' +\n            '        </md-button>' +\n            '      </md-menu-item>' +\n            '      <md-divider ng-if=\"grid.appScope.vm.canEditContract(row.entity)\"></md-divider>' +\n            '      <md-menu-item class=\"contract-actions-menu-item contract-actions-menu-item-warn\" ng-if=\"grid.appScope.vm.canEditContract(row.entity)\">' +\n            '        <md-button class=\"md-warn\" ng-click=\"grid.appScope.vm.confirmAndRemoveContract(row.entity)\" ng-disabled=\"grid.appScope.vm.contractActionLoading[row.entity.id]\">' +\n            '          <md-icon class=\"line-actions-menu-icon-warn\" md-font-icon=\"icon-delete\"></md-icon>' +\n            '          {{ \\'GENERAL.DELETE\\' | translate }}' +\n            '        </md-button>' +\n            '      </md-menu-item>' +\n            '    </md-menu-content>' +\n            '  </md-menu>' +\n            '</div>'\n        }\n      ],\n      data: []\n    });\n    vm.assignedLocationsGridOptions = UiGridService.getGridOptions({\n      enableGridMenu: false,\n      enableRowSelection: false,\n      enableSelectAll: false,\n      multiSelect: false,\n      useExternalPagination: false,\n      useExternalSorting: false,\n      paginationPageSize: 10,\n      paginationPageSizes: [10, 25, 50],\n      onRegisterApi: function (gridApi) {\n        vm.assignedLocationsGridApi = gridApi;\n      },\n      columnDefs: [\n        {\n          field: 'warehouse_name',\n          displayName: 'PUBLIC_REGISTRATION.STORE',\n          headerCellFilter: 'translate',\n          minWidth: 160\n        },\n        {\n          name: 'contract',\n          displayName: 'PUBLIC_REGISTRATION.CONTRACT',\n          headerCellFilter: 'translate',\n          minWidth: 180,\n          enableSorting: false,\n          enableColumnMenu: false,\n          cellTemplate:\n            '<div class=\"ui-grid-cell-contents\">' +\n            '  {{ grid.appScope.vm.getLanguageLabel(row.entity.contract_language) }} v{{ row.entity.contract_version_number }}' +\n            '</div>'\n        },\n        {\n          name: 'registration_enabled',\n          displayName: 'PUBLIC_REGISTRATION.ENABLED',\n          headerCellFilter: 'translate',\n          width: 120,\n          enableSorting: false,\n          enableColumnMenu: false,\n          cellTemplate:\n            '<div class=\"ui-grid-cell-contents\">' +\n            '  {{ row.entity.registration_enabled ? ((\\'GENERAL.YES\\') | translate) : ((\\'GENERAL.NO\\') | translate) }}' +\n            '</div>'\n        },\n        {\n          name: 'actions',\n          displayName: 'PUBLIC_REGISTRATION.ACTIONS',\n          headerCellFilter: 'translate',\n          width: 90,\n          enableSorting: false,\n          enableColumnMenu: false,\n          cellTemplate:\n            '<div class=\"ui-grid-cell-contents contract-grid-actions\">' +\n            '  <md-menu>' +\n            '    <md-button class=\"md-icon-button m-0\" ng-click=\"$mdOpenMenu($event); $event.stopPropagation();\" aria-label=\"{{ \\'PUBLIC_REGISTRATION.ACTIONS\\' | translate }}\">' +\n            '      <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>' +\n            '    </md-button>' +\n            '    <md-menu-content class=\"md-menu-bar-menu md-dense contract-actions-menu\" width=\"4\">' +\n            '      <md-menu-item class=\"contract-actions-menu-item\">' +\n            '        <md-button ng-click=\"grid.appScope.vm.toggleAssignedRegistration(row.entity)\">' +\n            '          <md-icon class=\"line-actions-menu-icon\" md-font-icon=\"icon-check\" ng-if=\"!row.entity.registration_enabled\"></md-icon>' +\n            '          <md-icon class=\"line-actions-menu-icon\" md-font-icon=\"icon-close\" ng-if=\"row.entity.registration_enabled\"></md-icon>' +\n            '          {{ row.entity.registration_enabled ? ((\\'PUBLIC_REGISTRATION.DISABLE_REGISTRATION\\') | translate) : ((\\'PUBLIC_REGISTRATION.ENABLE_REGISTRATION\\') | translate) }}' +\n            '        </md-button>' +\n            '      </md-menu-item>' +\n            '      <md-divider></md-divider>' +\n            '      <md-menu-item class=\"contract-actions-menu-item contract-actions-menu-item-warn\">' +\n            '        <md-button class=\"md-warn\" ng-click=\"grid.appScope.vm.unassignContract(row.entity.warehouse_id)\">' +\n            '          <md-icon class=\"line-actions-menu-icon-warn\" md-font-icon=\"icon-delete\"></md-icon>' +\n            '          {{ \\'PUBLIC_REGISTRATION.REMOVE_LINK\\' | translate }}' +\n            '        </md-button>' +\n            '      </md-menu-item>' +\n            '    </md-menu-content>' +\n            '  </md-menu>' +\n            '</div>'\n        }\n      ],\n      data: []\n    });\n    vm.confirmAndPublishContract = confirmAndPublishContract;\n    vm.confirmAndCloneContract = confirmAndCloneContract;\n    vm.confirmAndRemoveContract = confirmAndRemoveContract;\n\n    $translate.use($translate.preferredLanguage() || $translate.use());\n    load();\n\n    function load() {\n      vm.error = null;\n      return ContractManagementApiService.list().then(function (response) {\n        var payload = response.data || {};\n        var contractsPayload = payload.contracts || payload.results || payload;\n        vm.contracts = contractsPayload.results || contractsPayload;\n        vm.assignedLocations = payload.assigned_locations || [];\n        vm.assignableContracts = vm.contracts.filter(function (contract) {\n          return contract.status === 'PUBLISHED';\n        });\n        vm.contractsGridOptions.data = vm.contracts;\n        vm.assignedLocationsGridOptions.data = vm.assignedLocations;\n        $timeout(function () {\n          if (vm.contractsGridApi && vm.contractsGridApi.core) {\n            vm.contractsGridApi.core.notifyDataChange('all');\n            vm.contractsGridApi.core.handleWindowResize();\n          }\n          if (vm.assignedLocationsGridApi && vm.assignedLocationsGridApi.core) {\n            vm.assignedLocationsGridApi.core.notifyDataChange('all');\n            vm.assignedLocationsGridApi.core.handleWindowResize();\n          }\n        }, 0);\n        loadWarehouses();\n      }).catch(function () {\n        vm.error = 'PUBLIC_REGISTRATION.ERROR_LOAD_CONTRACTS';\n      });\n    }\n\n    function loadWarehouses() {\n      return api.inventories.warehouses.list({ page_size: 200, ordering: 'name' }, function (response) {\n        vm.warehouses = (response.results || []).filter(function (warehouse) {\n          return parseInt(warehouse.type, 10) === parseInt(vm.WAREHOUSE_TYPES.STORE, 10);\n        });\n      }, function () {\n        vm.error = 'PUBLIC_REGISTRATION.ERROR_LOAD_WAREHOUSES';\n      });\n    }\n\n    function createContract(payload) {\n      vm.error = null;\n      return ContractManagementApiService.create(payload).then(function () {\n        return load();\n      }).catch(function () {\n        vm.error = 'PUBLIC_REGISTRATION.ERROR_CREATE_CONTRACT';\n      });\n    }\n\n    function publishContract(contractId) {\n      vm.error = null;\n      setContractActionLoading(contractId, true);\n      return ContractManagementApiService.publish(contractId).then(load).catch(function () {\n        vm.error = 'PUBLIC_REGISTRATION.ERROR_PUBLISH_CONTRACT';\n      }).finally(function () {\n        setContractActionLoading(contractId, false);\n      });\n    }\n\n    function cloneContract(contractId) {\n      vm.error = null;\n      setContractActionLoading(contractId, true);\n      return ContractManagementApiService.clone(contractId).then(load).catch(function () {\n        vm.error = 'PUBLIC_REGISTRATION.ERROR_CLONE_CONTRACT';\n      }).finally(function () {\n        setContractActionLoading(contractId, false);\n      });\n    }\n\n    function canEditContract(contract) {\n      return contract.status === 'DRAFT' && (contract.signed_customers_count || 0) === 0;\n    }\n\n    function updateContract(contractId, payload) {\n      vm.error = null;\n      setContractActionLoading(contractId, true);\n      return ContractManagementApiService.update(contractId, payload).then(function () {\n        return load();\n      }).catch(function () {\n        vm.error = 'PUBLIC_REGISTRATION.ERROR_UPDATE_CONTRACT';\n      }).finally(function () {\n        setContractActionLoading(contractId, false);\n      });\n    }\n\n    function removeContract(contractId) {\n      vm.error = null;\n      setContractActionLoading(contractId, true);\n      return ContractManagementApiService.remove(contractId).then(function () {\n        return load();\n      }).catch(function () {\n        vm.error = 'PUBLIC_REGISTRATION.ERROR_DELETE_CONTRACT';\n      }).finally(function () {\n        setContractActionLoading(contractId, false);\n      });\n    }\n\n    function assignContract(payload) {\n      vm.error = null;\n      return ContractManagementApiService.assign(payload).then(function () {\n        return load();\n      }).catch(function () {\n        vm.error = 'PUBLIC_REGISTRATION.ERROR_ASSIGN_CONTRACT';\n      });\n    }\n\n    function unassignContract(warehouseId) {\n      vm.error = null;\n      return ContractManagementApiService.unassign({\n        warehouse_id: warehouseId\n      }).then(load).catch(function () {\n        vm.error = 'PUBLIC_REGISTRATION.ERROR_UNASSIGN_CONTRACT';\n      });\n    }\n\n    function toggleAssignedRegistration(link) {\n      vm.error = null;\n      return ContractManagementApiService.assign({\n        warehouse_id: link.warehouse_id,\n        contract_id: link.contract_id,\n        registration_enabled: !link.registration_enabled\n      }).then(load).catch(function () {\n        vm.error = 'PUBLIC_REGISTRATION.ERROR_TOGGLE_REGISTRATION';\n        return load();\n      });\n    }\n\n    function openCreateDialog() {\n      openContractEditorDialog({\n        mode: 'create',\n        title: 'PUBLIC_REGISTRATION.ADD_CONTRACT',\n        initialLanguage: vm.form.language,\n        initialHtml: ''\n      }).then(function (result) {\n        var currentDraft;\n        if (!result) {\n          return;\n        }\n        currentDraft = getCurrentDraftByLanguage(result.language);\n        if (currentDraft) {\n          return updateContract(currentDraft.id, {\n            html_content: result.html_content\n          });\n        }\n        return createContract({\n          language: result.language,\n          html_content: result.html_content\n        });\n      });\n    }\n\n    function openEditDialog(contract) {\n      if (!canEditContract(contract)) {\n        return;\n      }\n      openContractEditorDialog({\n        mode: 'edit',\n        title: 'PUBLIC_REGISTRATION.EDIT',\n        initialLanguage: contract.language,\n        initialHtml: contract.html_content\n      }).then(function (result) {\n        if (!result) {\n          return;\n        }\n        return updateContract(contract.id, {\n          html_content: result.html_content\n        });\n      });\n    }\n\n    function openViewDialog(contract) {\n      $mdDialog.show({\n        template:\n          '<md-dialog aria-label=\"View contract text\">' +\n          '  <md-dialog-content class=\"md-padding\">' +\n          '    <h2 class=\"mb-16\">{{ vm.contractLanguageLabel }} · v{{ vm.contractVersion }}</h2>' +\n          '    <div style=\"max-height: 420px; overflow:auto;\" ng-bind-html=\"vm.contractHtml\"></div>' +\n          '  </md-dialog-content>' +\n          '  <md-dialog-actions layout=\"row\">' +\n          '    <span flex></span>' +\n          '    <md-button ng-click=\"vm.close()\" class=\"md-primary\">' +\n          '      {{ \\'GENERAL.CANCEL\\' | translate }}' +\n          '    </md-button>' +\n          '  </md-dialog-actions>' +\n          '</md-dialog>',\n        locals: {\n          contractLanguageLabel: getLanguageLabel(contract.language),\n          contractVersion: contract.version_number,\n          contractHtml: contract.html_content\n        },\n        controller: ['$mdDialog', 'contractLanguageLabel', 'contractVersion', 'contractHtml',\n          function ($mdDialog, contractLanguageLabel, contractVersion, contractHtml) {\n            var dialogVm = this;\n            dialogVm.contractLanguageLabel = contractLanguageLabel;\n            dialogVm.contractVersion = contractVersion;\n            dialogVm.contractHtml = contractHtml;\n            dialogVm.close = function () {\n              $mdDialog.hide();\n            };\n          }],\n        controllerAs: 'vm'\n      });\n    }\n\n    function openAssignDialog() {\n      $mdDialog.show({\n        template:\n          '<md-dialog aria-label=\"Link store\" class=\"contract-assign-dialog\">' +\n          '  <form name=\"assignForm\" novalidate>' +\n          '    <md-dialog-content class=\"md-padding contract-assign-dialog-content\">' +\n          '      <h2 class=\"mb-16\">{{ \\'PUBLIC_REGISTRATION.LINK_STORE\\' | translate }}</h2>' +\n          '      <div layout=\"column\" layout-gap=\"8px\">' +\n          '        <md-input-container class=\"md-block mb-8\">' +\n          '          <label>{{ \\'PUBLIC_REGISTRATION.STORE\\' | translate }}</label>' +\n          '          <md-select ng-model=\"vm.data.warehouse_id\" required>' +\n          '            <md-select-header>' +\n          '              <input ng-model=\"vm.warehouseSearch\" type=\"search\" placeholder=\"{{ \\'GENERAL.SEARCH\\' | translate }}\" class=\"md-select-header-input\" ng-keydown=\"$event.stopPropagation()\" />' +\n          '            </md-select-header>' +\n          '            <md-option ng-repeat=\"w in vm.warehouses | filter:{name: vm.warehouseSearch} | orderBy:\\'name\\'\" ng-value=\"w.id\">{{ w.name }}</md-option>' +\n          '          </md-select>' +\n          '        </md-input-container>' +\n          '        <md-input-container class=\"md-block mb-8\">' +\n          '          <label>{{ \\'PUBLIC_REGISTRATION.CONTRACT\\' | translate }}</label>' +\n          '          <md-select ng-model=\"vm.data.contract_id\" required>' +\n          '            <md-select-header>' +\n          '              <input ng-model=\"vm.contractSearch\" type=\"search\" placeholder=\"{{ \\'GENERAL.SEARCH\\' | translate }}\" class=\"md-select-header-input\" ng-keydown=\"$event.stopPropagation()\" />' +\n          '            </md-select-header>' +\n          '            <md-option ng-repeat=\"c in vm.contracts | filter:vm.contractSearch\" ng-value=\"c.id\">{{ vm.getLanguageLabel(c.language) }} v{{ c.version_number }}</md-option>' +\n          '          </md-select>' +\n          '        </md-input-container>' +\n          '      </div>' +\n          '      <md-switch ng-model=\"vm.data.registration_enabled\" class=\"mt-12 mb-0\">{{ \\'PUBLIC_REGISTRATION.REGISTRATION_ENABLED\\' | translate }}</md-switch>' +\n          '    </md-dialog-content>' +\n          '    <md-dialog-actions layout=\"row\">' +\n          '      <span flex></span>' +\n          '      <md-button ng-click=\"vm.cancel()\" class=\"stroked\">{{ \\'GENERAL.CANCEL\\' | translate }}</md-button>' +\n          '      <md-button ng-click=\"vm.confirm()\" class=\"md-primary md-raised\" ng-disabled=\"assignForm.$invalid\">{{ \\'PUBLIC_REGISTRATION.ASSIGN\\' | translate }}</md-button>' +\n          '    </md-dialog-actions>' +\n          '  </form>' +\n          '</md-dialog>',\n        controller: ['$mdDialog', function ($mdDialog) {\n          var dialogVm = this;\n          dialogVm.warehouses = vm.warehouses;\n          dialogVm.contracts = vm.assignableContracts;\n          dialogVm.getLanguageLabel = vm.getLanguageLabel;\n          dialogVm.warehouseSearch = '';\n          dialogVm.contractSearch = '';\n          dialogVm.data = {\n            warehouse_id: null,\n            contract_id: null,\n            registration_enabled: true\n          };\n          dialogVm.cancel = function () {\n            $mdDialog.cancel();\n          };\n          dialogVm.confirm = function () {\n            $mdDialog.hide(dialogVm.data);\n          };\n        }],\n        controllerAs: 'vm'\n      }).then(function (result) {\n        if (!result) {\n          return;\n        }\n        return assignContract(result);\n      });\n    }\n\n    function openContractEditorDialog(config) {\n      return $mdDialog.show({\n        template:\n          '<md-dialog aria-label=\"Contract editor\" class=\"wb-800\">' +\n          '  <form name=\"contractForm\">' +\n          '    <md-dialog-content class=\"md-padding\">' +\n          '      <h2 class=\"mb-16\">{{ vm.title | translate }}</h2>' +\n          '      <md-input-container class=\"md-block\">' +\n          '        <label>{{ \\'PUBLIC_REGISTRATION.LANGUAGE\\' | translate }}</label>' +\n          '        <md-select ng-model=\"vm.form.language\" ng-disabled=\"vm.mode === \\'edit\\'\" required>' +\n          '          <md-select-header>' +\n          '            <input ng-model=\"vm.languageSearch\" type=\"search\" placeholder=\"{{ \\'GENERAL.SEARCH\\' | translate }}\" class=\"md-select-header-input\" ng-keydown=\"$event.stopPropagation()\" />' +\n          '          </md-select-header>' +\n          '          <md-option ng-repeat=\"language in vm.availableLanguages | filter:vm.languageSearch | orderBy:\\'name\\'\" ng-value=\"language.iso\">{{ language.name }} ({{ language.iso }})</md-option>' +\n          '        </md-select>' +\n          '      </md-input-container>' +\n          '      <div layout=\"row\" layout-align=\"start end\" class=\"m-0 mb-10\">' +\n          '        <label class=\"secondary-text\" translate=\"PUBLIC_REGISTRATION.HTML_CONTENT\"></label>:' +\n          '        <span flex></span>' +\n          '        <md-button ng-click=\"vm.toggleEditor()\" class=\"cursor-pointer md-primary\" type=\"button\">' +\n          '          {{ (vm.showPlainEditor ? \\'PRODUCT.TOGGLE_TO_HTML_DESCRIPTION_EDITOR\\' : \\'PRODUCT.TOGGLE_TO_PLAIN_DESCRIPTION_EDITOR\\') | translate }}' +\n          '        </md-button>' +\n          '      </div>' +\n          '      <text-angular ng-if=\"!vm.showPlainEditor\" ta-toolbar=\"vm.taToolbar\" ng-model=\"vm.form.html_content\"></text-angular>' +\n          '      <textarea ng-if=\"vm.showPlainEditor\" class=\"full-width border md-padding\" ng-model=\"vm.form.html_content\" rows=\"10\" required></textarea>' +\n          '    </md-dialog-content>' +\n          '    <md-dialog-actions layout=\"row\">' +\n          '      <span flex></span>' +\n          '      <md-button ng-click=\"vm.cancel()\" class=\"stroked\">{{ \\'GENERAL.CANCEL\\' | translate }}</md-button>' +\n          '      <md-button ng-click=\"vm.save()\" class=\"md-primary md-raised\" ng-disabled=\"contractForm.$invalid\">' +\n          '        {{ \\'GENERAL.SAVE\\' | translate }}' +\n          '      </md-button>' +\n          '    </md-dialog-actions>' +\n          '  </form>' +\n          '</md-dialog>',\n        controller: ['$mdDialog', function ($mdDialog) {\n          var dialogVm = this;\n          dialogVm.taToolbar = vm.taToolbar;\n          dialogVm.availableLanguages = vm.availableLanguages;\n          dialogVm.mode = config.mode;\n          dialogVm.title = config.title;\n          dialogVm.showPlainEditor = false;\n          dialogVm.languageSearch = '';\n          dialogVm.form = {\n            language: config.initialLanguage,\n            html_content: config.initialHtml\n          };\n          dialogVm.toggleEditor = function () {\n            dialogVm.showPlainEditor = !dialogVm.showPlainEditor;\n          };\n          dialogVm.cancel = function () {\n            $mdDialog.cancel();\n          };\n          dialogVm.save = function () {\n            $mdDialog.hide(dialogVm.form);\n          };\n        }],\n        controllerAs: 'vm'\n      });\n    }\n\n    function confirmAndPublishContract(contract) {\n      return $mdDialog.show(\n        $mdDialog.confirm()\n          .title($filter('translate')('PUBLIC_REGISTRATION.PUBLISH_CONFIRM_TITLE'))\n          .textContent($filter('translate')('PUBLIC_REGISTRATION.PUBLISH_CONFIRM_MESSAGE'))\n          .ok($filter('translate')('PUBLIC_REGISTRATION.PUBLISH'))\n          .cancel($filter('translate')('GENERAL.CANCEL'))\n      ).then(function () {\n        return publishContract(contract.id);\n      });\n    }\n\n    function confirmAndCloneContract(contract) {\n      return $mdDialog.show(\n        $mdDialog.confirm()\n          .title($filter('translate')('PUBLIC_REGISTRATION.CREATE_NEW_VERSION_CONFIRM_TITLE'))\n          .textContent($filter('translate')('PUBLIC_REGISTRATION.CREATE_NEW_VERSION_CONFIRM_MESSAGE'))\n          .ok($filter('translate')('PUBLIC_REGISTRATION.CREATE_NEW_VERSION'))\n          .cancel($filter('translate')('GENERAL.CANCEL'))\n      ).then(function () {\n        return cloneContract(contract.id);\n      });\n    }\n\n    function confirmAndRemoveContract(contract) {\n      return $mdDialog.show(\n        $mdDialog.confirm()\n          .title($filter('translate')('PUBLIC_REGISTRATION.DELETE_CONFIRM_TITLE'))\n          .textContent($filter('translate')('PUBLIC_REGISTRATION.DELETE_CONFIRM_MESSAGE'))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'))\n      ).then(function () {\n        return removeContract(contract.id);\n      });\n    }\n\n    function setContractActionLoading(contractId, isLoading) {\n      vm.contractActionLoading[contractId] = isLoading;\n      vm.isContractActionLoading = Object.keys(vm.contractActionLoading).some(function (key) {\n        return vm.contractActionLoading[key];\n      });\n    }\n\n    function getCurrentDraftByLanguage(language) {\n      var drafts;\n      drafts = vm.contracts.filter(function (contract) {\n        return contract.language === language && contract.status === 'DRAFT';\n      });\n      drafts.sort(function (firstContract, secondContract) {\n        return secondContract.version_number - firstContract.version_number;\n      });\n      return drafts[0] || null;\n    }\n\n    function getLanguageLabel(languageIso) {\n      var normalizedLanguage = ((languageIso || '') + '').toLowerCase();\n      var languageOption = null;\n      vm.availableLanguages.forEach(function (item) {\n        if (item.iso === normalizedLanguage) {\n          languageOption = item;\n        }\n      });\n      if (!languageOption) {\n        return (languageIso || '').toUpperCase();\n      }\n      return languageOption.name;\n    }\n\n    function buildAvailableLanguages(languages) {\n      return angular.copy(languages).map(function (language) {\n        return {\n          iso: language.iso,\n          name: getAutonym(language.iso, language.name)\n        };\n      });\n    }\n\n    function getAutonym(languageIso, fallbackName) {\n      var iso = ((languageIso || '') + '').toLowerCase();\n      var fallback = fallbackName || iso.toUpperCase();\n      var DisplayNames;\n      var autonym;\n\n      if (!iso || !$window.Intl || !$window.Intl.DisplayNames) {\n        return fallback;\n      }\n\n      try {\n        DisplayNames = new $window.Intl.DisplayNames([iso], { type: 'language' });\n        autonym = DisplayNames.of(iso);\n      } catch (e) {\n        return fallback;\n      }\n\n      if (!autonym || autonym.toLowerCase() === iso) {\n        return fallback;\n      }\n\n      return autonym.charAt(0).toUpperCase() + autonym.slice(1);\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.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    vm.toggleSidenav = toggleSidenav;\n    vm.toggleSidenavDesktop = toggleSidenavDesktop;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.clearFilter = clearFilter;\n\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      var gridClearUnwatch = $scope.$on('ndFilter::clear', function (event, data) {\n        var filterName = typeof data === 'string' ? data : (data && data.filterName);\n        var filterMap = {\n          'REPLENISHMENT.STOCK': 'warehouseStock',\n          'REPLENISHMENT.STOCK_TO_ORDER': 'stockToOrder',\n        };\n\n\n        var filterProperty = filterMap[filterName];\n        if (filterProperty) {\n          var previousValue = vm.statusByProduct.filters[filterProperty];\n          vm.statusByProduct.filters[filterProperty] = null;\n          if (previousValue !== null) {\n            filterChanged();\n          }\n        }\n      });\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        gridClearUnwatch();\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 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 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 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    function getFilterNotifications() {\n      var result = 0;\n      result += vm.statusByProduct.search !== '' ? 1 : 0;\n      result += vm.statusByProduct.filters.warehouses && vm.statusByProduct.filters.warehouses.length ? 1 : 0;\n      result += vm.statusByProduct.filters.seasons && vm.statusByProduct.filters.seasons.length ? 1 : 0;\n      result += vm.statusByProduct.filters.collections && vm.statusByProduct.filters.collections.length ? 1 : 0;\n      result += vm.statusByProduct.filters.brands && vm.statusByProduct.filters.brands.length ? 1 : 0;\n      result += vm.statusByProduct.filters.categories && vm.statusByProduct.filters.categories.length ? 1 : 0;\n      result += vm.statusByProduct.filters.subcategories && vm.statusByProduct.filters.subcategories.length ? 1 : 0;\n      result += vm.statusByProduct.filters.abcCategories && vm.statusByProduct.filters.abcCategories.length ? 1 : 0;\n      result += vm.statusByProduct.filters.availabilityStatuses && vm.statusByProduct.filters.availabilityStatuses.length ? 1 : 0;\n      result += vm.statusByProduct.filters.warehouseStock ? 1 : 0;\n      result += vm.statusByProduct.filters.stockToOrder ? 1 : 0;\n      return result;\n    }\n\n    function clearFilter() {\n      vm.statusByProduct.search = '';\n      vm.statusByProduct.filters.warehouses = [];\n      vm.statusByProduct.filters.seasons = [];\n      vm.statusByProduct.filters.collections = [];\n      vm.statusByProduct.filters.brands = [];\n      vm.statusByProduct.filters.categories = [];\n      vm.statusByProduct.filters.subcategories = [];\n      vm.statusByProduct.filters.abcCategories = [];\n      vm.statusByProduct.filters.availabilityStatuses = [];\n      vm.statusByProduct.filters.warehouseStock = null;\n      vm.statusByProduct.filters.stockToOrder = null;\n      filterChanged();\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      $mdSidenav,\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      vm.toggleSidenav = toggleSidenav;\n      vm.toggleSidenavDesktop = toggleSidenavDesktop;\n      vm.getFilterNotifications = getFilterNotifications;\n      vm.clearFilter = clearFilter;\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 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 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      function getFilterNotifications() {\n        var result = 0;\n        result += vm.statusByProduct.search !== '' ? 1 : 0;\n        result += vm.statusByProduct.filters.providers && vm.statusByProduct.filters.providers.length ? 1 : 0;\n        result += vm.statusByProduct.filters.warehouses && vm.statusByProduct.filters.warehouses.length ? 1 : 0;\n        result += vm.statusByProduct.filters.seasons && vm.statusByProduct.filters.seasons.length ? 1 : 0;\n        result += vm.statusByProduct.filters.collections && vm.statusByProduct.filters.collections.length ? 1 : 0;\n        result += vm.statusByProduct.filters.brands && vm.statusByProduct.filters.brands.length ? 1 : 0;\n        result += vm.statusByProduct.filters.categories && vm.statusByProduct.filters.categories.length ? 1 : 0;\n        result += vm.statusByProduct.filters.subcategories && vm.statusByProduct.filters.subcategories.length ? 1 : 0;\n        return result;\n      }\n\n      function clearFilter() {\n        vm.statusByProduct.search = '';\n        vm.statusByProduct.filters.providers = [];\n        vm.statusByProduct.filters.warehouses = [];\n        vm.statusByProduct.filters.seasons = [];\n        vm.statusByProduct.filters.collections = [];\n        vm.statusByProduct.filters.brands = [];\n        vm.statusByProduct.filters.categories = [];\n        vm.statusByProduct.filters.subcategories = [];\n        filterChanged();\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.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\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    initializeCurrentNavItem();\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    function initializeCurrentNavItem() {\n      updateCurrentNavItemFromState();\n      $scope.$on('$stateChangeSuccess', function () {\n        updateCurrentNavItemFromState();\n      });\n    }\n\n    function updateCurrentNavItemFromState() {\n      var stateName = ($state.current && $state.current.name) || '';\n      if (stateName.indexOf('.details') !== -1) {\n        vm.currentNavItem = 'details';\n        return;\n      }\n      if (stateName.indexOf('.registers') !== -1) {\n        vm.currentNavItem = 'registers';\n        return;\n      }\n      if (stateName.indexOf('.stock-locations') !== -1) {\n        vm.currentNavItem = 'stock-locations';\n        return;\n      }\n      if (stateName.indexOf('.contract') !== -1) {\n        vm.currentNavItem = 'contract';\n      }\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\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('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  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    $mdSidenav,\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    StorageService,\n    SitesData,\n    POS_ORDER_PAYMENT_STATUSES\n  ) {\n    var vm = this;\n\n    //Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.POS_ORDER_PAYMENT_STATUSES = POS_ORDER_PAYMENT_STATUSES;\n\n    vm.navItems = {\n      toPrepare: {\n        title: 'TO_PICK',\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: 'TO_PACK',\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: 'TO_SHIP',\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 = StorageService.getPickingPackingControllerFiltersKey();\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      paymentStatuses: null,\n      warning: null,\n      incidence: null,\n    };\n\n    vm.statuses = {\n      'to-prepare': createGridStatus(),\n      'picking': createGridStatus(),\n      'picked': createGridStatus(),\n      'packing': createGridStatus(),\n      'packed': createGridStatus(),\n      'shipped': createGridStatus()\n    };\n    vm.status = vm.statuses['to-prepare'];\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    vm.warningOptions = [\n      { value: 'with_warning', labelKey: 'PICKING_AND_PACKING.WITH_WARNING' },\n      { value: 'without_warning', labelKey: 'PICKING_AND_PACKING.WITHOUT_WARNING' }\n    ];\n    vm.incidenceOptions = [\n      { value: 'with_incidence', labelKey: 'PICKING_AND_PACKING.WITH_INCIDENCE' },\n      { value: 'without_incidence', labelKey: 'PICKING_AND_PACKING.WITHOUT_INCIDENCE' }\n    ];\n\n    var gridApiInitializedUnwatch = $scope.$on('gridApiInitialized', function (event, gridApi) {\n      vm.gridApi = gridApi;\n    });\n\n    var gridGeneratePickingOrderUnwatch = $scope.$on('ndPickingPackingActions::generatePickingOrder', function (event) {\n      $scope.$broadcast('ndPickingPacking::generatePickingOrder');\n    });\n\n    var gridGeneratePackingOrderUnwatch = $scope.$on('ndPickingPackingActions::generatePackingOrder', function (event) {\n      $scope.$broadcast('ndPickingPacking::generatePackingOrder');\n    });\n\n    var gridOpenShippingPackingDialogUnwatch = $scope.$on('ndPickingPackingActions::openShippingPackingDialog', function (event) {\n      $scope.$broadcast('ndPickingPacking::openShippingPackingDialog');\n    });\n\n    var gridOpenSendcloudLabelsDialogUnwatch = $scope.$on('ndPickingPackingActions::openSendcloudLabelsDialog', function (event) {\n      $scope.$broadcast('ndPickingPacking::openSendcloudLabelsDialog');\n    });\n\n    var gridUpdateCountersUnwatch = $scope.$on('ndPickingPacking::updateCounters', function (event) {\n      getCount();\n    });\n\n    var gridStatusLoadedUnwatch = $scope.$on('ndGrid::statusLoaded', function (event, status) {\n      applyGlobalStatusToCurrentStatus();\n\n      $timeout(function () {\n        $rootScope.$broadcast('ndGrid::filtersChanged');\n      }, 0);\n    });\n\n    var gridClearUnwatch = $scope.$on('ndFilter::clear', function (event, data) {\n\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        'FILTER_BY_ORDER_TYPE': 'orderTypes',\n        'FILTER_BY_PAYMENT_STATUS': 'paymentStatuses',\n        'FILTER_BY_WARNING': 'warning',\n        'FILTER_BY_INCIDENCE': 'incidence'\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          filterChanged();\n          /*$timeout(function() {\n            vm.reloadTable();\n          }, 0);*/\n        }\n      }\n    });\n\n    $scope.$on('$destroy', function () {\n      gridApiInitializedUnwatch();\n      gridGeneratePickingOrderUnwatch();\n      gridGeneratePackingOrderUnwatch();\n      gridOpenShippingPackingDialogUnwatch();\n      gridOpenSendcloudLabelsDialogUnwatch();\n      gridUpdateCountersUnwatch();\n      gridStatusLoadedUnwatch();\n      gridClearUnwatch();\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    vm.toggleSidenav = toggleSidenav;\n    vm.toggleSidenavDesktop = toggleSidenavDesktop;\n    vm.getFilterNotifications = getFilterNotifications;\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\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 getFilterNotifications() {\n      var result = 0;\n      result += vm.globalStatus.search !== '' ? 1 : 0;\n      result += vm.globalStatus.targetWarehouses && vm.globalStatus.targetWarehouses.length > 0 ? 1 : 0;\n      result += vm.globalStatus.sourceWarehouses && vm.globalStatus.sourceWarehouses.length > 0 ? 1 : 0;\n      result += vm.globalStatus.paymentStatuses && vm.globalStatus.paymentStatuses.length > 0 ? 1 : 0;\n      result += vm.globalStatus.orderTypes && vm.globalStatus.orderTypes.length > 0 ? 1 : 0;\n      result += vm.globalStatus.stockAvailability !== null && vm.globalStatus.stockAvailability !== undefined ? 1 : 0;\n      result += vm.globalStatus.unitsFilter !== null && vm.globalStatus.unitsFilter !== undefined ? 1 : 0;\n      result += vm.globalStatus.warning !== null && vm.globalStatus.warning !== undefined ? 1 : 0;\n      result += vm.globalStatus.incidence !== null && vm.globalStatus.incidence !== undefined ? 1 : 0;\n      return result;\n    }\n\n    function getGlobalStatus() {\n      var loadedStatus = StorageService.getPickingPackingControllerGlobalStatus();\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        StorageService.setPickingPackingControllerCurrentNavItem(vm.currentNavItem);\n      } else {\n        var storedNav = StorageService.getPickingPackingControllerCurrentNavItem();\n        if (storedNav) {\n          vm.currentNavItem = storedNav;\n          vm.currentItem = vm.navItems[vm.currentNavItem];\n        } else {\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      vm.status = getCurrentStatus();\n      applyGlobalStatusToCurrentStatus();\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      StorageService.setPickingPackingControllerCurrentNavItem(vm.currentNavItem);\n      vm.status = getCurrentStatus();\n      applyGlobalStatusToCurrentStatus();\n      vm.status.pageNumber = 1;\n      getCount();\n    }\n\n    function clearFilter(filter) {\n      vm.globalStatus.search = '';\n      vm.globalStatus.sourceWarehouses = null;\n      vm.globalStatus.targetWarehouses = null;\n      vm.globalStatus.orderTypes = null;\n      vm.globalStatus.stockAvailability = null;\n      vm.globalStatus.unitsFilter = null;\n      vm.globalStatus.paymentStatuses = null;\n      vm.globalStatus.warning = null;\n      vm.globalStatus.incidence = null;\n      //$rootScope.$broadcast('ndProductsFilters::clearFilters');\n      //vm.reloadTable();\n      filterChanged();\n    }\n\n    function reloadTable() {\n      StorageService.setPickingPackingControllerGlobalStatus({\n        search: vm.globalStatus.search,\n        sourceWarehouses: vm.globalStatus.sourceWarehouses,\n        targetWarehouses: vm.globalStatus.targetWarehouses,\n        stockAvailability: vm.globalStatus.stockAvailability,\n        unitsFilter: vm.globalStatus.unitsFilter,\n        orderTypes: vm.globalStatus.orderTypes\n      });\n      applyGlobalStatusToCurrentStatus();\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.filters.paymentStatuses, new: vm.globalStatus.paymentStatuses },\n          { old: vm.status.filters.warning, new: vm.globalStatus.warning },\n          { old: vm.status.filters.incidence, new: vm.globalStatus.incidence },\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 createGridStatus() {\n      return {\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          paymentStatuses: null,\n          warning: null,\n          incidence: null,\n        },\n        dynamicFilters: {},\n        pageNumber: 1,\n        pageSize: UiGridService.DEFAULT_PAGE_SIZE\n      };\n    }\n\n    function getCurrentStatus() {\n      return vm.statuses[vm.currentNavItem] || vm.statuses['to-prepare'];\n    }\n\n    function applyGlobalStatusToCurrentStatus() {\n      vm.status = getCurrentStatus();\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      vm.status.filters.paymentStatuses = vm.globalStatus.paymentStatuses;\n      vm.status.filters.warning = vm.globalStatus.warning;\n      vm.status.filters.incidence = vm.globalStatus.incidence;\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})\n\n();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('PickingController', PickingController);\n\n  /** @ngInject */\n  function PickingController(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, $window) {\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.getConfirmActionLabelKey = getConfirmActionLabelKey;\n    vm.executeConfirm = executeConfirm;\n    vm.setConfirmAction = setConfirmAction;\n\n    vm.CONFIRM_ACTIONS = {\n      CONFIRM: 'CONFIRM',\n      CONFIRM_AND_GO_BACK_TO_PICKING: 'CONFIRM_AND_GO_BACK_TO_PICKING',\n      CONFIRM_AND_GO_TO_PACKING: 'CONFIRM_AND_GO_TO_PACKING',\n      CONFIRM_AND_GO_TO_SCAN_AND_GO: 'CONFIRM_AND_GO_TO_SCAN_AND_GO',\n      CONFIRM_AND_START_PACKING: 'CONFIRM_AND_START_PACKING',\n      CONFIRM_AND_PACK: 'CONFIRM_AND_PACK',\n      CONFIRM_AND_SHIP: 'CONFIRM_AND_SHIP'\n    };\n\n    var CONFIRM_ACTION_STORAGE_KEY = 'inventory.picking.confirmAction';\n\n    try {\n      var storedAction = $window.localStorage.getItem(CONFIRM_ACTION_STORAGE_KEY);\n      vm.confirmAction = storedAction || vm.CONFIRM_ACTIONS.CONFIRM_AND_GO_TO_PACKING;\n    } catch (e) {\n      vm.confirmAction = vm.CONFIRM_ACTIONS.CONFIRM_AND_GO_TO_PACKING;\n    }\n\n    function setConfirmAction(type, $event) {\n      if ($event && $event.stopPropagation) {\n        $event.stopPropagation();\n      }\n      if (!type || !vm.CONFIRM_ACTIONS[type]) {\n        vm.confirmAction = vm.CONFIRM_ACTIONS.CONFIRM;\n      } else {\n        vm.confirmAction = vm.CONFIRM_ACTIONS[type];\n      }\n      try {\n        $window.localStorage.setItem(CONFIRM_ACTION_STORAGE_KEY, vm.confirmAction);\n      } catch (e) {}\n    }\n\n    function getConfirmActionLabelKey() {\n      switch (vm.confirmAction) {\n        case vm.CONFIRM_ACTIONS.CONFIRM_AND_GO_BACK_TO_PICKING:\n          return 'PICKING.CONFIRM_AND_GO_BACK_TO_PICKING';\n        case vm.CONFIRM_ACTIONS.CONFIRM_AND_GO_TO_PACKING:\n          return 'PICKING.CONFIRM_AND_GO_TO_PACKING';\n        case vm.CONFIRM_ACTIONS.CONFIRM_AND_GO_TO_SCAN_AND_GO:\n          return 'PICKING.CONFIRM_AND_GO_TO_SCAN_AND_GO';\n        case vm.CONFIRM_ACTIONS.CONFIRM_AND_START_PACKING:\n          return 'PICKING.CONFIRM_AND_START_PACKING';\n        case vm.CONFIRM_ACTIONS.CONFIRM_AND_PACK:\n          return 'PICKING.CONFIRM_AND_MARK_ALL_ORDERS_AS_PACKED';\n        case vm.CONFIRM_ACTIONS.CONFIRM_AND_SHIP:\n          return 'PICKING.CONFIRM_AND_MARK_ALL_ORDERS_AS_SHIPPED';\n        case vm.CONFIRM_ACTIONS.CONFIRM:\n        default:\n          return 'PICKING.CONFIRM';\n      }\n    }\n    vm.saveStatus = saveStatus;\n    vm.loadStatus = loadStatus;\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\n      var handleResponse = 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 || status === HTTP_STATUS.HTTP_201_CREATED) {\n          vm.generating_pickable_pdf = false;\n          var sampleArr = byteArrayBufferService.base64ToArrayBuffer(b64);\n          byteArrayBufferService.saveByteArray('Picking Order', sampleArr);\n        } else {\n          vm.generating_pickable_pdf = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      };\n      var data = {};\n      if (vm.keptSelectionArray && vm.keptSelectionArray.length) {\n        data.selected_ids = vm.keptSelectionArray.map(function(id) {\n          return parseInt(id, 10);\n        });\n      }\n\n      api.inventories.pickingOrder.save(\n        {\n          id: vm.pickingOrder.id,\n          option: 'get-pdf-file'\n        },\n        data,\n        handleResponse\n      );\n    }\n\n\n    function executeConfirm() {\n      vm.finishing = true;\n\n      var pack = false;\n      var ship = false;\n\n      switch (vm.confirmAction) {\n        case vm.CONFIRM_ACTIONS.CONFIRM_AND_GO_BACK_TO_PICKING:\n          pack = false; ship = false;\n          break;\n        case vm.CONFIRM_ACTIONS.CONFIRM_AND_GO_TO_PACKING:\n          pack = false; ship = false;\n          break;\n        case vm.CONFIRM_ACTIONS.CONFIRM_AND_GO_TO_SCAN_AND_GO:\n          pack = false; ship = false;\n          break;\n        case vm.CONFIRM_ACTIONS.CONFIRM_AND_START_PACKING:\n          pack = false; ship = false;\n          break;\n        case vm.CONFIRM_ACTIONS.CONFIRM_AND_PACK:\n          pack = true; ship = false;\n          break;\n        case vm.CONFIRM_ACTIONS.CONFIRM_AND_SHIP:\n          pack = true; ship = true;\n          break;\n        case vm.CONFIRM_ACTIONS.CONFIRM:\n        default:\n          pack = false; ship = false;\n          break;\n      }\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 (vm.confirmAction === vm.CONFIRM_ACTIONS.CONFIRM_AND_START_PACKING) {\n                  finishAndStartPacking(pickAll);\n                } else if (!pack) {\n                  finishPicking(pickAll);\n                } else {\n                  finishAndPackPickingOrder(pickAll, ship);\n                }\n              });\n            } else {\n\n              if (vm.confirmAction === vm.CONFIRM_ACTIONS.CONFIRM_AND_START_PACKING) {\n                finishAndStartPacking(true);\n              } else 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 finishAndStartPacking(allPicked) {\n      vm.finishing = true;\n      api.inventories.pickingOrder.update(\n        {\n          id: vm.pickingOrder.id,\n          option: 'finish-and-start-packing',\n          all_picked: allPicked\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            $state.go('app.inventory.picking_packing.packing_order.products', {id: response.packing_order_id});\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    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              var targetTab = sendPackingOrder ? 'shipped' : 'packed';\n              $state.go('app.inventory.picking_packing', { tab: targetTab });\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 if (vm.confirmAction === vm.CONFIRM_ACTIONS.CONFIRM_AND_GO_BACK_TO_PICKING) {\n              $state.go('app.inventory.picking_packing', { tab: 'to-prepare' });\n            } else if (vm.confirmAction === vm.CONFIRM_ACTIONS.CONFIRM_AND_GO_TO_SCAN_AND_GO) {\n              $state.go('app.ecommerce.scan_and_go');\n            } else {\n              // Other actions go to 'picked': CONFIRM_AND_GO_TO_PACKING\n              $state.go('app.inventory.picking_packing', { tab: 'picked' });\n            }\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    // Storage key to persist grid state for this view\n    var STORAGE_KEY = 'PickingController::GridStatusV2';\n\n    function saveStatus() {\n      try {\n        var state = {\n          ordering: vm.status.ordering || '',\n          pageNumber: vm.status.pageNumber || 1,\n          pageSize: vm.status.pageSize || UiGridService.DEFAULT_PAGE_SIZE,\n          search: vm.status.search || '',\n          columns: []\n        };\n        if (vm.gridOptions && Array.isArray(vm.gridOptions.columnDefs)) {\n          vm.gridOptions.columnDefs.forEach(function(def, idx) {\n            state.columns.push({\n              name: def.field,\n              visible: !!def.visible,\n              width: def.width || null,\n              position: idx\n            });\n          });\n        }\n        localStorage.setItem(STORAGE_KEY, JSON.stringify(state));\n      } catch (e) { /* ignore */ }\n    }\n\n    function loadStatus() {\n      try {\n        var raw = localStorage.getItem(STORAGE_KEY);\n        if (!raw) { return; }\n        var state = JSON.parse(raw);\n        vm.status.ordering = state.ordering || vm.status.ordering;\n        vm.status.pageNumber = state.pageNumber || vm.status.pageNumber;\n        vm.status.pageSize = state.pageSize || vm.status.pageSize;\n        vm.status.search = state.search || vm.status.search;\n\n        if (state.columns && vm.gridOptions && Array.isArray(vm.gridOptions.columnDefs)) {\n          // Map saved state by field\n          var byName = {};\n          state.columns.forEach(function(c){ byName[c.name] = c; });\n\n          // Apply visibility and width\n          vm.gridOptions.columnDefs.forEach(function(def){\n            var c = byName[def.field];\n            if (c) {\n              def.visible = !!c.visible;\n              if (c.width) { def.width = c.width; }\n            }\n          });\n\n          // Reorder columns according to saved positions\n          // Build an array sorted by position and then reassign columnDefs in that order\n          var sorted = vm.gridOptions.columnDefs.slice().sort(function(a, b){\n            var pa = byName[a.field] ? byName[a.field].position : 0;\n            var pb = byName[b.field] ? byName[b.field].position : 0;\n            return pa - pb;\n          });\n          vm.gridOptions.columnDefs = sorted;\n\n          // Notify grid of structural changes\n          if (vm.gridApi && vm.gridApi.core) {\n            vm.gridApi.core.notifyDataChange(uiGridConstants.dataChange.COLUMN);\n          }\n        }\n      } catch (e) { /* ignore */ }\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          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, newPosition) {\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        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=\"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        meta: {\n          displayName: $filter('translate')('PICKING.METADATA'),\n          headerTooltip: $filter('translate')('PICKING.METADATA'),\n          field: 'meta',\n          permission: true,\n          visible: getColumnStatusVisibility('meta', false, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-if=\"row.entity.meta && row.entity.meta.length\">' +\n                        '  <span ng-repeat=\"item in row.entity.meta track by $index\">' +\n                        '    <strong>{{item.key}}</strong>: {{item.value}}<span ng-if=\"!$last\"> | </span>' +\n                        '  </span>' +\n                        '</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          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, StorageService) {\n\n    // Data\n    var vm = this;\n    vm.currentNavItem = 'details';\n    vm.packingOrder = new PackingOrder(PackingOrderData);\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    vm.packNext = packNext;\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      var orderType = vm.packingOrder && vm.packingOrder.orderType ? String(vm.packingOrder.orderType).toUpperCase() : null;\n      if (!orderType) {\n        return '';\n      }\n\n      var translationKey = article ? ('PACKING.' + orderType + '_WITH_ARTICLE') : ('PACKING.' + orderType);\n      var translated = $filter('translate')(translationKey);\n      return translated === translationKey ? orderType : translated;\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    function packNext() {\n\n      if(vm.creating){\n        return;\n      }\n\n      var globalStatus = StorageService.getPickingPackingControllerGlobalStatus();\n      var params = {};\n      params.status = 3;\n      if (globalStatus.sourceWarehouses && globalStatus.sourceWarehouses.length) {\n        params.source_warehouses = globalStatus.sourceWarehouses.map(function(w){ return w.id || w; }).join(',');\n      }\n      if (globalStatus.targetWarehouses && globalStatus.targetWarehouses.length) {\n        params.target_warehouses = globalStatus.targetWarehouses.map(function(w){ return w.id || w; }).join(',');\n      }\n      if (globalStatus.orderTypes && globalStatus.orderTypes.length) {\n        params.order_types = globalStatus.orderTypes.join(',');\n      }\n      if (globalStatus.search) { params.search = globalStatus.search; }\n      if (globalStatus.stockAvailability) { params.stock_availability = globalStatus.stockAvailability; }\n      if (globalStatus.unitsFilter) { params.units_filter = globalStatus.unitsFilter; }\n\n      vm.creating = true;\n      // Llamar al backend para obtener el siguiente pedido pickeable con los filtros actuales\n      api.inventories.pickingPackingPickableOrders.get(\n        angular.extend({ option: 'next-pickable-id' }, params),\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK && response && response.result) {\n            var next = response.result;\n            // Crear el PackingOrder con el siguiente pickable\n            api.inventories.pickingPackingPackingOrder.save({\n              picking_order_id: next.picking_order_id,\n              pickable_order_ids: [next.delivery_order_id],\n              order_type: next.order_type\n            }, function (resp, _fn, st) {\n              vm.creating = false;\n              if (st === HTTP_STATUS.HTTP_201_CREATED) {\n                $state.go('app.inventory.picking_packing.packing_order.products', { id: resp.id });\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            });\n          } else {\n            vm.creating = false;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PACKING.NO_NEXT_IN_QUEUE')).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('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.privacy_contracts') ||\n              Session.hasPermission('app.inventory.configuration.taxes') ||\n              Session.hasPermission('app.inventory.configuration.email')||\n              Session.hasPermission('app.inventory.configuration.documents') ||\n              Session.hasPermission('app.inventory.configuration.developers')\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      CONTRACTS: {\n        type: 'button',\n        serf: 'app.public_registration_management',\n        icon: 'icon-text-box',\n        title: 'PRIVACY_CONTRACTS',\n        show: Session.hasPermission('app.inventory.configuration.privacy_contracts')\n      },\n\n      SUPPORT: {\n        type: 'button',\n        serf: 'app.inventory.configuration.support',\n        icon: 'icon-home',\n        title: 'SUPPORT',\n        show: Session.hasPermission('app.inventory.configuration.support') && (\n          Session.company.isPlanBusiness() ||\n          Session.company.isPlanPartner()\n        ),\n        newFeatureBadgeId: 'TEMPORARY_ACCOUNT_ACCESS'\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      DEVELOPERS: {\n        type: 'button',\n        serf: 'app.inventory.configuration.developers',\n        icon: 'icon-code-tags',\n        title: 'DEVELOPERS',\n        show: Session.hasPermission('app.inventory.configuration.developers')\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      PICKING_PACKING_CONFIGURATION: {\n        type: 'button',\n        serf: 'app.inventory.configuration.picking_packing',\n        title: 'PICKING_PACKING',\n        show: Session.hasPermission('app.inventory.configuration.picking_packing')\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  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('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\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 = getCurrentNavItem();\n\n    // Methods\n    vm.goBack = goBack;\n\n    initialize();\n\n    // Functions\n    function initialize() {\n    }\n\n    function getCurrentNavItem() {\n      var stateName = $state.current.name;\n      if (stateName.indexOf('operations') !== -1) {\n        return 'operations';\n      }\n      return 'details';\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('HandlerEventsController', HandlerEventsController);\n\n  /** @ngInject */\n  function HandlerEventsController(\n    $scope,\n    $filter,\n    $state,\n    api,\n    EventBadgeHelper,\n    EventListHelper,\n    SEARCH_MAX_LENGTH\n  ) {\n    var vm = this;\n    var filterKeys = ['operation_type', 'statuses', 'dateRange'];\n\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    vm.statuses = [\n      { id: 1, name: $filter('translate')('HANDLER_EVENTS.STATUS_PENDING') },\n      { id: 2, name: $filter('translate')('HANDLER_EVENTS.STATUS_PROCESSING') },\n      { id: 3, name: $filter('translate')('HANDLER_EVENTS.STATUS_PROCESSED') },\n      { id: 4, name: $filter('translate')('HANDLER_EVENTS.STATUS_WITH_ERRORS') }\n    ];\n\n    vm.operationTypes = [\n      'sale_order.ordered',\n      'contact.updated',\n      'contact.created',\n      'uid_stock.manually_updated',\n      'uid_stock.created',\n      'integration_installed_app.enabled',\n      'integration_installed_app.disabled',\n      'user.created',\n      'user.workday_started',\n      'user.workday_paused',\n      'user.workday_finished',\n      'cash_movement.created',\n      'register_activity.closed',\n      'site_order.pending_to_import',\n      'stock.moved',\n      'stock.manually_updated',\n      'stock.belonging_to_bundle_moved',\n      'stocktaking_order.apply_started',\n      'stocktaking_order.apply_finished',\n      'company.all_data_uploaded_to_stockagile_data',\n      'picking_order.finished',\n      'warehouse.created',\n      'warehouse.updated',\n      'pos_order.created',\n      'pos_order.updated',\n      'pos_order.closed',\n      'pos_order.created_from_site_order',\n      'pos_order.updated_from_site_order',\n      'pos_order.created_in_draft',\n      'pos_order_invoice.closed',\n      'invoice.closed',\n      'pos_order_fulfillment.shipped',\n      'pos_order_fulfillment.returned',\n      'pos_order_fulfillment.cancelled',\n      'pos_order_fulfillment.picked_up',\n      'pos_order_fulfillment.warehouse_changed',\n      'pos_order_fulfillment.split',\n      'pos_order_fulfillment.status_updated',\n      'verifactu.deactivated',\n      'verifactu.activated',\n      'verifactu.promoted_to_prod',\n      'billing_integrity_check.started',\n      'billing_anomaly.detected',\n      'audit_in_events.started',\n      'anomaly_in_events.detected',\n      'billing_records.exported',\n      'event_records.exported',\n      'periodic_summary.logged'\n    ].map(function(operationType) {\n      return {\n        id: operationType,\n        name: EventBadgeHelper.getHandlerOperationBadgeData(operationType).label\n      };\n    });\n\n    vm.reloadEvents = EventListHelper.createReloadFn(vm, '_reloadTimeout');\n    vm.clearSearch = clearSearch;\n    vm.clearFilter = clearFilter;\n    vm.goBack = goBack;\n\n    vm.status = EventListHelper.createStatus({ operation_type: [] });\n    vm.listConfig = {\n      url: api.urls.integrationApps.handlerEvents,\n      expand: 'integration_event',\n      storageLabel: 'UIGridHandlerEventsListV2',\n      columnsConfig: {\n        translationPrefix: 'HANDLER_EVENTS',\n        idTranslationKey: 'EVENT_ID',\n        processedAtTranslationKey: 'PROCESSED_AT',\n        operationTypeTranslationKey: 'OPERATION_TYPE',\n        statusTranslationKey: 'STATUS',\n        detailState: 'app.integration_apps.handler_events.detail',\n        detailStateParam: 'id',\n        badgeDirective: 'nd-handler-event-badge',\n        statusEnableSorting: true\n      }\n    };\n\n    EventListHelper.setupStatusLoadedListener($scope, vm.status, filterKeys, true);\n\n    function clearFilter() {\n      EventListHelper.resetFilters(vm.status, filterKeys);\n      vm.reloadEvents();\n    }\n\n    function clearSearch() {\n      vm.status.search = '';\n      vm.reloadEvents();\n    }\n\n    function goBack() {\n      $state.go('app.integration_apps.apps');\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            parameters:{\n              forceCustomer: false,\n              forceNaturalPersonType: false\n            }\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            parameters: {\n              forceCustomer: true,\n              forceNaturalPersonType: true\n            }\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.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  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  '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_PRODUCT_SYNC'))\n        .renderWith(function(data, type, full) {\n          return $filter('date')(data, 'short');\n        }),\n      DTColumnBuilder.newColumn('last_stock_sync').withTitle($filter('translate')('SITES.LAST_STOCK_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 && WarehousesData.results ? WarehousesData.results : [];\n    vm.paymentMethods = PaymentMethodsData && PaymentMethodsData.results ? PaymentMethodsData.results : [];\n    vm.shippingBoxes = ShippingBoxesData && ShippingBoxesData.results ? 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    vm.currentFulfillmentId = $stateParams.currentFulfillmentId || null;\n    vm.initializedFromOrdersList = !!($stateParams.orderId && $stateParams.currentFulfillmentId);\n    vm.loadingNeighbours = false;\n    vm.loadingOrder = false;\n    vm.startPreparingLoading = false;\n    vm.navigationDirection = null;\n    vm.neighbours = {\n      previous: null,\n      next: null,\n      currentPosition: null,\n      totalCount: null\n    };\n\n    // Methods\n    vm.cancel = cancel;\n    vm.closeBanner = closeBanner;\n    vm.warehouseChanged = warehouseChanged;\n    vm.setOderTypeChanged = setOderTypeChanged;\n    vm.selectFulfillment = selectFulfillment;\n    vm.openScanner = openScanner;\n    vm.startPreparingOrders = startPreparingOrders;\n    vm.loadNeighbours = loadNeighbours;\n    vm.goToPreviousOrder = goToPreviousOrder;\n    vm.goToNextOrder = goToNextOrder;\n    vm.canNavigateToPrevious = canNavigateToPrevious;\n    vm.canNavigateToNext = canNavigateToNext;\n    vm.getNavigationPositionText = getNavigationPositionText;\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', onPickingFinished);\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\n      var warehouses = vm.warehouses || [];\n      if (!warehouses.length) {\n        return null;\n      }\n\n      var principal = warehouses.find(function(warehouse) {\n        return warehouse.is_principal;\n      });\n      return principal ? principal.id : 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        vm.startPreparingLoading = false;\n        vm.loadingOrder = false;\n        vm.loadingNeighbours = false;\n        vm.navigationDirection = null;\n        setBanner(null, null);\n        vm.selectedFulfillment = null;\n        vm.currentFulfillmentId = null;\n        resetNeighbours();\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 startPreparingOrders() {\n      if (vm.startPreparingLoading) {\n        return;\n      }\n\n      vm.startPreparingLoading = true;\n\n      var params = angular.extend(\n        {\n          id: null,\n          option: 'scan-and-go-first'\n        },\n        buildNeighboursParams()\n      );\n\n      api.ecommerce.fulfillments.get(params, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK && response && response.pos_order_id && response.fulfillment_id) {\n          loadOrder(response);\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SCAN_AND_GO.NO_RESULTS_FOUND')).position('top right'));\n        }\n        vm.startPreparingLoading = false;\n      });\n    }\n\n    function onPickingFinished(event, params) {\n      if (params && params.goToNextOrder && vm.neighbours.next) {\n        vm.navigationDirection = 'next';\n        loadOrder(vm.neighbours.next);\n        return;\n      }\n\n      if (params && params.goToNextOrder && vm.currentFulfillmentId) {\n        loadNeighbours('next', function(neighbour) {\n          if (neighbour) {\n            vm.navigationDirection = 'next';\n            loadOrder(neighbour);\n            return;\n          }\n          cancel();\n        });\n        return;\n      }\n      cancel();\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, preferredFulfillmentId) {\n      vm.posOrder = posOrder;\n      vm.selectedFulfillment = null;\n      vm.sendcloudShippingMethodsDict = {};\n      if (vm.posOrder.canShipItems() && vm.posOrder.allowToFulfillOnPlatform() && vm.posOrder.hasOrderEditPermission()) {\n        var availableFulfillment = null;\n\n        vm.posOrder.pos_order_fulfillments.forEach(function(posOrderFulfillment) {\n          if (!posOrderFulfillment.allowShip() || isExternalShipment(vm.posOrder, posOrderFulfillment)) {\n            return;\n          }\n\n          if (!availableFulfillment) {\n            availableFulfillment = posOrderFulfillment;\n          }\n\n          if (preferredFulfillmentId && posOrderFulfillment.id === preferredFulfillmentId) {\n            availableFulfillment = posOrderFulfillment;\n          }\n        });\n\n        if (availableFulfillment) {\n          selectFulfillment(availableFulfillment);\n          availableFulfillment.setUpdateActionShip();\n          availableFulfillment.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        }\n      }\n\n      if (vm.currentFulfillmentId) {\n        loadNeighbours();\n      }\n    }\n\n    function buildNeighboursParams() {\n      var params = {\n        view: 'picked',\n        ordering: '-created_at'\n      };\n\n      if (!vm.initializedFromOrdersList) {\n        if (vm.selectedWarehouseId) {\n          params.stockWarehouses = vm.selectedWarehouseId;\n        }\n\n        if (typeof vm.multipleProductsOrder === 'boolean') {\n          params.multipleProductsOrder = vm.multipleProductsOrder ? 'true' : 'false';\n        }\n      }\n\n      return params;\n    }\n\n    function loadNeighbours(direction, callback) {\n      if (!vm.currentFulfillmentId) {\n        resetNeighbours();\n        if (callback) {\n          callback(null);\n        }\n        return;\n      }\n\n      vm.loadingNeighbours = true;\n\n      var params = angular.extend(\n        {\n          id: vm.currentFulfillmentId,\n          option: 'scan-and-go-neighbours'\n        },\n        buildNeighboursParams()\n      );\n\n      api.ecommerce.fulfillments.get(\n        params,\n        function(response, fn, status) {\n          var neighbour = null;\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.neighbours.previous = response.previous || null;\n            vm.neighbours.next = response.next || null;\n            vm.neighbours.currentPosition = response.current_position || null;\n            vm.neighbours.totalCount = response.total_count || null;\n            if (direction === 'previous') {\n              neighbour = vm.neighbours.previous;\n            } else if (direction === 'next') {\n              neighbour = vm.neighbours.next;\n            }\n          } else {\n            resetNeighbours();\n          }\n          if (callback) {\n            callback(neighbour);\n          }\n          vm.loadingNeighbours = false;\n        }\n      );\n    }\n\n    function loadOrder(neighbour) {\n      if (!neighbour || !neighbour.pos_order_id) {\n        vm.navigationDirection = null;\n        return;\n      }\n\n      vm.loadingOrder = true;\n\n      api.inventories.posOrders.get({ id: neighbour.pos_order_id }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.currentFulfillmentId = neighbour.fulfillment_id;\n          setPosOrder(new PosOrder(response), null, neighbour.fulfillment_id);\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.loadingOrder = false;\n        vm.navigationDirection = null;\n      });\n    }\n\n    function goToPreviousOrder() {\n      if (!canNavigateToPrevious()) {\n        return;\n      }\n      vm.navigationDirection = 'previous';\n      loadOrder(vm.neighbours.previous);\n    }\n\n    function goToNextOrder() {\n      if (!canNavigateToNext()) {\n        return;\n      }\n      vm.navigationDirection = 'next';\n      loadOrder(vm.neighbours.next);\n    }\n\n    function canNavigateToPrevious() {\n      return !!(vm.neighbours.previous && !vm.loadingNeighbours && !vm.loadingOrder);\n    }\n\n    function canNavigateToNext() {\n      return !!(vm.neighbours.next && !vm.loadingNeighbours && !vm.loadingOrder);\n    }\n\n    function getNavigationPositionText() {\n      if (!vm.neighbours.currentPosition || !vm.neighbours.totalCount) {\n        return null;\n      }\n\n      return $filter('translate')('SCAN_AND_GO.ORDER_POSITION', {\n        current: vm.neighbours.currentPosition,\n        total: vm.neighbours.totalCount\n      });\n    }\n\n    function resetNeighbours() {\n      vm.neighbours.previous = null;\n      vm.neighbours.next = null;\n      vm.neighbours.currentPosition = null;\n      vm.neighbours.totalCount = null;\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 (fulfillment.id) {\n        vm.currentFulfillmentId = fulfillment.id;\n        loadNeighbours();\n      }\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.changingWarehouse = 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.showBulkChangeWarehouseDialog = showBulkChangeWarehouseDialog;\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          case 'origin_code':\n            return entity.origin_code || '';\n          case 'target_destination':\n            if (entity.target_destination) {\n              var parts = [];\n              if (entity.target_destination.address_1) parts.push(entity.target_destination.address_1);\n              if (entity.target_destination.zip || entity.target_destination.city) {\n                parts.push((entity.target_destination.zip || '') + ' ' + (entity.target_destination.city || ''));\n              }\n              if (entity.target_destination.country && COUNTRIES_DICT[entity.target_destination.country]) {\n                parts.push(COUNTRIES_DICT[entity.target_destination.country]);\n              }\n              return parts.join(', ');\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, defaultVisible) {\n      var initialVisible = (typeof defaultVisible === 'undefined') ? true : defaultVisible;\n      return {\n        displayName: $filter('translate')(title),\n        headerTooltip: $filter('translate')(title),\n        field: name,\n        permission: permission,\n        visible: getColumnStatusVisibility(name, initialVisible, 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          'currentFulfillmentId: row.entity.id, ' +\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 originCodeTemplate = '<div class=\"cell-middle\">' +\n        '<span ng-if=\"row.entity.origin_code\">{{row.entity.origin_code}}</span>' +\n        '<md-icon ng-if=\"row.entity.origin_code\" class=\"cursor-pointer ml-5\" md-font-icon=\"icon-content-copy\" ng-click=\"grid.appScope.vm.copyToClipboard(row.entity.origin_code)\"></md-icon>' +\n        '</div>';\n\n      var targetDestinationTemplate = '<div class=\"cell-middle\">' +\n        '<div ng-if=\"row.entity.target_destination\">{{row.entity.target_destination | largeLocation}}</div>' +\n        '</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        origin_code: constructObject('ORDERS.ORIGIN_CODE', 'origin_code', 1, avoidState, 100, 160, 0, false, 0, originCodeTemplate, null, null, false, vm.currentNavItem === 'to_prepare' || vm.currentNavItem === 'picking'),\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        target_destination: constructObject('ORDERS.DESTINATION', 'target_destination', 1, avoidState, 200, 250, 0, false, 0, targetDestinationTemplate, 'no-wrap', null, false),\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 showBulkChangeWarehouseDialog() {\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\n      $mdDialog.show({\n        controller: 'BulkChangeWarehouseDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/ecommerce/views/orders/dialogs/bulk-change-warehouse/bulk-change-warehouse-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          WarehousesData: WarehousesData\n        }\n      }).then(function(result) {\n        if (result && result.warehouseId) {\n          var warehouse = vm.warehousesDict[result.warehouseId];\n          var warehouseName = warehouse ? warehouse.name : '';\n          \n          var confirmDialog = {\n            controller: 'DialogWithConfirmationController',\n            controllerAs: 'vm',\n            templateUrl: 'app/directives/dialog-with-confirmation/dialog-with-confirmation.html',\n            parent: angular.element($document.find('body')),\n            clickOutsideToClose: true,\n            locals: {\n              params: {\n                title: 'ORDERS.CHANGE_WAREHOUSE',\n                body: 'ORDERS.CONFIRM_BULK_CHANGE_WAREHOUSE',\n                bodyParams: {\n                  warehouseName: warehouseName,\n                  count: count\n                },\n                primaryOptionText: 'ORDERS.CHANGE_WAREHOUSE',\n                primaryOptionCallback: function() {\n                  $mdDialog.hide();\n                  vm.changingWarehouse = true;\n                  api.ecommerce.orders.save(\n                    {\n                      id: null,\n                      option: 'bulk-change-warehouse',\n                      order_ids: orderIds,\n                      warehouse_id: result.warehouseId\n                    },\n                    function(response, fn, status) {\n                      vm.changingWarehouse = false;\n                      if (status === HTTP_STATUS.HTTP_200_OK) {\n                        $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDERS.WAREHOUSE_CHANGE_ENQUEUED')).position('top right'));\n                        if (isOrdersState()) {\n                          getGridOrdersPage();\n                        }\n                      } else {\n                        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                      }\n                    },\n                    function(error) {\n                      vm.changingWarehouse = false;\n                      $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                    }\n                  );\n                },\n                primaryOptionClasses: 'md-raised',\n                cancelClasses: 'stroked'\n              }\n            }\n          };\n          $mdDialog.show(confirmDialog);\n        }\n      });\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          saleOrderDeliveries: null,\n          transferOrderDeliveries: null,\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 (vm.order.autocode && !Session.hasPermission('sale.sales_log.delete')) {\n        return;\n      }\n      if (!vm.order.autocode && !Session.hasPermission('sale.sales_log.delete_draft')) {\n        return;\n      }\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    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 isMissingTicketConfigurationError = response.data &&\n              response.data.error === ERROR_CODES.ERROR_01034_MISSING_TICKET_CONFIGURATION_FOR_WAREHOUSE_OR_SITE;\n\n            if (isMissingTicketConfigurationError) {\n              if (Session.hasPermission('inventory.warehouses.warehouse.details.update')) {\n                var isSiteMissingTicketConfiguration = !!(response.data && response.data.site_id);\n                var bodyCopy = isSiteMissingTicketConfiguration\n                  ? 'SALES_LOG.MISSING_TICKET_CONFIGURATION_SITE_DIALOG_BODY'\n                  : 'SALES_LOG.MISSING_TICKET_CONFIGURATION_DIALOG_BODY';\n\n                var missingTicketConfigurationDialog = $mdDialog.confirm()\n                  .title($filter('translate')('SALES_LOG.MISSING_TICKET_CONFIGURATION_DIALOG_TITLE'))\n                  .htmlContent($filter('translate')(bodyCopy))\n                  .cancel($filter('translate')('GENERAL.CANCEL'))\n                  .ok($filter('translate')('SALES_LOG.MISSING_TICKET_CONFIGURATION_DIALOG_ACTION'));\n\n                $mdDialog.show(missingTicketConfigurationDialog).then(function() {\n                  if (isSiteMissingTicketConfiguration) {\n                    $state.go('app.ecommerce.sites.site.details', { id: response.data.site_id });\n                  } else {\n                    $state.go('app.inventory.warehouses.warehouse.details', { id: response.data.warehouse_id });\n                  }\n                }, function() {\n                });\n              } else {\n                var missingTicketConfigurationNoPermissionDialog = $mdDialog.alert()\n                  .title($filter('translate')('SALES_LOG.MISSING_TICKET_CONFIGURATION_DIALOG_TITLE'))\n                  .htmlContent($filter('translate')('SALES_LOG.MISSING_TICKET_CONFIGURATION_NO_PERMISSION_DIALOG_BODY'))\n                  .ok($filter('translate')('SALES_LOG.UNDERSTOOD'));\n\n                $mdDialog.show(missingTicketConfigurationNoPermissionDialog);\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      }\n\n      params.close = !!closeInvoice;\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          TicketConfigurationData: function($q) {\n            var ticketConfigObj = vm.order && vm.order.register_instance &&\n              vm.order.register_instance.warehouse &&\n              vm.order.register_instance.warehouse.ticket_configuration_object;\n            return $q.resolve(ticketConfigObj || null);\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\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{\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('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, ArtifactService) {\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      ArtifactService.generateInvoiceZip({ invoice_ids: vm.selected }, function () {\n        vm.waiting = false;\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      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.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, SelectSerialNumberTypeDialogService) {\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.loadingDeliveries = false;\n      vm.showRequiredFieldErrors = 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.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.createCancellationInvoice = createCancellationInvoice;\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      vm.canNotEditSerialNumber = canNotEditSerialNumber;\n      vm.canNotEditBillingDate = canNotEditBillingDate;\n      vm.canBeDeleted = canBeDeleted;\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        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 initializeInvoiceSerialNumberType() {\n        if (vm.invoice.isReadOnly() || 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 && ConfigurationData.results[0] ? ConfigurationData.results[0].wholesale_invoice_default_serial_number_type : null;\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        if (vm.invoice.isReadOnly()) {\n          return;\n        }\n        if (invoiceLine) {\n          invoiceLine.tax_instance = getTaxById(invoiceLine.tax);\n        }\n\n        if (!avoidRefreshTotals) {\n          refreshAllTotalPrices();\n        }\n      }\n\n      function refreshAllTotalPrices() {\n        if (vm.invoice.isReadOnly()) {\n          return;\n        }\n\n        vm.invoice.updatePrices(vm.taxes);\n      }\n\n      vm.getTaxTotalAmount = function(subtotal) {\n        var total = 0;\n\n        if (subtotal.amount) {\n          total += subtotal.amount;\n        }\n\n        if (vm.invoice.surcharge && subtotal.surcharge_amount) {\n          total += subtotal.surcharge_amount;\n        }\n\n        return Utils.roundPrice(total);\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        vm.showRequiredFieldErrors = false;\n\n        if (!vm.invoice.customer || !vm.invoice.serial_number_type) {\n          vm.showRequiredFieldErrors = true;\n          if ($scope.invoiceForm && angular.isFunction($scope.invoiceForm.$setSubmitted)) {\n            $scope.invoiceForm.$setSubmitted();\n          }\n          return false;\n        }\n\n        if (!$scope.invoiceForm.$valid) {\n          vm.showRequiredFieldErrors = true;\n          if (angular.isFunction($scope.invoiceForm.$setSubmitted)) {\n            $scope.invoiceForm.$setSubmitted();\n          }\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 pendingCalls = 0;\n\n          function startLoading() {\n            pendingCalls++;\n            vm.loadingDeliveries = true;\n          }\n\n          function finishLoading() {\n            pendingCalls--;\n            if (pendingCalls <= 0) {\n              vm.loadingDeliveries = false;\n            }\n          }\n\n          if (response.sales.length > 0) {\n            startLoading();\n            api.accounting.invoices.save({\n              id: vm.invoice.id,\n              option: 'add-deliveries',\n              sale_order_deliveries: response.sales\n            }, function(response) {\n              vm.invoice.updateLines(response.invoice_lines);\n              refreshAllTotalPrices();\n              finishLoading();\n            }, function() {\n              finishLoading();\n            });\n          }\n\n          if (response.transfers.length > 0) {\n            startLoading();\n            api.accounting.invoices.save({\n              id: vm.invoice.id,\n              option: 'add-deliveries',\n              transfer_order_deliveries: response.transfers\n            }, function(response) {\n              vm.invoice.updateLines(response.invoice_lines);\n              refreshAllTotalPrices();\n              finishLoading();\n            }, function() {\n              finishLoading();\n            });\n          }\n\n          if (response.purchases.length > 0) {\n            startLoading();\n            api.accounting.invoices.save({\n              id: vm.invoice.id,\n              option: 'add-deliveries',\n              purchase_order_deliveries: response.purchases\n            }, function(response) {\n              vm.invoice.updateLines(response.invoice_lines);\n              refreshAllTotalPrices();\n              finishLoading();\n            }, function() {\n              finishLoading();\n            });\n          }\n\n          if (response.fiscalAddressPosOrders.length > 0) {\n            startLoading();\n            api.accounting.invoices.save({\n              id: vm.invoice.id,\n              option: 'add-deliveries',\n              pos_orders: response.fiscalAddressPosOrders\n            }, function(response) {\n              vm.invoice.updateLines(response.invoice_lines);\n              refreshAllTotalPrices();\n              finishLoading();\n            }, function() {\n              finishLoading();\n            });\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        if (invoiceCopy.invoice_lines) {\n          invoiceCopy.invoice_lines.forEach(function(line) {\n            if (line.discount === null || line.discount === undefined) {\n              line.discount = 0;\n            }\n          });\n        }\n\n        if (invoiceCopy.expiration_date) {\n          invoiceCopy.expiration_date = moment(invoiceCopy.expiration_date).format('YYYY-MM-DD');\n        }\n\n        if (invoiceCopy.billing_date) {\n          invoiceCopy.billing_date = moment(invoiceCopy.billing_date).format('YYYY-MM-DD');\n        }\n\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 === HTTP_STATUS.HTTP_200_OK) {\n              vm.invoice = new Invoice(response);\n              initialize();\n            } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('ERRORS.' + response.error_code)).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            $scope.invoiceForm.$setPristine();\n            deferred.resolve();\n          });\n        }\n        return deferred.promise;\n      }\n\n      function confirmInvoicePricingTierUpdate(ev) {\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          updateInvoicePricingTier();\n        }, function() {\n          vm.invoice.pricing_tier = vm.previousPricingTier;\n        });\n      }\n\n      function updateInvoicePricingTier() {\n        var payload = {\n          id: vm.invoice.id,\n          pricing_tier: vm.invoice.pricing_tier\n        };\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          } 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        $mdDialog.show({\n          controller: 'SelectSerialNumberTypeDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/accounting/views/invoices/dialogs/select-serial-number-type/select-serial-number-type-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: true,\n          locals: {\n            invoiceType: vm.invoice.type\n          },\n          resolve: {\n            ConfigurationData: function(apiResolver) {\n              return apiResolver.resolve('inventories.inventoryConfiguration@get');\n            }, SerialNumberTypesData: function(apiResolver) {\n              var serialNumberType = null;\n              if (vm.invoice.type === INVOICE_TYPES.PROFORMA) {\n                serialNumberType = SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PROFORMA_INVOICE;\n              } else if (vm.invoice.type === INVOICE_TYPES.QUOTE) {\n                serialNumberType = SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_QUOTE;\n              } else {\n                serialNumberType = SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_INVOICE;\n              }\n              return apiResolver.resolve('inventories.serialNumberTypes@list', {\n                types: serialNumberType\n              });\n            }\n          }\n        }).then(function(serialNumberTypeId) {\n          vm.waiting = true;\n          api.accounting.invoices.save({\n            serial_number_type: serialNumberTypeId, type: vm.invoice.type\n          }, function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              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              } else if (vm.invoice.type === INVOICE_TYPES.INVOICE) {\n                $state.go('app.accounting.invoices.invoice', { id: response.id });\n              }\n\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.ERROR_TOAST')).position('top right'));\n            }\n            vm.waiting = false;\n          });\n\n        }, function() {\n          // Cancel clicked\n        });\n      }\n\n      function isDisabledInvoice() {\n        return isValidKubiBaiInvoice() || vm.invoice.isReadOnly() || !!vm.saving;\n      }\n\n      function canBeDeleted() {\n        return !(!!vm.invoice.kubibai_invoice_data) && !vm.invoice.is_closed && !(!!vm.saving);\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.invoice.isReadOnly() || !!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      function duplicate() {\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            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              TicketConfigurationData: function($q, api) {\n                if (!vm.invoice.pos_order) {\n                  return $q.resolve(null);\n                }\n                var deferred = $q.defer();\n                api.inventories.posOrders.get({ id: vm.invoice.pos_order.id }, function(response) {\n                  var ticketConfigObj = response.register_instance &&\n                    response.register_instance.warehouse &&\n                    response.register_instance.warehouse.ticket_configuration_object;\n                  deferred.resolve(ticketConfigObj || null);\n                }, function() {\n                  deferred.resolve(null);\n                });\n                return deferred.promise;\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              } else if (response.error) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('ERRORS.' + response.error)).position('top right'));\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 createCancellationInvoice() {\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\n        SelectSerialNumberTypeDialogService.show({\n          title: 'INVOICE.SELECT_CANCELLATION_SERIAL_NUMBER_TYPE_TITLE',\n          message: 'INVOICE.SELECT_CANCELLATION_SERIAL_NUMBER_TYPE_MSG',\n          buttonText: 'INVOICE.CREATE_CANCELLATION_INVOICE',\n          serialNumberTypeType: [\n            SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_INVOICE,\n            SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_CORRECTIVE_INVOICE\n          ],\n          saveConfiguration: false\n        }).then(function(serialNumberTypeId) {\n          var data = {\n            id: vm.invoice.id,\n            option: 'create-cancellation-invoice',\n            serial_number_type_id: serialNumberTypeId\n          };\n\n          vm.saving = true;\n          api.accounting.invoices.save(data, function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('INVOICE.CANCELLATION_INVOICE_SUCCESSFULLY_CREATED')).position('top right'));\n              $state.go('app.accounting.invoices.invoice', { id: response.id });\n            } else if (status === HTTP_STATUS.HTTP_409_CONFLICT && 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            vm.saving = false;\n          });\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 isValidKubiBaiInvoice() || vm.invoice.is_closed || !!vm.saving || isMissingRequiredHoldedData();\n      }\n\n      function fiscalAddressChanged() {\n        if (vm.invoice.isReadOnly()) {\n          return;\n        }\n        filterSerialNumberTypesByIntegrationInstalledApp();\n      }\n\n      function filterSerialNumberTypesByIntegrationInstalledApp() {\n        if (vm.invoice.isReadOnly()) {\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      function canNotEditSerialNumber() {\n        return !vm.invoice.isPurchaseInvoice();\n      }\n\n      function canNotEditBillingDate() {\n        return !vm.invoice.isPurchaseInvoice() && vm.invoice.is_closed;\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, $timeout, HTTP_STATUS, USER_ROLES, SEARCH_MAX_LENGTH, Session, $document, $state, UiGridService, $scope) {\n      var vm = this;\n\n      var PERMISSION_NAME_CELL_TEMPLATE =\n        '<div class=\"ui-grid-cell-contents permission-name-cell\" layout=\"column\" ng-class=\"row.entity.class\">' +\n          '<span>{{row.entity.name}}</span>' +\n          '<small class=\"hint-text\">{{row.entity.code}}</small>' +\n        '</div>';\n\n      var SYSTEM_ROLE_HEADER_TEMPLATE =\n        '<div class=\"ui-grid-cell-contents\" layout=\"row\" layout-align=\"center center\">' +\n          '<span>{{col.displayName}}</span>' +\n        '</div>';\n\n      var ROLE_CELL_TEMPLATE =\n        '<div class=\"ui-grid-cell-contents\" layout=\"row\" layout-align=\"center center\">' +\n          '<md-checkbox' +\n            ' ng-if=\"col.colDef.isCustomRole\"' +\n            ' ng-disabled=\"grid.appScope.vm.saving\"' +\n            ' ng-model=\"grid.appScope.vm.rolesMatrix[col.colDef.roleId][row.entity.id]\"' +\n            ' ng-change=\"grid.appScope.vm.rolesChanged[col.colDef.roleId] = true\"' +\n            ' md-no-ink' +\n            ' class=\"roles-checkbox\">' +\n          '</md-checkbox>' +\n          '<md-icon' +\n            ' ng-if=\"!col.colDef.isCustomRole && grid.appScope.vm.rolesMatrix[col.colDef.roleId][row.entity.id]\"' +\n            ' md-font-icon=\"icon-check\"' +\n            ' class=\"s18 secondary-text\">' +\n          '</md-icon>' +\n        '</div>';\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 that have changed\n      vm.backupRolesMatrix = {};\n      vm.search = '';\n      vm.gridApi = null;\n\n      vm.gridOptions = UiGridService.getGridOptions({\n        useExternalPagination: false,\n        useExternalSorting: false,\n        enableRowSelection: false,\n        enableGridMenu: false,\n        enableSorting: false,\n        saveWidths: false,\n        saveOrder: false,\n        savePinning: false,\n        savePagination: false,\n        headerRowHeight: 50,\n        rowHeight: 40,\n        paginationPageSize: 25,\n        paginationPageSizes: [25, 50, 100, 250],\n        onRegisterApi: initGridApi,\n        data: [],\n        columnDefs: []\n      });\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 initGridApi(gridApi) {\n        vm.gridApi = gridApi;\n        $scope.$watch('vm.search', filterPermissions);\n      }\n\n      function buildColumnDefs() {\n        var columnDefs = [];\n\n        columnDefs.push({\n          name: 'permissionName',\n          displayName: '',\n          field: 'name',\n          pinnedLeft: true,\n          enablePinning: false,\n          minWidth: 350,\n          width: 350,\n          enableSorting: false,\n          enableHiding: false,\n          enableColumnMenu: false,\n          cellTemplate: PERMISSION_NAME_CELL_TEMPLATE\n        });\n\n        var sortedRoles = vm.roles.slice().sort(function(a, b) { return a.id - b.id; });\n        var systemRoles = sortedRoles.filter(function(r) { return r.company === null; });\n        var lastSystemRoleId = systemRoles.length ? systemRoles[systemRoles.length - 1].id : null;\n\n        sortedRoles.forEach(function(role) {\n          var isCustomRole = role.company !== null;\n          var colDef = {\n            name: 'role_' + role.id,\n            displayName: role.title,\n            roleId: role.id,\n            role: role,\n            isCustomRole: isCustomRole,\n            minWidth: 130,\n            width: 130,\n            enableSorting: false,\n            enableHiding: false,\n            enableColumnMenu: false,\n            enablePinning: false,\n            cellTemplate: ROLE_CELL_TEMPLATE\n          };\n\n          if (role.id === lastSystemRoleId) {\n            colDef.cellClass = 'last-system-role-cell';\n            colDef.headerCellClass = 'last-system-role-cell';\n          }\n\n          if (isCustomRole) {\n            colDef.enableColumnMenu = true;\n            colDef.menuItems = [\n              {\n                title: $filter('translate')('ROLES.CHANGE_NAME'),\n                icon: 'ui-grid-icon-pencil',\n                action: function() {\n                  vm.openRoleDialog(null, this.context.col.colDef.role, 'rename');\n                }\n              },\n              {\n                title: $filter('translate')('GENERAL.DELETE'),\n                icon: 'ui-grid-icon-trash',\n                action: function() {\n                  vm.openRoleDialog(null, this.context.col.colDef.role, 'delete');\n                }\n              }\n            ];\n          } else {\n            colDef.headerCellTemplate = SYSTEM_ROLE_HEADER_TEMPLATE;\n          }\n\n          columnDefs.push(colDef);\n        });\n\n        vm.gridOptions.columnDefs = columnDefs;\n      }\n\n      function filterPermissions() {\n        if (!vm.search) {\n          vm.gridOptions.data = vm.permissions;\n          return;\n        }\n\n        var searchLower = vm.search.toLowerCase();\n\n        var matchingRoles = vm.roles.filter(function(role) {\n          return role.title && role.title.toLowerCase().indexOf(searchLower) !== -1;\n        });\n\n        if (matchingRoles.length > 0) {\n          vm.gridOptions.data = vm.permissions.filter(function(permission) {\n            return matchingRoles.some(function(role) {\n              return vm.rolesMatrix[role.id] && vm.rolesMatrix[role.id][permission.id] === true;\n            });\n          });\n          return;\n        }\n\n        vm.gridOptions.data = vm.permissions.filter(function(permission) {\n          return (permission.name && permission.name.toLowerCase().indexOf(searchLower) !== -1) ||\n                 (permission.code && permission.code.toLowerCase().indexOf(searchLower) !== -1);\n        });\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        buildColumnDefs();\n        filterPermissions();\n        $timeout(function(){\n          UiGridService.adjustAllColumns();\n        });\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            if (!role) {\n              return;\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('body')),\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          buildColumnDefs();\n          filterPermissions();\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              foundRole.name = response.name;\n            }\n            buildColumnDefs();\n            filterPermissions();\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          buildColumnDefs();\n          filterPermissions();\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.getCustomerAccumulatedBalance = getCustomerAccumulatedBalance;\n    service.getCustomerAccumulatedBalancePrintDate = getCustomerAccumulatedBalancePrintDate;\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, params) {\n      return $filter('translate')(value, params);\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) {\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) {\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        var customerAccumulatedBalance = getCustomerAccumulatedBalance(posOrder);\n        var customerAccumulatedBalancePrintDate = getCustomerAccumulatedBalancePrintDate(posOrder);\n        posOrder.customer_accumulated_balance_print_date = customerAccumulatedBalancePrintDate;\n        var showCustomerAccumulatedBalance = posOrder.show_customer_accumulated_balance !== false;\n        if (showCustomerAccumulatedBalance && customerAccumulatedBalance !== null) {\n          var customerAccumulatedBalanceLabel = translate(\n            'SALES.TOTAL_ACCUMULATED_BALANCE',\n            {printDate: customerAccumulatedBalancePrintDate}\n          );\n          var customerAccumulatedBalanceValue = price(customerAccumulatedBalance);\n          plainTicket.push('\\n');\n          if (customerAccumulatedBalanceLabel.length > WIDTH - customerAccumulatedBalanceValue.length - 3) {\n            plainTicket.push(customerAccumulatedBalanceLabel + '\\n');\n            plainTicket.push(justify2Text('', customerAccumulatedBalanceValue) + '\\n');\n          } else {\n            plainTicket.push(justify2Text(customerAccumulatedBalanceLabel, customerAccumulatedBalanceValue) + '\\n');\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 getCustomerAccumulatedBalance(posOrder) {\n      if (!posOrder) {\n        return null;\n      }\n\n      var balances = [];\n      if (posOrder.customer_instance) {\n        balances.push(posOrder.customer_instance.balance);\n      }\n      if (posOrder.customerAutocomplete && posOrder.customerAutocomplete.selectedItem) {\n        balances.push(posOrder.customerAutocomplete.selectedItem.balance);\n      }\n      balances.push(posOrder.customer_accumulated_balance);\n      balances.push(posOrder.total_accumulated_balance);\n\n      for (var i = 0; i < balances.length; i++) {\n        if (balances[i] === null || angular.isUndefined(balances[i])) {\n          continue;\n        }\n\n        var customerAccumulatedBalance = parseFloat(balances[i]);\n        if (isNaN(customerAccumulatedBalance) || customerAccumulatedBalance === 0) {\n          continue;\n        }\n\n        return customerAccumulatedBalance;\n      }\n\n      return null;\n    }\n\n    function getCustomerAccumulatedBalancePrintDate(posOrder) {\n      if (posOrder && posOrder.customer_accumulated_balance_print_date) {\n        return posOrder.customer_accumulated_balance_print_date;\n      }\n\n      return $filter('date')(new Date(), 'dd/MM/yyyy');\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, PackingOrderSendcloudData) {\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      this.packingOrderSendcloudData = this._getValue(value, 'packing_order_sendcloud_data', []).map(function (sendcloudData) {\n        return new PackingOrderSendcloudData(sendcloudData);\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      for (var j = 0; j < this.packingOrderSendcloudData.length; j++) {\n        if (this.packingOrderSendcloudData[j].externalParcelId) {\n          return true;\n        }\n      }\n      return false;\n    };\n\n    PackingOrder.prototype.getParcelsList = function () {\n      if (this._parcelsListCache) {\n        return this._parcelsListCache;\n      }\n      \n      var parcels = [];\n      var sendcloudDataWithShippingBox = {};\n      \n      for (var i = 0; i < this.packingOrderShippingBoxes.length; i++) {\n        var posb = this.packingOrderShippingBoxes[i];\n        if (posb.packingOrderSendcloudData) {\n          sendcloudDataWithShippingBox[posb.packingOrderSendcloudData.id] = true;\n          parcels.push({\n            shippingBox: posb,\n            sendcloudData: posb.packingOrderSendcloudData,\n            isProductBox: false\n          });\n        }\n      }\n      \n      for (var j = 0; j < this.packingOrderSendcloudData.length; j++) {\n        var scData = this.packingOrderSendcloudData[j];\n        if (scData.externalParcelId && !sendcloudDataWithShippingBox[scData.id]) {\n          parcels.push({\n            shippingBox: null,\n            sendcloudData: scData,\n            isProductBox: true\n          });\n        }\n      }\n      \n      this._parcelsListCache = parcels;\n      return parcels;\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    vm.serverError = null;\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.serverError = null;\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          if (user && user.data && user.data.error) {\n            vm.serverError = user.data.error;\n          }\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      vm.serverError = null;\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', [])\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.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.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 === 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.shared-kernel.monetary')\n    .factory('MonetaryRounder', _MonetaryRounder);\n\n  function _MonetaryRounder() {\n    var UNIT_BASE_DECIMALS = 6;\n    var INTERMEDIATE_DECIMALS = 3;\n    var FINAL_DECIMALS = 2;\n    var FLOAT_TOLERANCE = 1e-7;\n\n    function _toNumber(value) {\n      var parsedValue = Number(value);\n\n      if (!isFinite(parsedValue)) {\n        return 0;\n      }\n\n      return parsedValue;\n    }\n\n    function _normalizeScaledValue(value) {\n      var normalizedValue = _toNumber(value);\n      var nearestInteger = Math.round(normalizedValue);\n\n      if (Math.abs(normalizedValue - nearestInteger) <= FLOAT_TOLERANCE) {\n        return nearestInteger;\n      }\n\n      return normalizedValue;\n    }\n\n    function _roundHalfUp(value, decimals) {\n      var factor = Math.pow(10, decimals);\n      var scaledValue = _normalizeScaledValue(_toNumber(value) * factor);\n\n      if (scaledValue >= 0) {\n        return Math.floor(_normalizeScaledValue(scaledValue + 0.5)) / factor;\n      }\n\n      return Math.ceil(_normalizeScaledValue(scaledValue - 0.5)) / factor;\n    }\n\n    function _truncate(value, decimals) {\n      var factor = Math.pow(10, decimals);\n      var scaledValue = _normalizeScaledValue(_toNumber(value) * factor);\n\n      if (scaledValue >= 0) {\n        return Math.floor(scaledValue) / factor;\n      }\n\n      return Math.ceil(scaledValue) / factor;\n    }\n\n    function roundUnitBase(value) {\n      return _roundHalfUp(value, UNIT_BASE_DECIMALS);\n    }\n\n    function roundFinal(value) {\n      var truncatedValue = _truncate(value, INTERMEDIATE_DECIMALS);\n\n      return _roundHalfUp(truncatedValue, FINAL_DECIMALS);\n    }\n\n    return {\n      roundUnitBase: roundUnitBase,\n      roundFinal: roundFinal\n    };\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryFiniteNumber', _MonetaryFiniteNumber);\n\n  function _MonetaryFiniteNumber() {\n    function toFiniteNumber(value) {\n      var parsedValue = Number(value);\n\n      if (!isFinite(parsedValue)) {\n        return 0;\n      }\n\n      return parsedValue;\n    }\n\n    return {\n      toFiniteNumber: toFiniteNumber\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel.monetary')\n    .factory('MonetaryCalculationBuilder', _MonetaryCalculationBuilder);\n\n  _MonetaryCalculationBuilder.$inject = [\n    'MonetaryRounder',\n    'LineCalculationStrategySelector',\n    'BaseDocumentCalculationStrategy',\n    'MonetarySummaryDTO',\n    'MonetaryAmountDTO',\n    'MonetaryTaxSummaryDTO',\n    'MonetaryDocumentDTO'\n  ];\n\n  function _MonetaryCalculationBuilder(\n    MonetaryRounder,\n    LineCalculationStrategySelector,\n    BaseDocumentCalculationStrategy,\n    MonetarySummaryDTO,\n    MonetaryAmountDTO,\n    MonetaryTaxSummaryDTO,\n    MonetaryDocumentDTO\n  ) {\n    function MonetaryCalculationBuilder(documentCalculationStrategy) {\n      this._lines = [];\n      this._documentDiscounts = [];\n      this._lineStrategySelector = new LineCalculationStrategySelector();\n      this._documentCalculationStrategy = documentCalculationStrategy\n        || new BaseDocumentCalculationStrategy();\n    }\n\n    MonetaryCalculationBuilder.prototype.addLine = function(line) {\n      this._lines.push(line);\n      return this;\n    };\n\n    MonetaryCalculationBuilder.prototype.addDiscount = function(discount) {\n      this._documentDiscounts.push(discount);\n      return this;\n    };\n\n    MonetaryCalculationBuilder.prototype.build = function() {\n      var lineResults = this._calculateLines();\n      var subtotalBeforeDiscount = this._calculateSubtotalBeforeDiscount(lineResults);\n      var eligibleSubtotalBeforeDiscount = this._calculateEligibleSubtotalBeforeDiscount(\n        lineResults\n      );\n      var taxesBeforeDiscount = this._calculateTaxesBeforeDiscount(lineResults);\n      var totalBeforeDiscount = subtotalBeforeDiscount + taxesBeforeDiscount;\n\n      var documentCalculationResult = this._documentCalculationStrategy.calculate(\n        this._lines,\n        lineResults,\n        this._documentDiscounts,\n        taxesBeforeDiscount,\n        eligibleSubtotalBeforeDiscount\n      );\n\n      var subtotalAfterDiscount = MonetaryRounder.roundFinal(\n        subtotalBeforeDiscount - documentCalculationResult.totalDiscountAmount\n      );\n      var taxesAfterDiscount = documentCalculationResult.taxesAfterDiscount;\n      var totalAfterDiscount = MonetaryRounder.roundFinal(\n        subtotalAfterDiscount + taxesAfterDiscount\n      );\n\n      var summary = new MonetarySummaryDTO(\n        new MonetaryAmountDTO(\n          subtotalAfterDiscount,\n          subtotalBeforeDiscount\n        ),\n        new MonetaryTaxSummaryDTO(\n          taxesAfterDiscount,\n          taxesBeforeDiscount,\n          documentCalculationResult.taxesBreakdown\n        ),\n        new MonetaryAmountDTO(\n          totalAfterDiscount,\n          totalBeforeDiscount\n        )\n      );\n\n      return new MonetaryDocumentDTO(\n        lineResults,\n        documentCalculationResult.discountResults,\n        summary\n      );\n    };\n\n    MonetaryCalculationBuilder.prototype._calculateLines = function() {\n      var self = this;\n\n      return this._lines.map(function(line) {\n        return self._calculateLine(line);\n      });\n    };\n\n    MonetaryCalculationBuilder.prototype._calculateLine = function(line) {\n      var strategy = this._lineStrategySelector.select(line);\n\n      return strategy.calculate(line);\n    };\n\n    MonetaryCalculationBuilder.prototype._calculateSubtotalBeforeDiscount = function(\n      lineResults\n    ) {\n      return lineResults.reduce(function(total, lineResult) {\n        return total + lineResult.taxable_base;\n      }, 0);\n    };\n\n    MonetaryCalculationBuilder.prototype._calculateEligibleSubtotalBeforeDiscount = function(\n      lineResults\n    ) {\n      var self = this;\n\n      return lineResults.reduce(function(total, lineResult, index) {\n        if (self._lines[index].isDocumentDiscountEligible) {\n          return total + lineResult.taxable_base;\n        }\n\n        return total;\n      }, 0);\n    };\n\n    MonetaryCalculationBuilder.prototype._calculateTaxesBeforeDiscount = function(\n      lineResults\n    ) {\n      return lineResults.reduce(function(total, lineResult) {\n        return total + lineResult.tax_amount;\n      }, 0);\n    };\n\n    return MonetaryCalculationBuilder;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.public-registration')\n    .factory('PublicRegistrationApiService', PublicRegistrationApiService);\n\n  /** @ngInject */\n  function PublicRegistrationApiService($http, api) {\n    function buildUrl(uid) {\n      return api.urls.publicRegistration.register.replace(':uid', uid);\n    }\n\n    function getForm(uid) {\n      return $http.get(buildUrl(uid));\n    }\n\n    function submit(uid, payload) {\n      return $http.post(buildUrl(uid), payload);\n    }\n\n    return {\n      getForm: getForm,\n      submit: submit\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.public-registration')\n    .factory('LocationRegistrationApiService', LocationRegistrationApiService);\n\n  /** @ngInject */\n  function LocationRegistrationApiService($http, api) {\n    function buildSettingsUrl(warehouseId) {\n      return api.urls.publicRegistration.locationSettings.replace(':warehouse_id', warehouseId);\n    }\n\n    function getSettings(warehouseId) {\n      return $http.get(buildSettingsUrl(warehouseId));\n    }\n\n    function updateSettings(warehouseId, payload) {\n      return $http.patch(buildSettingsUrl(warehouseId), payload);\n    }\n\n    return {\n      getSettings: getSettings,\n      updateSettings: updateSettings\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.public-registration')\n    .factory('ContractManagementApiService', ContractManagementApiService);\n\n  /** @ngInject */\n  function ContractManagementApiService($http, api) {\n    function buildUrl(id, option) {\n      return api.urls.publicRegistration.contracts\n        .replace(':id', id || '')\n        .replace(':option', option || '')\n        .replace(/([^:]\\/)\\/+/g, '$1')\n        .replace(/\\/+$/, '');\n    }\n\n    function list() {\n      return $http.get(buildUrl());\n    }\n\n    function create(payload) {\n      return $http.post(buildUrl(), payload);\n    }\n\n    function update(contractId, payload) {\n      return $http.put(buildUrl(contractId), payload);\n    }\n\n    function remove(contractId) {\n      return $http.delete(buildUrl(contractId));\n    }\n\n    function publish(contractId) {\n      return $http.post(buildUrl(contractId, 'publish'));\n    }\n\n    function clone(contractId) {\n      return $http.post(buildUrl(contractId, 'clone'));\n    }\n\n    function assign(payload) {\n      return $http.post(buildUrl('', 'assign'), payload);\n    }\n\n    function unassign(payload) {\n      return $http.post(buildUrl('', 'unassign'), payload);\n    }\n\n    return {\n      list: list,\n      create: create,\n      update: update,\n      remove: remove,\n      publish: publish,\n      clone: clone,\n      assign: assign,\n      unassign: unassign\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('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('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, HTTP_STATUS, $state, Session, ERROR_CODES,\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        if (resultConnect === 'ERROR_TIMEOUT') {\n          service.openPrinterDialog();\n        }\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 })\n          .then(function(response) {\n            if (response.status === HTTP_STATUS.HTTP_200_OK) {\n              var rawData = response.data;\n              service.queue.push({\n                options: options,\n                raw_data: rawData\n              });\n\n              service.print();\n            } else if (response.status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              var isMissingTicketConfigurationError = response.data &&\n                response.data.error === ERROR_CODES.ERROR_01034_MISSING_TICKET_CONFIGURATION_FOR_WAREHOUSE_OR_SITE;\n\n              if (isMissingTicketConfigurationError) {\n                if (Session.hasPermission('inventory.warehouses.warehouse.details.update')) {\n                  var missingTicketConfigurationDialog = $mdDialog.confirm()\n                    .title($filter('translate')('SALES_LOG.MISSING_TICKET_CONFIGURATION_DIALOG_TITLE'))\n                    .htmlContent($filter('translate')('SALES_LOG.MISSING_TICKET_CONFIGURATION_DIALOG_BODY'))\n                    .cancel($filter('translate')('GENERAL.CANCEL'))\n                    .ok($filter('translate')('SALES_LOG.MISSING_TICKET_CONFIGURATION_DIALOG_ACTION'));\n\n                  $mdDialog.show(missingTicketConfigurationDialog).then(function() {\n                    $state.go('app.inventory.warehouses.warehouse.details', { id: response.data.warehouse_id });\n                  }, function() {\n                  });\n                } else {\n                  var missingTicketConfigurationNoPermissionDialog = $mdDialog.alert()\n                    .title($filter('translate')('SALES_LOG.MISSING_TICKET_CONFIGURATION_DIALOG_TITLE'))\n                    .htmlContent($filter('translate')('SALES_LOG.MISSING_TICKET_CONFIGURATION_NO_PERMISSION_DIALOG_BODY'))\n                    .ok($filter('translate')('SALES_LOG.UNDERSTOOD'));\n\n                  $mdDialog.show(missingTicketConfigurationNoPermissionDialog);\n                }\n              }\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\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.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-variant-price-edit', [\n      'app.models.inventories.product-variant-price-discount-edit'\n    ])\n    .factory('ProductVariantPriceEdit', _ProductVariantPriceEdit);\n\n  function _ProductVariantPriceEdit(Factory, ProductVariantPriceDiscountEdit) {\n\n    var TOUCHABLE_FIELDS = [\n      'price_excl_tax',\n      'price_incl_tax',\n      'discount',\n      'discount_price_excl_tax',\n      'discount_price_incl_tax'\n    ];\n\n    var PRICE_GROUP_FIELDS = [\n      'price_excl_tax',\n      'price_incl_tax'\n    ];\n\n    var DISCOUNT_GROUP_FIELDS = [\n      'discount',\n      'discount_price_excl_tax',\n      'discount_price_incl_tax'\n    ];\n\n    function ProductVariantPriceEdit(value) {\n      Factory.call(this);\n      this.id = this._getValue(value, 'id', null);\n      this.product_price = this._getValue(value, 'product_price', null);\n      this.product_variant = this._getValue(value, 'product_variant', null);\n      this.tax = this._getValue(value, 'tax', null);\n      this.tax_percent_value = this._getValue(value, 'tax_percent_value', null);\n      this.temp_price_excl_tax = this._getValue(value, 'temp_price_excl_tax', null);\n      this.temp_price_incl_tax = this._getValue(value, 'temp_price_incl_tax', null);\n      this.price_excl_tax = this._getValue(value, 'price_excl_tax', null);\n      this.price_incl_tax = this._getValue(value, 'price_incl_tax', null);\n      this.discount = this._getValue(value, 'discount', null);\n      this.discount_price_excl_tax = this._getValue(value, 'discount_price_excl_tax', null);\n      this.discount_price_incl_tax = this._getValue(value, 'discount_price_incl_tax', null);\n      this.discount_base_price_excl_tax_snapshot = this._getValue(\n        value,\n        'discount_base_price_excl_tax_snapshot',\n        null\n      );\n      this.discount_base_price_incl_tax_snapshot = this._getValue(\n        value,\n        'discount_base_price_incl_tax_snapshot',\n        null\n      );\n      this._touchedFields = this._getValue(value, '_touchedFields', {});\n    }\n\n    ProductVariantPriceEdit.prototype = Object.create(Factory.prototype);\n    ProductVariantPriceEdit.prototype.constructor = ProductVariantPriceEdit;\n\n    ProductVariantPriceEdit.prototype.markTouched = function (fieldName) {\n      if (TOUCHABLE_FIELDS.indexOf(fieldName) === -1) {\n        return;\n      }\n\n      if (PRICE_GROUP_FIELDS.indexOf(fieldName) !== -1) {\n        this._unmarkGroupExcept(PRICE_GROUP_FIELDS, fieldName);\n      }\n\n      if (DISCOUNT_GROUP_FIELDS.indexOf(fieldName) !== -1) {\n        this._unmarkGroupExcept(DISCOUNT_GROUP_FIELDS, fieldName);\n        this.setDiscountBaseSnapshot(this.price_excl_tax, this.price_incl_tax);\n      }\n\n      this._touchedFields[fieldName] = true;\n    };\n\n    ProductVariantPriceEdit.prototype._unmarkGroupExcept = function (groupFields, keepFieldName) {\n      for (var i = 0; i < groupFields.length; i++) {\n        var groupFieldName = groupFields[i];\n        if (groupFieldName !== keepFieldName) {\n          delete this._touchedFields[groupFieldName];\n        }\n      }\n    };\n\n    ProductVariantPriceEdit.prototype.setDiscountBaseSnapshot = function (priceExcl, priceIncl) {\n      this.discount_base_price_excl_tax_snapshot = priceExcl;\n      this.discount_base_price_incl_tax_snapshot = priceIncl;\n    };\n\n    ProductVariantPriceEdit.prototype.resetTouchedFields = function () {\n      this._touchedFields = {};\n    };\n\n    ProductVariantPriceEdit.prototype.isTouched = function (fieldName) {\n      return !!this._touchedFields[fieldName];\n    };\n\n    ProductVariantPriceEdit.prototype.getTouchedFields = function () {\n      var self = this;\n      return TOUCHABLE_FIELDS.filter(function (fieldName) {\n        return self.isTouched(fieldName);\n      });\n    };\n\n    ProductVariantPriceEdit.prototype.toPartialPayload = function () {\n      var payload = {\n        tax: this.tax,\n        product_price: this.product_price,\n        product_variant: this.product_variant\n      };\n\n      if (this.id !== null && this.id !== undefined) {\n        payload.id = this.id;\n      }\n\n      var touchedFields = this.getTouchedFields();\n      for (var i = 0; i < touchedFields.length; i++) {\n        var fieldName = touchedFields[i];\n        if (DISCOUNT_GROUP_FIELDS.indexOf(fieldName) !== -1) {\n          continue;\n        }\n        if (this[fieldName] !== undefined) {\n          payload[fieldName] = this[fieldName];\n        }\n      }\n\n      var touchedDiscountField = null;\n      for (var j = 0; j < DISCOUNT_GROUP_FIELDS.length; j++) {\n        if (this.isTouched(DISCOUNT_GROUP_FIELDS[j])) {\n          touchedDiscountField = DISCOUNT_GROUP_FIELDS[j];\n          break;\n        }\n      }\n\n      if (touchedDiscountField !== null) {\n        var discountPayload = {};\n\n        discountPayload[touchedDiscountField] = this[touchedDiscountField];\n        if (touchedDiscountField === 'discount_price_incl_tax') {\n          discountPayload.price_incl_tax = this.discount_base_price_incl_tax_snapshot;\n        } else {\n          discountPayload.price_excl_tax = this.discount_base_price_excl_tax_snapshot;\n        }\n\n        payload.discount = new ProductVariantPriceDiscountEdit(discountPayload).toPayload();\n      }\n\n      return payload;\n    };\n\n    return ProductVariantPriceEdit;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.inventories.product-variant-price-discount-edit', [])\n    .factory('ProductVariantPriceDiscountEdit', _ProductVariantPriceDiscountEdit);\n\n  function _ProductVariantPriceDiscountEdit(Factory) {\n\n    var PAYLOAD_FIELDS = [\n      'discount',\n      'discount_price_excl_tax',\n      'discount_price_incl_tax',\n      'price_excl_tax',\n      'price_incl_tax'\n    ];\n\n    function ProductVariantPriceDiscountEdit(value) {\n      Factory.call(this);\n      this.discount = this._getValue(value, 'discount', undefined);\n      this.discount_price_excl_tax = this._getValue(value, 'discount_price_excl_tax', undefined);\n      this.discount_price_incl_tax = this._getValue(value, 'discount_price_incl_tax', undefined);\n      this.price_excl_tax = this._getValue(value, 'price_excl_tax', undefined);\n      this.price_incl_tax = this._getValue(value, 'price_incl_tax', undefined);\n    }\n\n    ProductVariantPriceDiscountEdit.prototype = Object.create(Factory.prototype);\n    ProductVariantPriceDiscountEdit.prototype.constructor = ProductVariantPriceDiscountEdit;\n\n    ProductVariantPriceDiscountEdit.prototype.toPayload = function () {\n      var payload = {};\n\n      for (var i = 0; i < PAYLOAD_FIELDS.length; i++) {\n        var fieldName = PAYLOAD_FIELDS[i];\n        if (this[fieldName] !== undefined) {\n          payload[fieldName] = this[fieldName];\n        }\n      }\n\n      return payload;\n    };\n\n    return ProductVariantPriceDiscountEdit;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.inventories.product-price-edit', [])\n    .factory('ProductPriceEdit', _ProductPriceEdit);\n\n  function _ProductPriceEdit(Factory) {\n\n    var TOUCHABLE_FIELDS = [\n      'price_excl_tax',\n      'price_incl_tax',\n      'discount',\n      'discount_price_excl_tax',\n      'discount_price_incl_tax'\n    ];\n\n    var PRICE_GROUP_FIELDS = [\n      'price_excl_tax',\n      'price_incl_tax'\n    ];\n\n    var DISCOUNT_GROUP_FIELDS = [\n      'discount',\n      'discount_price_excl_tax',\n      'discount_price_incl_tax'\n    ];\n\n    function ProductPriceEdit(value) {\n      Factory.call(this);\n      this.id = this._getValue(value, 'id', null);\n      this.product = this._getValue(value, 'product', null);\n      this.selected = this._getValue(value, 'selected', false);\n      this.tax = this._getValue(value, 'tax', null);\n      this.price_excl_tax = this._getValue(value, 'price_excl_tax', null);\n      this.price_incl_tax = this._getValue(value, 'price_incl_tax', null);\n      this.pricing_tier = this._getValue(value, 'pricing_tier', null);\n      this.discount = this._getValue(value, 'discount', null);\n      this.discount_price_excl_tax = this._getValue(value, 'discount_price_excl_tax', null);\n      this.discount_price_incl_tax = this._getValue(value, 'discount_price_incl_tax', null);\n      this.discount_base_price_excl_tax_snapshot = this._getValue(\n        value,\n        'discount_base_price_excl_tax_snapshot',\n        null\n      );\n      this.discount_base_price_incl_tax_snapshot = this._getValue(\n        value,\n        'discount_base_price_incl_tax_snapshot',\n        null\n      );\n      this.changed = this._getValue(value, 'changed', false);\n      this.focused = this._getValue(value, 'focused', false);\n      this.saved = this._getValue(value, 'saved', false);\n      this.delete = this._getValue(value, 'delete', false);\n      this._touchedFields = {};\n    }\n\n    ProductPriceEdit.prototype = Object.create(Factory.prototype);\n    ProductPriceEdit.prototype.constructor = ProductPriceEdit;\n\n    ProductPriceEdit.prototype.markTouched = function (fieldName) {\n      if (TOUCHABLE_FIELDS.indexOf(fieldName) === -1) {\n        return;\n      }\n\n      if (PRICE_GROUP_FIELDS.indexOf(fieldName) !== -1) {\n        this._unmarkGroupExcept(PRICE_GROUP_FIELDS, fieldName);\n      }\n\n      if (DISCOUNT_GROUP_FIELDS.indexOf(fieldName) !== -1) {\n        this._unmarkGroupExcept(DISCOUNT_GROUP_FIELDS, fieldName);\n        this.setDiscountBaseSnapshot(this.price_excl_tax, this.price_incl_tax);\n      }\n\n      this._touchedFields[fieldName] = true;\n    };\n\n    ProductPriceEdit.prototype._unmarkGroupExcept = function (groupFields, keepFieldName) {\n      for (var i = 0; i < groupFields.length; i++) {\n        var groupFieldName = groupFields[i];\n        if (groupFieldName !== keepFieldName) {\n          delete this._touchedFields[groupFieldName];\n        }\n      }\n    };\n\n    ProductPriceEdit.prototype.setDiscountBaseSnapshot = function (priceExcl, priceIncl) {\n      this.discount_base_price_excl_tax_snapshot = priceExcl;\n      this.discount_base_price_incl_tax_snapshot = priceIncl;\n    };\n\n    ProductPriceEdit.prototype.unmarkTouched = function (fieldName) {\n      if (TOUCHABLE_FIELDS.indexOf(fieldName) === -1) {\n        return;\n      }\n      delete this._touchedFields[fieldName];\n    };\n\n    ProductPriceEdit.prototype.resetTouchedFields = function () {\n      this._touchedFields = {};\n    };\n\n    ProductPriceEdit.prototype.getTouchedFields = function () {\n      var self = this;\n      return TOUCHABLE_FIELDS.filter(function (fieldName) {\n        return self.isTouched(fieldName);\n      });\n    };\n\n    ProductPriceEdit.prototype.isTouched = function (fieldName) {\n      return !!this._touchedFields[fieldName];\n    };\n\n    ProductPriceEdit.prototype.toPartialPayload = function () {\n      var payload = {\n        tax: this.tax,\n        product: this.product,\n        pricing_tier: this.pricing_tier\n      };\n\n      if (this.id !== null && this.id !== undefined) {\n        payload.id = this.id;\n      }\n\n      var touchedFields = this.getTouchedFields();\n      for (var i = 0; i < touchedFields.length; i++) {\n        var fieldName = touchedFields[i];\n        if (DISCOUNT_GROUP_FIELDS.indexOf(fieldName) !== -1) {\n          continue;\n        }\n        if (this[fieldName] !== undefined) {\n          payload[fieldName] = this[fieldName];\n        }\n      }\n\n      var touchedDiscountField = null;\n      for (var j = 0; j < DISCOUNT_GROUP_FIELDS.length; j++) {\n        if (this.isTouched(DISCOUNT_GROUP_FIELDS[j])) {\n          touchedDiscountField = DISCOUNT_GROUP_FIELDS[j];\n          break;\n        }\n      }\n\n      if (touchedDiscountField !== null) {\n        payload.discount = {};\n        payload.discount[touchedDiscountField] = this[touchedDiscountField];\n        if (touchedDiscountField === 'discount_price_incl_tax') {\n          payload.discount.price_incl_tax = this.discount_base_price_incl_tax_snapshot;\n        } else {\n          payload.discount.price_excl_tax = this.discount_base_price_excl_tax_snapshot;\n        }\n      }\n\n      return payload;\n    };\n\n    return ProductPriceEdit;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.inventories.product-price-discount-edit', [])\n    .factory('ProductPriceDiscountEdit', _ProductPriceDiscountEdit);\n\n  function _ProductPriceDiscountEdit(Factory) {\n\n    var PAYLOAD_FIELDS = [\n      'discount',\n      'discount_price_excl_tax',\n      'discount_price_incl_tax',\n      'price_excl_tax',\n      'price_incl_tax'\n    ];\n\n    function ProductPriceDiscountEdit(value) {\n      Factory.call(this);\n      this.discount = this._getValue(value, 'discount', null);\n      this.discount_price_excl_tax = this._getValue(value, 'discount_price_excl_tax', null);\n      this.discount_price_incl_tax = this._getValue(value, 'discount_price_incl_tax', null);\n      this.price_excl_tax = this._getValue(value, 'price_excl_tax', null);\n      this.price_incl_tax = this._getValue(value, 'price_incl_tax', null);\n    }\n\n    ProductPriceDiscountEdit.prototype = Object.create(Factory.prototype);\n    ProductPriceDiscountEdit.prototype.constructor = ProductPriceDiscountEdit;\n\n    ProductPriceDiscountEdit.prototype.toPayload = function () {\n      var payload = {};\n\n      for (var i = 0; i < PAYLOAD_FIELDS.length; i++) {\n        var fieldName = PAYLOAD_FIELDS[i];\n        if (this[fieldName] !== undefined) {\n          payload[fieldName] = this[fieldName];\n        }\n      }\n\n      return payload;\n    };\n\n    return ProductPriceDiscountEdit;\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.minimum_balance_spend_amount = value.minimum_balance_spend_amount || null;\n      this.balance_spend_multiple = value.balance_spend_multiple || 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.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.temporary-account-access', [])\n    .factory('TemporaryAccountAccess', _TemporaryAccountAccess);\n\n  /** @ngInject */\n  function _TemporaryAccountAccess(\n    $filter,\n    Factory,\n    Session\n  ) {\n    function TemporaryAccountAccess(value) {\n      Factory.call(this);\n      this.id = this._getValue(value, 'id', null);\n      this.granted_by = this._getValue(value, 'granted_by', null);\n      this.granted_at = this._getValue(value, 'granted_at', null);\n      this.expires_at = this._getValue(value, 'expires_at', null);\n      this.revoked_at = this._getValue(value, 'revoked_at', null);\n      this.revoked_by = this._getValue(value, 'revoked_by', null);\n\n      this.getGrantedFullName = function(){\n        if(!this.granted_by){\n          return '';\n        }\n        var you = '';\n        if(Session.user.id === this.granted_by.id){\n          you = ' ('+ $filter('translate')('GENERAL.YOU').toLowerCase()  +')';\n        }\n        return this.granted_by.first_name + ' ' + this.granted_by.last_name + you;\n      };\n\n      this.formatGrantedAt = function(){\n        if(!this.granted_at){\n          return '';\n        }\n        return this.granted_at.toLocaleString();\n      };\n\n      this.formatExpiresAt = function(){\n        if(!this.expires_at){\n          return '';\n        }\n        return this.expires_at.toLocaleString();\n      };\n    }\n\n    TemporaryAccountAccess.prototype = Object.create(Factory.prototype);\n    TemporaryAccountAccess.prototype.constructor = TemporaryAccountAccess;\n\n    return TemporaryAccountAccess;\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 (event, filterName) {\n          var parentFilterElement = $scope.$parent;\n          while (parentFilterElement && !parentFilterElement.vm) {\n            parentFilterElement = parentFilterElement.$parent;\n          }\n\n          if (parentFilterElement && parentFilterElement.vm && parentFilterElement.vm.name === filterName) {\n            vm.clear();\n          }\n        });\n      };\n\n      function isLabelVisible() {\n        return vm.variant === 'nd-form';\n      }\n\n    }\n  });\n})();\n\n(function() {\n  'use strict';\n\nvar app = angular.module('app.core');\n\napp.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\n              if (originalNode.hasAttribute('ng-transclude')) {\n                originalNode.removeAttribute('ng-transclude');\n              }\n              var transcludeNodes = originalNode.querySelectorAll('[ng-transclude]');\n              for (var k = 0; k < transcludeNodes.length; k++) {\n                transcludeNodes[k].removeAttribute('ng-transclude');\n              }\n\n              var spans = originalNode.querySelectorAll('span[translate]');\n              for (var j = 0; j < spans.length; j++) {\n                if (!spans[j].textContent.trim()) {\n                  spans[j].textContent = '\\u00A0';\n                }\n              }\n\n              if (originalNode.children.length === 0 && !originalNode.textContent.trim()) {\n                var textNode = document.createTextNode('\\u00A0');\n                originalNode.appendChild(textNode);\n              }\n\n              var compiledNode = $compile(originalNode)(scope.$parent);\n\n              if (compiledNode[0] && compiledNode[0].hasAttribute('ng-transclude')) {\n                compiledNode[0].removeAttribute('ng-transclude');\n              }\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  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(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('ndFilterSelector', {\n    transclude: true,\n    controllerAs: 'vm',\n    templateUrl: 'app/main/components/filter-selector/filter-selector.html',\n    bindings: {\n      filterStorageLabel: '@',\n      filterFieldsLayout: '@?', // optional string binding for layout: e.g. \"row\" or \"column\"\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        if (!vm.filterFieldsLayout) {\n          vm.filterFieldsLayout = 'row';\n        }\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  var app = angular.module('app.core');\n\n  app.component('ndDateRangeFilter', {\n    bindings: {\n      clearable: '<?',\n      onChanged: '&?',\n      selectPlaceholder: '@',\n      additionalClass: '@?',\n      icon: '@?',\n      model: '=',\n      showTemplate: '<?',\n      autoConfirm: '<?',\n    },\n    templateUrl: 'app/main/components/date-range-filter/date-range-filter.html',\n    controllerAs: 'vm',\n    controller: function ($scope, $timeout) {\n      var vm = this;\n      vm.clearable = angular.isDefined(vm.clearable) ? vm.clearable : true;\n      vm.showTemplate = angular.isDefined(vm.showTemplate) ? vm.showTemplate : true;\n      vm.autoConfirm = angular.isDefined(vm.autoConfirm) ? vm.autoConfirm : false;\n      vm.showDatePicker = true;\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.dateStart = null;\n        vm.model.dateEnd = null;\n        vm.showDatePicker = false;\n        $timeout(function() {\n          vm.showDatePicker = true;\n          $timeout(function() {\n            vm.onDateRangeChange();\n          }, 0);\n        }, 0);\n      };\n\n      vm.onDateRangeChange = 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.getPlaceholder = function () {\n        if (!vm.model || vm.model.dateStart === null || vm.model.dateEnd === null ||\n            vm.model.dateStart === undefined || vm.model.dateEnd === undefined) {\n          return vm.selectPlaceholder;\n        }\n        var start = moment(vm.model.dateStart).format('DD/MM/YYYY');\n        var end = moment(vm.model.dateEnd).format('DD/MM/YYYY');\n        return start + ' - ' + end;\n      };\n\n      vm.$onInit = function () {\n        if (!vm.model) {\n          vm.model = {\n            dateStart: null,\n            dateEnd: null\n          };\n        } else {\n          if (!vm.model.hasOwnProperty('dateStart')) {\n            vm.model.dateStart = null;\n          }\n          if (!vm.model.hasOwnProperty('dateEnd')) {\n            vm.model.dateEnd = null;\n          }\n        }\n\n        $scope.$on('ndFilter::clear', function (event, filterName) {\n          var parentFilterElement = $scope.$parent;\n          while (parentFilterElement && !parentFilterElement.vm) {\n            parentFilterElement = parentFilterElement.$parent;\n          }\n\n          if (parentFilterElement && parentFilterElement.vm && parentFilterElement.vm.name === filterName) {\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  angular\n    .module('app.core')\n    .component('ndButton', {\n      templateUrl: 'app/main/components/button/button.html',\n      bindings: {\n        onClick: '&',\n        label: '@',\n        loading: '<?',\n        disabled: '<?',\n        cssClass: '@?',\n        permission: '@?',\n        icon: '@?',\n        iconPosition: '@?',\n        loaderSize: '@?'\n      },\n      controller: ButtonController,\n      controllerAs: 'vm'\n    });\n\n  /** @ngInject */\n  function ButtonController() {\n    var vm = this;\n\n    vm.$onInit = function() {\n      vm.loading = vm.loading || false;\n      vm.disabled = vm.disabled || false;\n      vm.iconPosition = vm.iconPosition || 'left';\n      vm.loaderSize = vm.loaderSize || '20';\n    };\n\n    vm.handleClick = function($event) {\n      if (vm.onClick && !vm.disabled && !vm.loading) {\n        vm.onClick({ $event: $event });\n      }\n    };\n\n    vm.getButtonClasses = function() {\n      var classes = [];\n      if (vm.cssClass) {\n        classes.push(vm.cssClass);\n      }\n      return classes.join(' ');\n    };\n\n    vm.isDisabled = function() {\n      return vm.disabled || vm.loading;\n    };\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.public-registration')\n    .constant('PUBLIC_REGISTRATION_CONTRACT_LANGUAGES', [\n      { iso: 'pa', name: '(Eastern) Punjabi' },\n      { iso: 'ab', name: 'Abkhaz' },\n      { iso: 'aa', name: 'Afar' },\n      { iso: 'af', name: 'Afrikaans' },\n      { iso: 'ak', name: 'Akan' },\n      { iso: 'sq', name: 'Albanian' },\n      { iso: 'am', name: 'Amharic' },\n      { iso: 'ar', name: 'Arabic' },\n      { iso: 'an', name: 'Aragonese' },\n      { iso: 'hy', name: 'Armenian' },\n      { iso: 'as', name: 'Assamese' },\n      { iso: 'av', name: 'Avaric' },\n      { iso: 'ae', name: 'Avestan' },\n      { iso: 'ay', name: 'Aymara' },\n      { iso: 'az', name: 'Azerbaijani' },\n      { iso: 'bm', name: 'Bambara' },\n      { iso: 'ba', name: 'Bashkir' },\n      { iso: 'eu', name: 'Basque' },\n      { iso: 'be', name: 'Belarusian' },\n      { iso: 'bn', name: 'Bengali, Bangla' },\n      { iso: 'bh', name: 'Bihari' },\n      { iso: 'bi', name: 'Bislama' },\n      { iso: 'bs', name: 'Bosnian' },\n      { iso: 'br', name: 'Breton' },\n      { iso: 'bg', name: 'Bulgarian' },\n      { iso: 'my', name: 'Burmese' },\n      { iso: 'ca', name: 'Catalan' },\n      { iso: 'ch', name: 'Chamorro' },\n      { iso: 'ce', name: 'Chechen' },\n      { iso: 'ny', name: 'Chichewa, Chewa, Nyanja' },\n      { iso: 'zh', name: 'Chinese' },\n      { iso: 'cv', name: 'Chuvash' },\n      { iso: 'kw', name: 'Cornish' },\n      { iso: 'co', name: 'Corsican' },\n      { iso: 'cr', name: 'Cree' },\n      { iso: 'hr', name: 'Croatian' },\n      { iso: 'cs', name: 'Czech' },\n      { iso: 'da', name: 'Danish' },\n      { iso: 'dv', name: 'Divehi, Dhivehi, Maldivian' },\n      { iso: 'nl', name: 'Dutch' },\n      { iso: 'dz', name: 'Dzongkha' },\n      { iso: 'en', name: 'English' },\n      { iso: 'eo', name: 'Esperanto' },\n      { iso: 'et', name: 'Estonian' },\n      { iso: 'ee', name: 'Ewe' },\n      { iso: 'fo', name: 'Faroese' },\n      { iso: 'fj', name: 'Fijian' },\n      { iso: 'fi', name: 'Finnish' },\n      { iso: 'fr', name: 'French' },\n      { iso: 'ff', name: 'Fula, Fulah, Pulaar, Pular' },\n      { iso: 'gl', name: 'Galician' },\n      { iso: 'lg', name: 'Ganda' },\n      { iso: 'ka', name: 'Georgian' },\n      { iso: 'de', name: 'German' },\n      { iso: 'el', name: 'Greek (modern)' },\n      { iso: 'gn', name: 'Guaraní' },\n      { iso: 'gu', name: 'Gujarati' },\n      { iso: 'ht', name: 'Haitian, Haitian Creole' },\n      { iso: 'ha', name: 'Hausa' },\n      { iso: 'he', name: 'Hebrew (modern)' },\n      { iso: 'hz', name: 'Herero' },\n      { iso: 'hi', name: 'Hindi' },\n      { iso: 'ho', name: 'Hiri Motu' },\n      { iso: 'hu', name: 'Hungarian' },\n      { iso: 'is', name: 'Icelandic' },\n      { iso: 'io', name: 'Ido' },\n      { iso: 'ig', name: 'Igbo' },\n      { iso: 'id', name: 'Indonesian' },\n      { iso: 'ia', name: 'Interlingua' },\n      { iso: 'ie', name: 'Interlingue' },\n      { iso: 'iu', name: 'Inuktitut' },\n      { iso: 'ik', name: 'Inupiaq' },\n      { iso: 'ga', name: 'Irish' },\n      { iso: 'it', name: 'Italian' },\n      { iso: 'ja', name: 'Japanese' },\n      { iso: 'jv', name: 'Javanese' },\n      { iso: 'kl', name: 'Kalaallisut, Greenlandic' },\n      { iso: 'kn', name: 'Kannada' },\n      { iso: 'kr', name: 'Kanuri' },\n      { iso: 'ks', name: 'Kashmiri' },\n      { iso: 'kk', name: 'Kazakh' },\n      { iso: 'km', name: 'Khmer' },\n      { iso: 'ki', name: 'Kikuyu, Gikuyu' },\n      { iso: 'rw', name: 'Kinyarwanda' },\n      { iso: 'rn', name: 'Kirundi' },\n      { iso: 'kv', name: 'Komi' },\n      { iso: 'kg', name: 'Kongo' },\n      { iso: 'ko', name: 'Korean' },\n      { iso: 'ku', name: 'Kurdish' },\n      { iso: 'kj', name: 'Kwanyama, Kuanyama' },\n      { iso: 'ky', name: 'Kyrgyz' },\n      { iso: 'lo', name: 'Lao' },\n      { iso: 'la', name: 'Latin' },\n      { iso: 'lv', name: 'Latvian' },\n      { iso: 'li', name: 'Limburgish, Limburgan, Limburger' },\n      { iso: 'ln', name: 'Lingala' },\n      { iso: 'lt', name: 'Lithuanian' },\n      { iso: 'lu', name: 'Luba-Katanga' },\n      { iso: 'lb', name: 'Luxembourgish, Letzeburgesch' },\n      { iso: 'mk', name: 'Macedonian' },\n      { iso: 'mg', name: 'Malagasy' },\n      { iso: 'ms', name: 'Malay' },\n      { iso: 'ml', name: 'Malayalam' },\n      { iso: 'mt', name: 'Maltese' },\n      { iso: 'gv', name: 'Manx' },\n      { iso: 'mr', name: 'Marathi (Marāṭhī)' },\n      { iso: 'mh', name: 'Marshallese' },\n      { iso: 'mn', name: 'Mongolian' },\n      { iso: 'mi', name: 'Māori' },\n      { iso: 'na', name: 'Nauruan' },\n      { iso: 'nv', name: 'Navajo, Navaho' },\n      { iso: 'ng', name: 'Ndonga' },\n      { iso: 'ne', name: 'Nepali' },\n      { iso: 'nd', name: 'Northern Ndebele' },\n      { iso: 'se', name: 'Northern Sami' },\n      { iso: 'no', name: 'Norwegian' },\n      { iso: 'nb', name: 'Norwegian Bokmål' },\n      { iso: 'nn', name: 'Norwegian Nynorsk' },\n      { iso: 'ii', name: 'Nuosu' },\n      { iso: 'oc', name: 'Occitan' },\n      { iso: 'oj', name: 'Ojibwe, Ojibwa' },\n      { iso: 'cu', name: 'Old Church Slavonic, Church Slavonic, Old Bulgarian' },\n      { iso: 'or', name: 'Oriya' },\n      { iso: 'om', name: 'Oromo' },\n      { iso: 'os', name: 'Ossetian, Ossetic' },\n      { iso: 'ps', name: 'Pashto, Pushto' },\n      { iso: 'fa', name: 'Persian (Farsi)' },\n      { iso: 'pl', name: 'Polish' },\n      { iso: 'pt', name: 'Portuguese' },\n      { iso: 'pi', name: 'Pāli' },\n      { iso: 'qu', name: 'Quechua' },\n      { iso: 'ro', name: 'Romanian' },\n      { iso: 'rm', name: 'Romansh' },\n      { iso: 'ru', name: 'Russian' },\n      { iso: 'sm', name: 'Samoan' },\n      { iso: 'sg', name: 'Sango' },\n      { iso: 'sa', name: 'Sanskrit (Saṁskṛta)' },\n      { iso: 'sc', name: 'Sardinian' },\n      { iso: 'gd', name: 'Scottish Gaelic, Gaelic' },\n      { iso: 'sr', name: 'Serbian' },\n      { iso: 'sn', name: 'Shona' },\n      { iso: 'sd', name: 'Sindhi' },\n      { iso: 'si', name: 'Sinhalese, Sinhala' },\n      { iso: 'sk', name: 'Slovak' },\n      { iso: 'sl', name: 'Slovene' },\n      { iso: 'so', name: 'Somali' },\n      { iso: 'nr', name: 'Southern Ndebele' },\n      { iso: 'st', name: 'Southern Sotho' },\n      { iso: 'es', name: 'Spanish' },\n      { iso: 'su', name: 'Sundanese' },\n      { iso: 'sw', name: 'Swahili' },\n      { iso: 'ss', name: 'Swati' },\n      { iso: 'sv', name: 'Swedish' },\n      { iso: 'tl', name: 'Tagalog' },\n      { iso: 'ty', name: 'Tahitian' },\n      { iso: 'tg', name: 'Tajik' },\n      { iso: 'ta', name: 'Tamil' },\n      { iso: 'tt', name: 'Tatar' },\n      { iso: 'te', name: 'Telugu' },\n      { iso: 'th', name: 'Thai' },\n      { iso: 'bo', name: 'Tibetan Standard, Tibetan, Central' },\n      { iso: 'ti', name: 'Tigrinya' },\n      { iso: 'to', name: 'Tonga (Tonga Islands)' },\n      { iso: 'ts', name: 'Tsonga' },\n      { iso: 'tn', name: 'Tswana' },\n      { iso: 'tr', name: 'Turkish' },\n      { iso: 'tk', name: 'Turkmen' },\n      { iso: 'tw', name: 'Twi' },\n      { iso: 'uk', name: 'Ukrainian' },\n      { iso: 'ur', name: 'Urdu' },\n      { iso: 'ug', name: 'Uyghur' },\n      { iso: 'uz', name: 'Uzbek' },\n      { iso: 've', name: 'Venda' },\n      { iso: 'vi', name: 'Vietnamese' },\n      { iso: 'vo', name: 'Volapük' },\n      { iso: 'wa', name: 'Walloon' },\n      { iso: 'cy', name: 'Welsh' },\n      { iso: 'fy', name: 'Western Frisian' },\n      { iso: 'wo', name: 'Wolof' },\n      { iso: 'xh', name: 'Xhosa' },\n      { iso: 'yi', name: 'Yiddish' },\n      { iso: 'yo', name: 'Yoruba' },\n      { iso: 'za', name: 'Zhuang, Chuang' },\n      { iso: 'zu', name: 'Zulu' }\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/**\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    .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(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    .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  'use strict';\n\n  angular\n    .module('app.core')\n    .factory('SelectSerialNumberTypeDialogService', SelectSerialNumberTypeDialogService);\n\n  /** @ngInject */\n  function SelectSerialNumberTypeDialogService($mdDialog, $document) {\n\n    return {\n      show: show\n    };\n\n    function show(config) {\n      config = config || {};\n\n      var defaults = {\n        title: 'GENERAL.SELECT_SERIAL_NUMBER_TYPE_TITLE',\n        message: 'GENERAL.SELECT_SERIAL_NUMBER_TYPE_MSG',\n        buttonText: 'GENERAL.SELECT',\n        serialNumberTypeType: null,\n        saveConfiguration: false,\n        inventoryConfigurationId: null,\n        configurationField: null\n      };\n\n      angular.extend(defaults, config);\n\n      return $mdDialog.show({\n        controller: 'SelectSerialNumberTypeDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/core/directives/select-serial-number-type-dialog/select-serial-number-type-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          dialogConfig: defaults\n        },\n        resolve: {\n          SerialNumberTypesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n          }\n        }\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n  angular\n    .module('app.core')\n    .controller('SelectSerialNumberTypeDialogController', SelectSerialNumberTypeDialogController);\n\n  /** @ngInject */\n  function SelectSerialNumberTypeDialogController($mdDialog, SerialNumberTypesData, SERIAL_NUMBER_TYPES, api, dialogConfig) {\n    // Data\n    var vm = this;\n    vm.serialNumberTypes = SerialNumberTypesData.results;\n    vm.serialNumberType = null;\n    vm.SERIAL_NUMBER_TYPES = SERIAL_NUMBER_TYPES;\n    vm.config = dialogConfig;\n\n    // Methods\n    vm.select = select;\n    vm.cancel = cancel;\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function select() {\n      if (!vm.serialNumberType) {\n        return;\n      }\n\n      if (vm.config.saveConfiguration && vm.config.inventoryConfigurationId && vm.config.configurationField) {\n        var data = {\n          id: vm.config.inventoryConfigurationId\n        };\n        data[vm.config.configurationField] = vm.serialNumberType;\n\n        api.inventories.inventoryConfiguration.patch(\n          data,\n          function () {\n            $mdDialog.hide(vm.serialNumberType);\n          },\n          function() {\n            $mdDialog.hide(vm.serialNumberType);\n          }\n        );\n      } else {\n        $mdDialog.hide(vm.serialNumberType);\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('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        .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        .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        .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('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        .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('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        .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('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        .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        .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{\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  '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 = 11;\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    service.copyToClipboard = function($event, value) {\n      var $mdToast = angular.element(document.body).injector().get('$mdToast');\n      $event.stopPropagation();\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.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.storage', [])\n    .service('StorageService', StorageService);\n\n  /** @ngInject */\n  function StorageService(Session) {\n\n    var service = this;\n\n    // V2 keys for PickingPackingController\n    var PICKING_PACKING_CONTROLLER_FILTERS_KEY = 'PickingPackingController::Filters::V3';\n    var PICKING_PACKING_CONTROLLER_GLOBAL_STATUS_KEY = 'PickingPackingController::GlobalStatus::V3';\n    var PICKING_PACKING_CONTROLLER_CURRENT_NAV_KEY = 'PickingPackingController::CurrentNav::V3';\n\n    function safeParse(raw) {\n      try { return raw ? JSON.parse(raw) : null; } catch (e) { return null; }\n    }\n    function safeStringify(obj) {\n      try { return JSON.stringify(obj); } catch (e) { return null; }\n    }\n    function normalizeValue(val) {\n      if (val === undefined || val === 'undefined') { return null; }\n      return val;\n    }\n    function sanitizeObject(obj) {\n      if (!obj || typeof obj !== 'object') { return obj; }\n      var cleaned = {};\n      Object.keys(obj).forEach(function(k){\n        var v = obj[k];\n        if (Array.isArray(v)) {\n          cleaned[k] = v.filter(function(item){ return normalizeValue(item) !== null; });\n        } else if (v && typeof v === 'object') {\n          cleaned[k] = sanitizeObject(v);\n        } else {\n          var nv = normalizeValue(v);\n          if (nv !== null) { cleaned[k] = nv; }\n        }\n      });\n      return cleaned;\n    }\n    function namespacedKey(base) {\n      if (!Session || !Session.company || !Session.company.id) { return base; }\n      return Session.company.id + '::' + base;\n    }\n\n    // Low-level storage helpers\n    service.getRaw = function (key) {\n      try { return localStorage.getItem(key); } catch (e) { return null; }\n    };\n    service.setRaw = function (key, value) {\n      try { localStorage.setItem(key, value); } catch (e) {}\n    };\n    service.removeRaw = function (key) {\n      try { localStorage.removeItem(key); } catch (e) {}\n    };\n\n    // Key getters (namespaced)\n    service.getPickingPackingControllerFiltersKey = function () { return namespacedKey(PICKING_PACKING_CONTROLLER_FILTERS_KEY); };\n    service.getPickingPackingControllerGlobalStatusKey = function () { return namespacedKey(PICKING_PACKING_CONTROLLER_GLOBAL_STATUS_KEY); };\n    service.getPickingPackingControllerCurrentNavKey = function () { return namespacedKey(PICKING_PACKING_CONTROLLER_CURRENT_NAV_KEY); };\n\n    // JSON helpers using low-level methods\n    function getJson(key) { return safeParse(service.getRaw(key)); }\n    function setJson(key, value) {\n      var raw = safeStringify(value);\n      if (raw !== null) { service.setRaw(key, raw); }\n    }\n\n    // Filters API (V2)\n    service.getPickingPackingControllerFilters = function () {\n      var key = service.getPickingPackingControllerFiltersKey();\n      return sanitizeObject(getJson(key) || {});\n    };\n    service.setPickingPackingControllerFilters = function (filters) {\n      var key = service.getPickingPackingControllerFiltersKey();\n      setJson(key, sanitizeObject(filters || {}));\n    };\n\n    // GlobalStatus API (V2)\n    service.getPickingPackingControllerGlobalStatus = function () {\n      return sanitizeObject(getJson(service.getPickingPackingControllerGlobalStatusKey()) || {});\n    };\n    service.setPickingPackingControllerGlobalStatus = function (status) {\n      setJson(service.getPickingPackingControllerGlobalStatusKey(), sanitizeObject(status || {}));\n    };\n    service.updatePickingPackingControllerGlobalStatus = function (patch) {\n      var current = service.getPickingPackingControllerGlobalStatus();\n      var next = Object.assign({}, current, sanitizeObject(patch || {}));\n      service.setPickingPackingControllerGlobalStatus(next);\n      return next;\n    };\n\n    // CurrentNav API (V2)\n    service.getPickingPackingControllerCurrentNavItem = function () {\n      var key = service.getPickingPackingControllerCurrentNavKey();\n      return getJson(key) || null;\n    };\n    service.setPickingPackingControllerCurrentNavItem = function (navItem) {\n      var key = service.getPickingPackingControllerCurrentNavKey();\n      setJson(key, navItem);\n      return navItem;\n    };\n\n    // Optional reset (V2)\n    service.resetPickingPackingControllerStorage = function () {\n      service.removeRaw(service.getPickingPackingControllerFiltersKey());\n      service.removeRaw(service.getPickingPackingControllerGlobalStatusKey());\n      service.removeRaw(service.getPickingPackingControllerCurrentNavKey());\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    service.setLanguage = setLanguage; // Nuevo: cambiar idioma al vuelo\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        // Activar el idioma preferido del usuario al cargar la sesión desde servidor\n        if (service.user && service.user.lang) {\n          try {\n            $translate.use(service.user.lang);\n          } catch (e) {\n            // Ignorar errores de cambio de idioma\n          }\n        }\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    function setLanguage(lang) {\n      if (!lang) { return; }\n      if (!service.user) { service.user = new User({}); }\n      service.user.lang = lang;\n      try {\n        $translate.use(lang);\n      } catch (e) {\n      }\n      try {\n        $rootScope.$broadcast('Session::languageChanged', lang);\n      } catch (e2) {}\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.label-provider-adapter', [])\n    .factory('LabelProviderAdapterService', labelProviderAdapterService);\n\n  /** @ngInject */\n  function labelProviderAdapterService($filter, $mdDialog, $mdToast, $state, ERROR_CODES) {\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) {\n      var translationKey = errorCode ? ('ERRORS.' + errorCode) : null;\n      var translatedError = translationKey ? $filter('translate')(translationKey) : '';\n      if (!translationKey || translatedError === translationKey) {\n        translatedError = errorCode;\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        return errorMessage + ' ' + orderMessage;\n      }\n      return errorMessage;\n    }\n\n    function handleSendcloudFinishError(response, config) {\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            var destinationId = config.getDestinationId ? config.getDestinationId() : null;\n            if (destinationId) {\n              $state.go('app.inventory.warehouses.warehouse.details', { id: destinationId });\n            }\n          }\n        );\n        return;\n      }\n\n      if (errorCode === ERROR_CODES.ERROR_10012_SENDCLOUD_ADDRESS_TOO_LONG_EXCEPTION) {\n        if (config.onAddressTooLongError) {\n          config.onAddressTooLongError(response.error_fields || []);\n        }\n        return;\n      }\n\n      showErrorDialog(translatedError);\n    }\n\n    function handleSendcloudGenerateLabelsError(response, config) {\n      if (!response || !response.error) {\n        return;\n      }\n\n      var errorCode = response.error;\n      var translationKey = 'ERRORS.' + errorCode;\n      var translatedError = $filter('translate')(translationKey);\n\n      if (errorCode === 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            var destinationId = config.getDestinationId ? config.getDestinationId() : null;\n            if (destinationId) {\n              $state.go('app.inventory.warehouses.warehouse.details', { id: destinationId });\n            }\n          }\n        });\n        return;\n      }\n\n      $mdToast.show($mdToast.simple().textContent(translatedError).position('top right').hideDelay(7000));\n    }\n\n    function createSendcloudAdapter(config) {\n      return {\n        hasMissingConfiguration: function() {\n          return !config.getSelectedShippingMethodId();\n        },\n        buildFinishPayload: function(allPacked) {\n          return {\n            print_labels: true,\n            sendcloud_shipping_method_id: config.getSelectedShippingMethodId(),\n            all_packed: allPacked,\n            volumetric_weight: config.getVolumetricWeight(),\n            print_deliveries: config.getPrintDeliveriesAutomatically()\n          };\n        },\n        buildGenerateLabelsPayload: function() {\n          return {\n            sendcloud_shipping_method_id: config.getSelectedShippingMethodId(),\n            volumetric_weight: config.getVolumetricWeight(),\n            print_deliveries: config.getPrintDeliveriesAutomatically()\n          };\n        },\n        handleFinishError: function(response) {\n          handleSendcloudFinishError(response, config);\n        },\n        handleGenerateLabelsError: function(response) {\n          handleSendcloudGenerateLabelsError(response, config);\n        }\n      };\n    }\n\n    return {\n      createSendcloudAdapter: createSendcloudAdapter\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, ticketConfiguration) {\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 result = { subject: defaultSubject, message: defaultMessage };\n        result = applyEmailTemplate(result, invoiceType, configuration);\n        result = applyEmailTemplate(result, invoiceType, ticketConfiguration);\n        deferred.resolve(result);\n      }, function() {\n        deferred.resolve({ subject: defaultSubject, message: defaultMessage });\n      });\n\n      return deferred.promise;\n    };\n\n    function applyEmailTemplate(result, invoiceType, config) {\n      if (!config) {\n        return result;\n      }\n      var subjectKey = invoiceType === INVOICE_TYPES.INVOICE ? 'pos_order_invoice_email_subject' : 'pos_order_email_subject';\n      var bodyKey = invoiceType === INVOICE_TYPES.INVOICE ? 'pos_order_invoice_email_body' : 'pos_order_email_body';\n      return {\n        subject: config[subjectKey] || result.subject,\n        message: config[bodyKey] || result.message\n      };\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.a53c5b4a.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.core')\n    .service('EventListHelper', EventListHelper);\n\n  /** @ngInject */\n  function EventListHelper($rootScope, $timeout, UiGridService) {\n    var service = this;\n\n    service.createStatus = function(extraFilters, extraOptions) {\n      var filters = angular.extend({\n        statuses: [],\n        dateRange: {\n          dateStart: undefined,\n          dateEnd: undefined\n        }\n      }, extraFilters || {});\n\n      return angular.extend({\n        state: {},\n        ordering: '-processed_at',\n        search: '',\n        filtersParams: {},\n        filters: filters,\n        pageNumber: 1,\n        pageSize: UiGridService.DEFAULT_PAGE_SIZE\n      }, extraOptions || {});\n    };\n\n    service.createReloadFn = function(vm, timeoutKey) {\n      return function() {\n        if (vm[timeoutKey]) {\n          $timeout.cancel(vm[timeoutKey]);\n        }\n        vm[timeoutKey] = $timeout(function() {\n          $rootScope.$broadcast('ndGrid::filtersChanged');\n        }, 1000);\n      };\n    };\n\n    service.resetFilters = function(status, filterKeys) {\n      filterKeys.forEach(function(key) {\n        if (key === 'dateRange') {\n          status.filters.dateRange = {\n            dateStart: undefined,\n            dateEnd: undefined\n          };\n        } else {\n          status.filters[key] = [];\n        }\n      });\n    };\n\n    service.setupStatusLoadedListener = function($scope, status, filterKeys, broadcastAfter) {\n      var listener = $scope.$on('ndGrid::statusLoaded', function() {\n        status.search = '';\n        service.resetFilters(status, filterKeys);\n\n        if (broadcastAfter) {\n          $timeout(function() {\n            $rootScope.$broadcast('ndGrid::filtersChanged');\n          }, 0);\n        }\n      });\n\n      $scope.$on('$destroy', function() {\n        listener();\n      });\n\n      return listener;\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .service('EventDetailHelper', EventDetailHelper);\n\n  /** @ngInject */\n  function EventDetailHelper($filter, $http, $mdDialog, $mdToast) {\n    var service = this;\n\n    service.formatDate = function(date) {\n      if (!date) {\n        return '-';\n      }\n      return $filter('date')(date, 'dd/MM/yyyy HH:mm:ss');\n    };\n\n    service.formatRetries = function(tryCount, maxRetries) {\n      var tries = tryCount !== null && tryCount !== undefined ? tryCount : 0;\n      var max = maxRetries !== null && maxRetries !== undefined ? maxRetries : 0;\n      return tries + '/' + max;\n    };\n\n    service.getStatusLabel = function(status, statusMap) {\n      return statusMap[status] || status;\n    };\n\n    service.loadEvent = function(url, eventId, expand) {\n      var fullUrl = url + '/' + eventId + '?expand=' + expand;\n      return $http.get(fullUrl);\n    };\n\n    service.showErrorToast = function(translationKey) {\n      $mdToast.show(\n        $mdToast.simple()\n          .textContent($filter('translate')(translationKey))\n          .position('top right')\n          .hideDelay(3000)\n      );\n    };\n\n    service.buildStatusMap = function(translationPrefix) {\n      return {\n        'Pending': $filter('translate')(translationPrefix + '.STATUS_PENDING'),\n        'Processing': $filter('translate')(translationPrefix + '.STATUS_PROCESSING'),\n        'Processed': $filter('translate')(translationPrefix + '.STATUS_PROCESSED'),\n        'WithErrors': $filter('translate')(translationPrefix + '.STATUS_WITH_ERRORS'),\n        'Error': $filter('translate')(translationPrefix + '.STATUS_WITH_ERRORS')\n      };\n    };\n\n    service.buildTranslations = function(translationPrefix) {\n      return {\n        status: translationPrefix + '.STATUS',\n        details: translationPrefix + '.DETAILS',\n        errorLoading: translationPrefix + '.ERROR_LOADING_OPERATION',\n        goBack: translationPrefix + '.GO_BACK',\n        processedResult: translationPrefix + '.PROCESSED_RESULT',\n        eventError: translationPrefix + '.OPERATION_ERROR'\n      };\n    };\n\n    service.canShowMarkAsPendingAction = function(eventOrStatus) {\n      if (eventOrStatus === null || eventOrStatus === undefined) {\n        return false;\n      }\n\n      var status = angular.isObject(eventOrStatus) ? eventOrStatus.status : eventOrStatus;\n\n      return status === 'Error' || status === 'WithErrors' || status === 4;\n    };\n\n    service.executeMarkAsPendingRequest = function(markAsPendingUrl, translationPrefix) {\n      return $http.post(markAsPendingUrl)\n        .then(function(response) {\n          $mdToast.show(\n            $mdToast.simple()\n              .textContent($filter('translate')(translationPrefix + '.MARK_AS_PENDING_SUCCESS'))\n              .position('top right')\n              .hideDelay(3000)\n          );\n\n          return response;\n        })\n        .catch(function(error) {\n          service.showErrorToast(translationPrefix + '.MARK_AS_PENDING_ERROR');\n          throw error;\n        });\n    };\n\n    service.markEventAsPending = function(config) {\n      if (!config || config.markAsPendingLoading) {\n        return;\n      }\n\n      var eventOrStatus = config.event || config.status;\n      if (!service.canShowMarkAsPendingAction(eventOrStatus)) {\n        return;\n      }\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')(config.translationPrefix + '.MARK_AS_PENDING_CONFIRM_TITLE'))\n        .textContent($filter('translate')(config.translationPrefix + '.MARK_AS_PENDING_CONFIRM_MESSAGE'))\n        .ok($filter('translate')(config.translationPrefix + '.MARK_AS_PENDING_CONFIRM_OK'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      return $mdDialog.show(confirm).then(function() {\n        var markAsPendingUrl = config.baseUrl + '/' + config.eventId + '/mark-as-pending';\n\n        if (angular.isFunction(config.setMarkAsPendingLoading)) {\n          config.setMarkAsPendingLoading(true);\n        }\n\n        return service.executeMarkAsPendingRequest(markAsPendingUrl, config.translationPrefix)\n          .then(function(response) {\n            if (angular.isFunction(config.onSuccess)) {\n              config.onSuccess(response);\n            }\n            return response;\n          })\n          .finally(function() {\n            if (angular.isFunction(config.setMarkAsPendingLoading)) {\n              config.setMarkAsPendingLoading(false);\n            }\n          });\n      });\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .service('EventBadgeHelper', EventBadgeHelper);\n\n  /** @ngInject */\n  function EventBadgeHelper($filter) {\n    var service = this;\n\n    service.getStatusBadgeData = function(status, translationPrefix) {\n      if (!status && status !== 0) {\n        return getEmptyBadgeData();\n      }\n\n      switch (status) {\n        case 1:\n        case 'Pending':\n          return {\n            label: $filter('translate')(translationPrefix + '.STATUS_PENDING'),\n            className: 'text-boxed orange'\n          };\n        case 2:\n        case 'Processing':\n          return {\n            label: $filter('translate')(translationPrefix + '.STATUS_PROCESSING'),\n            className: 'text-boxed blue'\n          };\n        case 3:\n        case 'Processed':\n          return {\n            label: $filter('translate')(translationPrefix + '.STATUS_PROCESSED'),\n            className: 'text-boxed green'\n          };\n        case 4:\n        case 'Error':\n        case 'WithErrors':\n          return {\n            label: $filter('translate')(translationPrefix + '.STATUS_WITH_ERRORS'),\n            className: 'text-boxed red'\n          };\n        default:\n          return {\n            label: status,\n            className: 'text-boxed'\n          };\n      }\n    };\n\n    service.getSiteOperationBadgeData = function(operationType) {\n      if (!operationType) {\n        return getEmptyBadgeData();\n      }\n\n      switch (operationType) {\n        case 'stock.moved':\n          return {\n            label: $filter('translate')('SITE.STOCK_MOVED'),\n            className: 'text-boxed blue'\n          };\n        case 'stock.belonging_to_bundle_moved':\n          return {\n            label: $filter('translate')('SITE.STOCK_BELONGING_TO_BUNDLE_MOVED'),\n            className: 'text-boxed blue'\n          };\n        case 'site_order.pending_to_import':\n          return {\n            label: $filter('translate')('SITE.SITE_ORDER_PENDING_TO_IMPORT'),\n            className: 'text-boxed green'\n          };\n        case 'pos_order_fulfillment.status_updated':\n          return {\n            label: $filter('translate')('SITE.POS_ORDER_FULFILLMENT_STATUS_UPDATED'),\n            className: 'text-boxed blue'\n          };\n        default:\n          return {\n            label: operationType,\n            className: 'text-boxed'\n          };\n      }\n    };\n\n    service.getHandlerOperationBadgeData = function(operationType) {\n      if (!operationType) {\n        return getEmptyBadgeData();\n      }\n\n      var translationKey = 'HANDLER_EVENTS.EVENT_' + normalizeEventCode(operationType);\n      var translatedLabel = $filter('translate')(translationKey);\n      var className = getHandlerOperationClassName(operationType);\n\n      if (translatedLabel && translatedLabel !== translationKey) {\n        return {\n          label: translatedLabel,\n          className: className\n        };\n      }\n\n      return {\n        label: operationType,\n        className: className\n      };\n    };\n\n    function normalizeEventCode(operationType) {\n      return String(operationType)\n        .toUpperCase()\n        .replace(/[.-]/g, '_');\n    }\n\n    function getHandlerOperationClassName(operationType) {\n      switch (operationType) {\n        case 'stock.moved':\n          return 'text-boxed blue';\n        case 'site_order.pending_to_import':\n          return 'text-boxed green';\n        default:\n          return 'text-boxed blue';\n      }\n    }\n\n    function getEmptyBadgeData() {\n      return {\n        label: '-',\n        className: 'text-boxed'\n      };\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.services.downloadFile', [])\n    .service('DownloadFileService', downloadFileService);\n\n  /** @ngInject */\n  function downloadFileService() {\n    var service = this;\n    service.downloadFile = function (url, filename) {\n      if (!url) {\n        return;\n      }\n\n      var downloadLink = document.createElement('a');\n      downloadLink.href = url;\n      downloadLink.download = filename || 'download';\n      document.body.appendChild(downloadLink);\n      downloadLink.click();\n      document.body.removeChild(downloadLink);\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    $document,\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\n    service.STATUS = {\n      PENDING: 1,\n      STARTED: 2,\n      FINISHED: 3,\n      ERROR: 4,\n      FINISHED_WITH_ERRORS: 5\n    };\n\n    service.startGenericPolling = function (config) {\n      if (config.showStartToast && config.startToastMessage) {\n        service.showToast($filter('translate')(config.startToastMessage));\n      }\n\n      var pollingPromise = $interval(function () {\n        service.checkGenericStatus(config, pollingPromise);\n      }, service.PULLING_FREQUENCE);\n\n      return pollingPromise;\n    };\n\n    service.checkGenericStatus = function (config, pollingPromise) {\n      $http.get(config.statusUrl, { params: { artifact_id: config.artifactId } }).then(function (response) {\n        var data = response.data;\n\n        if (data.status === service.STATUS.FINISHED || data.status === service.STATUS.FINISHED_WITH_ERRORS) {\n          $interval.cancel(pollingPromise);\n          if (config.onSuccess) config.onSuccess(data);\n          if (config.onComplete) config.onComplete(true);\n\n        } else if (data.status === service.STATUS.ERROR) {\n          $interval.cancel(pollingPromise);\n          if (config.onError) config.onError(data);\n          if (config.onComplete) config.onComplete(false);\n        }\n        // For PENDING and STARTED, continue polling (do nothing)\n\n      }, function (error) {\n        $interval.cancel(pollingPromise);\n        if (config.onError) config.onError(error);\n        if (config.onComplete) config.onComplete(false);\n      });\n    };\n\n    service.generateInvoiceZip = function (data, onComplete) {\n      var url = api.urls.accounting.invoicesDownloadZip;\n\n      service.showToast($filter('translate')('INVOICES.ZIP_GENERATION_IN_PROGRESS'));\n\n      $http.post(url, data).then(function (response) {\n        if (response.data && response.data.artifact_id) {\n          service.startGenericPolling({\n            artifactId: response.data.artifact_id,\n            statusUrl: api.urls.accounting.invoicesZipStatus,\n            onSuccess: service.handleInvoiceZipSuccess,\n            onError: service.handleInvoiceZipError,\n            onComplete: onComplete\n          });\n        } else {\n          service.showErrorToast();\n          if (onComplete) onComplete(false);\n        }\n      }, function () {\n        service.showErrorToast();\n        if (onComplete) onComplete(false);\n      });\n    };\n\n    service.handleInvoiceZipSuccess = function (data) {\n      if (data.download_url) {\n        service.downloadFile(data.download_url, 'invoices.zip');\n\n        if (data.has_errors && data.errors && data.errors.length > 0) {\n          service.showToast($filter('translate')('INVOICES.ZIP_DOWNLOAD_SUCCESS'));\n          service.showInvoiceZipErrorsDialog(data.errors, data.failed_count);\n        } else {\n          service.showToast($filter('translate')('INVOICES.ZIP_DOWNLOAD_SUCCESS'));\n        }\n      } else if (data.has_errors) {\n        service.showInvoiceZipErrorsDialog(data.errors, data.failed_count);\n      }\n    };\n\n    service.handleInvoiceZipError = function () {\n      service.showErrorToast();\n    };\n\n    service.showInvoiceZipErrorsDialog = function (errors, failedCount) {\n      $mdDialog.show({\n        controller: 'InvoiceZipErrorsDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/accounting/views/invoices/dialogs/invoice-zip-errors/invoice-zip-errors-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          errors: errors,\n          failedCount: failedCount\n        }\n      });\n    };\n\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\n      var message = errors.error;\n      var errorCode = errors.error_code;\n      var orderRef = errors.order_ref;\n\n      if (errorCode) {\n        var translationKey = 'ERRORS.' + errorCode;\n        var translated = $filter('translate')(translationKey);\n        if (translated && translated !== translationKey) {\n          if (orderRef) {\n            message = orderRef + ': ' + translated;\n          } else {\n            message = translated;\n          }\n        }\n      }\n\n      htmlContent += '<br><br>' + message;\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    service.downloadFile = function (url, filename) {\n      var downloadLink = document.createElement('a');\n      downloadLink.target = '_blank';\n      downloadLink.href = url;\n      downloadLink.download = filename || 'download';\n      document.body.appendChild(downloadLink);\n      downloadLink.click();\n      document.body.removeChild(downloadLink);\n    };\n\n    service.showToast = function (message) {\n      $mdToast.show(\n        $mdToast.simple()\n          .textContent(message)\n          .position('top right')\n          .hideDelay(3000)\n      );\n    };\n\n    service.showErrorToast = function () {\n      service.showToast($filter('translate')('GENERAL.ERROR_TOAST'));\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 iva = this.amount || 0;\n        var recargo = this.surcharge_amount || 0;\n\n        return Utils.roundPrice(iva + recargo);\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.site-product', [])\n    .factory('SiteProduct', _SiteProduct);\n\n  /** @ngInject */\n  function _SiteProduct(\n    Factory\n  ) {\n\n    function SiteProduct(value) {\n      Factory.call(this);\n      this.id = this._getValue(value, 'id' , null);\n\n      this.created = this._getValue(value, 'created', null);\n      this.last_sync = this._getValue(value, 'last_sync', null);\n      this.last_stock_sync = this._getValue(value, 'last_stock_sync', null);\n      this.synchronizing = this._getValue(value, 'synchronizing', false);\n      this.waiting_to_synchronize = this._getValue(value, 'waiting_to_synchronize', false);\n      this.error = this._getValue(value, 'error', null);\n      this.error_message = this._getValue(value, 'error_message', null);\n      this.error_snippet = this._getValue(value, 'error_snippet', null);\n      this.external_id = this._getValue(value, 'external_id', null);\n      this.product_id = this._getValue(value, 'product_id', null);\n      this.site_id = this._getValue(value, 'site_id', null);\n      this.active = this._getValue(value, 'active', false);\n      this.product_name = this._getValue(value, 'product_name', null);\n      this.product_code = this._getValue(value, 'product_code', null);\n      this.product_description = this._getValue(value, 'product_description', null);\n      this.product_description_long = this._getValue(value, 'product_description_long', null);\n      this.sync_enabled = this._getValue(value, 'sync_enabled', false);\n      this.public_meta = this._getValue(value, 'public_meta', null);\n      this.external_variant_ids = this._getValue(value, 'external_variant_ids', null);\n      this.slug = this._getValue(value, 'slug', null);\n      this.seo_title = this._getValue(value, 'seo_title', null);\n      this.seo_description = this._getValue(value, 'seo_description', null);\n      this.force_sync_size_as_variations = this._getValue(value, 'force_sync_size_as_variations', false);\n      this.force_sync_color_as_variations = this._getValue(value, 'force_sync_color_as_variations', false);\n      this.min_stock_threshold = this._getValue(value, 'min_stock_threshold', null);\n      this.safety_stock = this._getValue(value, 'safety_stock', null);\n      this.web_categories = this._getValue(value, 'web_categories', null);\n      this.sync_variants = this._getValue(value, 'sync_variants', []);\n\n      // Frontend attributes\n      this.showForceCreationCheckbox = false;\n      this.selectedWebCategories = [];\n      if(this.web_categories && this.web_categories.length){\n        this.selectedWebCategories = this.web_categories;\n      }\n      this.searchWebCateogryText = '';\n      this.selectedWebCategoryItem = null;\n    }\n\n    SiteProduct.prototype = Object.create(Factory.prototype);\n    SiteProduct.prototype.constructor = SiteProduct;\n\n    SiteProduct.prototype.canInitializeExternalVariantIdsDict = function () {\n      return  !this.external_variant_ids || Object.keys(this.external_variant_ids).length === 0;\n    };\n\n    SiteProduct.prototype.toJson = function () {\n      var webCategories = this.web_categories;\n      if(this.selectedWebCategories){\n        webCategories = this.selectedWebCategories.map(function(category) {\n            return category.id;\n          });\n      }\n      return {\n        id: this.id,\n        created: this.created,\n        last_sync: this.last_sync,\n        last_stock_sync: this.last_stock_sync,\n        synchronizing: this.synchronizing,\n        waiting_to_synchronize: this.waiting_to_synchronize,\n        error: this.error,\n        error_message: this.error_message,\n        error_snippet: this.error_snippet,\n        external_id: this.external_id,\n        product_id: this.product_id,\n        site_id: this.site_id,\n        active: this.active,\n        product_name: this.product_name ? this.product_name : null,\n        product_code: this.product_code ? this.product_code : null,\n        product_description: this.product_description ? this.product_description : null,\n        product_description_long: this.product_description_long ? this.product_description_long : null,\n        sync_enabled: this.sync_enabled,\n        public_meta: this.public_meta,\n        external_variant_ids: this.external_variant_ids,\n        slug: this.slug,\n        seo_title: this.seo_title,\n        seo_description: this.seo_description,\n        force_sync_size_as_variations: this.force_sync_size_as_variations,\n        force_sync_color_as_variations: this.force_sync_color_as_variations,\n        min_stock_threshold: this.min_stock_threshold,\n        safety_stock: this.safety_stock,\n        web_categories: webCategories,\n        sync_variants: this.sync_variants\n      };\n    };\n\n    return SiteProduct;\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 ? 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', ['app.shared-kernel.monetary']).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    MonetaryCalculationBuilder,\n    MonetaryPosOrderInputMapper,\n    MonetaryPosOrderResultApplier,\n    FinalPriceDocumentCalculationStrategy,\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      var monetaryInputMapper = new MonetaryPosOrderInputMapper();\n      var monetaryResultApplier = new MonetaryPosOrderResultApplier();\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.promotions = value && value.promotions ? value.promotions : [];\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) {\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        return Utils.roundPrice(this.total || 0);\n      };\n\n      this.getSubtotal = function(ignoreDiscount) {\n        return Utils.roundPrice(this.subtotal || 0);\n      };\n\n      this.getTotalTaxes = function() {\n        return Utils.roundPrice(this.total_taxes || 0);\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        var monetaryDocument = this.toMonetaryDocument({\n          includeShipping: true,\n          ignoreReturns: false,\n          includeBalanceDiscount: true\n        });\n\n        monetaryResultApplier.apply(this, monetaryDocument);\n\n        this.output_amount = this.getBalance();\n        this.pending_amount = this.getPendingAmount();\n\n        this.updateTaxesDict();\n      };\n\n      this.toMonetaryDocument = function(options) {\n        var mappedInput = monetaryInputMapper.map(this, options || {});\n        var calculationBuilder = new MonetaryCalculationBuilder(\n          new FinalPriceDocumentCalculationStrategy()\n        );\n\n        mappedInput.lines.forEach(function(line) {\n          calculationBuilder.addLine(line);\n        });\n\n        mappedInput.discounts.forEach(function(discount) {\n          calculationBuilder.addDiscount(discount);\n        });\n\n        return calculationBuilder.build();\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.clearPromotions = function() {\n        this.pos_order_product_variants.forEach(function(popv) {\n          popv.clearPromotion();\n        });\n      };\n\n      this.separatePosOrderProductVariants = function(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      this.areEquivalentPosOrderProductVariants = function(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.isSplitted !== popv2.isSplitted) {\n          return false;\n        }\n        if (popv1.discount_price_incl_tax !== popv2.discount_price_incl_tax ||\n        popv1.custom_price_incl_tax !== popv2.custom_price_incl_tax) {\n          return false;\n        }\n        if (popv1.product_name !== popv2.product_name) {\n          return false;\n        }\n        return true;\n      };\n\n      this.joinPosOrderProductVariants = function(longList) {\n        for (var i = 0; i < longList.length - 1; ++i) {\n          for (var j = i; j < longList.length; ++j) {\n            if (i !== j && this.areEquivalentPosOrderProductVariants(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      this.matchPromotions = function() {\n        this.clearPromotions();\n        var longList = this.separatePosOrderProductVariants(angular.copy(this.pos_order_product_variants));\n        this.promotions.forEach(function(promotion) {\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              popv.applyPromotion(promotion);\n              tempApplyTo.splice(index, 1);\n            }\n          });\n        });\n\n        if (this.promotions && this.promotions.length) {\n          this.pos_order_product_variants = this.joinPosOrderProductVariants(longList);\n          return true;\n        }\n\n        return false;\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 (!this.autocode && !Session.hasPermission('sale.sales_log.delete_draft')) {\n          return;\n        }\n        if (this.autocode && !Session.hasPermission('sale.sales_log.delete')) {\n          return;\n        }\n\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      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.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.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', ['app.shared-kernel.monetary'])\n    .factory('PosOrderProductVariant', _PosOrderProductVariant);\n\n  /** @ngInject */\n  function _PosOrderProductVariant(\n    Utils,\n    FeatureFlagService,\n    MonetaryCalculationBuilder,\n    MonetaryLineFromFinalPriceDTO,\n    MonetaryTaxDTO,\n    PercentageMonetaryDiscountDTO\n  ) {\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      this.sale_store_comment = value ? value.sale_store_comment : 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      this.fetchingPromotion = false;\n      this.isSplitted = 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 = inclTax\n          ? this._getUnitPriceInclTaxFromPriceState()\n          : this._getUnitPriceExclTaxFromPriceState();\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 lineResult = this._getMonetaryLineResultForGetters(includeReturns, is_v2);\n        return lineResult.total;\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 lineResult = this._getMonetaryLineResultForGetters(includeReturns, is_v2);\n        var subtotal = lineResult.subtotal_base;\n        return subtotal;\n      };\n\n      this.getTaxQuantity = function () {\n        var lineResult = this._getMonetaryLineResultForGetters(true, false);\n        return Utils.roundPrice(lineResult.tax_amount);\n      };\n\n      this.getTotalReturned = function () {\n        if (!this.returned_amount) {\n          return 0;\n        }\n\n        return Utils.roundPrice(\n          this._buildMonetaryLineResult(this.returned_amount, this.getUnitPrice(true, false)).total\n        );\n      };\n\n      this.backupPrices = function () {\n        this.pricesBackup = {\n          price_incl_tax: angular.copy(this.price_incl_tax),\n          price_excl_tax: angular.copy(this.price_excl_tax),\n          discount: angular.copy(this.discount),\n          discount_price_excl_tax: angular.copy(this.discount_price_excl_tax),\n          discount_price_incl_tax: angular.copy(this.discount_price_incl_tax),\n          custom_price_incl_tax: angular.copy(this.custom_price_incl_tax),\n          custom_price_excl_tax: angular.copy(this.custom_price_excl_tax)\n        };\n      };\n\n      this.restorePricesBackup = function () {\n        if (!this.pricesBackup) {\n          return;\n        }\n\n        this.price_incl_tax = this.pricesBackup.price_incl_tax;\n        this.price_excl_tax = this.pricesBackup.price_excl_tax;\n        this.discount = this.pricesBackup.discount;\n        this.discount_price_excl_tax = this.pricesBackup.discount_price_excl_tax;\n        this.discount_price_incl_tax = this.pricesBackup.discount_price_incl_tax;\n        this.custom_price_incl_tax = this.pricesBackup.custom_price_incl_tax;\n        this.custom_price_excl_tax = this.pricesBackup.custom_price_excl_tax;\n      };\n\n      this.clearPromotion = function () {\n        if (this.promotion) {\n          this.restorePricesBackup();\n          this.promotion = null;\n          this.promotion_name = null;\n          this.promotion_discount = null;\n          this.promotion_fixed_discount = null;\n        }\n      };\n\n      this.applyPromotion = function (promotion) {\n        if (this.promotion) {\n          return;\n        }\n\n        this.backupPrices();\n        var promotionApplied = false;\n\n        if (promotion.fixed_price_incl_tax) {\n          var actualPrice = this.getUnitPrice(true, true);\n          if (actualPrice > promotion.fixed_price_incl_tax) {\n            this.discount = null;\n            this.discount_price_incl_tax = null;\n            this.discount_price_excl_tax = null;\n            this.custom_price_incl_tax = Utils.roundPrice(promotion.fixed_price_incl_tax);\n            this.custom_price_excl_tax = Utils.roundPrice(\n              this._extractUnitBasePriceFromFinalPrice(this.custom_price_incl_tax)\n            );\n            promotionApplied = true;\n          }\n        } else if (promotion.fixed_discount) {\n          if (this.discount < promotion.fixed_discount) {\n            this.discount = promotion.fixed_discount;\n            promotionApplied = true;\n          }\n        }\n\n        if (promotionApplied) {\n          this.promotion = promotion.id;\n          this.promotion_name = promotion.name;\n          this.promotion_public_name = promotion.public_name;\n          this.promotion_discount = promotion.discount;\n          this.promotion_fixed_discount = promotion.fixed_discount;\n        }\n      };\n\n      this.recalculateDiscounts = function () {\n        if (this.promotion && this.promotion_discount) {\n          this.discount = this.promotion_fixed_discount;\n        }\n\n        if (this.discount) {\n          this.discount = Math.max(this.discount, 0);\n          this.discount = Math.min(this.discount, 100);\n\n          var discountResult = this._buildMonetaryLineResult(\n            1,\n            this.price_incl_tax,\n            new PercentageMonetaryDiscountDTO(this.discount)\n          );\n\n          this.discount_price_excl_tax = Utils.roundPrice(discountResult.unit_base_price);\n          this.discount_price_incl_tax = Utils.roundPrice(discountResult.unit_final_price);\n        }\n      };\n\n      this.recalculate = function () {\n        this.recalculateDiscounts();\n\n        var quantity = this._getMonetaryQuantity(true);\n        var unitPriceInclTax = this.getUnitPrice(true, false);\n        var taxes = this._getMonetaryTaxes();\n        var monetaryDocument = new MonetaryCalculationBuilder()\n          .addLine(\n            new MonetaryLineFromFinalPriceDTO(\n              quantity,\n              unitPriceInclTax,\n              taxes,\n              null\n            )\n          )\n          .build();\n\n        if (monetaryDocument.lines.length > 0) {\n          this.subtotal = monetaryDocument.lines[0].subtotal_base;\n          this.total = monetaryDocument.lines[0].total;\n        } else {\n          this.subtotal = 0;\n          this.total = 0;\n        }\n      };\n\n      this._getMonetaryQuantity = function(includeReturns) {\n        return this._getGetterQuantity(includeReturns, this.is_v2);\n      };\n\n      this._isV2EnabledForLine = function() {\n        var flagEnabled = FeatureFlagService.isFeatureFlagEnabled('CREATE_POS_ORDER_V2');\n        return flagEnabled && this.is_v2;\n      };\n\n      this._getGetterQuantity = function(includeReturns, is_v2) {\n        var isV2Enabled = FeatureFlagService.isFeatureFlagEnabled('CREATE_POS_ORDER_V2') && is_v2;\n\n        if (isV2Enabled) {\n          return this.amount || 0;\n        }\n\n        if (includeReturns) {\n          return (this.amount || 0) - (this.returned_amount || 0) - (this.canceled_amount || 0);\n        }\n\n        return (this.amount || 0) - (this.canceled_amount || 0);\n      };\n\n      this._getUnitPriceInclTaxFromPriceState = function() {\n        if (\n          this.custom_price_incl_tax !== null &&\n          this.custom_price_excl_tax !== null\n        ) {\n          return this.custom_price_incl_tax;\n        }\n\n        if (this.discount !== null) {\n          return this.discount_price_incl_tax;\n        }\n\n        return this.price_incl_tax;\n      };\n\n      this._getUnitPriceExclTaxFromPriceState = function() {\n        if (\n          this.custom_price_incl_tax !== null &&\n          this.custom_price_excl_tax !== null\n        ) {\n          if (this.custom_price_excl_tax === this.custom_price_incl_tax) {\n            return this._extractUnitBasePriceFromCurrentPriceState();\n          }\n\n          return this.custom_price_excl_tax;\n        }\n\n        if (this.discount !== null) {\n          return this.discount_price_excl_tax;\n        }\n\n        return this.price_excl_tax;\n      };\n\n      this._extractUnitBasePriceFromCurrentPriceState = function() {\n        var lineResult = this._buildMonetaryLineResultFromState(1);\n        return lineResult.unit_base_price;\n      };\n\n      this._extractUnitBasePriceFromFinalPrice = function(unitPriceInclTax) {\n        var lineResult = this._buildMonetaryLineResult(1, unitPriceInclTax);\n        return lineResult.unit_base_price;\n      };\n\n      this._buildMonetaryLineResultFromState = function(quantity) {\n        var unitPriceInclTax = this._getUnitPriceInclTaxFromPriceState();\n        return this._buildMonetaryLineResult(quantity, unitPriceInclTax);\n      };\n\n      this._getMonetaryLineResultForGetters = function(includeReturns, is_v2) {\n        var quantity = this._getGetterQuantity(includeReturns, is_v2);\n\n        return this._buildMonetaryLineResultFromState(quantity);\n      };\n\n      this._buildMonetaryLineResult = function(quantity, unitPriceInclTax, discount) {\n        var taxes = this._getMonetaryTaxes();\n        var monetaryDocument = new MonetaryCalculationBuilder()\n          .addLine(\n            new MonetaryLineFromFinalPriceDTO(\n              quantity,\n              unitPriceInclTax,\n              taxes,\n              discount || null\n            )\n          )\n          .build();\n\n        if (monetaryDocument.lines.length > 0) {\n          return monetaryDocument.lines[0];\n        }\n\n        return {\n          unit_base_price: 0,\n          subtotal_base: 0,\n          tax_amount: 0,\n          total: 0\n        };\n      };\n\n      this._getMonetaryTaxes = function() {\n        if (!this.tax_percent_value) {\n          return [];\n        }\n\n        return [new MonetaryTaxDTO(this.tax_percent_value, this.tax, this.tax_name)];\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\n        var quantity = avoidReturns\n          ? (this.amount || 0)\n          : (this.amount || 0) - (this.returned_amount || 0);\n\n        return Utils.roundPrice(this._buildMonetaryLineResult(quantity, this.price_incl_tax).total);\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            this._extractUnitBasePriceFromFinalPrice(parseFloat(this.custom_price_incl_tax))\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.getTotalUploadAmounts = function(){\n        var result = 0;\n        var pofpv = this.getVisiblePosOrderFulfillmentProductVariantInstances();\n        for( var i = 0; i < pofpv.length; ++i){\n          result += pofpv[i].uploadAmount;\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          if (pofpv.pos_order_fulfillment_shipping_box && pofpv.pos_order_fulfillment_shipping_box.shipping_box) {\n            result[pofpv.id] = pofpv.pos_order_fulfillment_shipping_box.shipping_box.id;\n          }\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        var hasAllowedStates = 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        if (!hasAllowedStates) {\n          return false;\n        }\n\n        for (var i = 0; i < this.pos_order_fulfillment_product_variant_instances.length; ++i) {\n          var posOrderFulfillmentProductVariantInstance = this.pos_order_fulfillment_product_variant_instances[i];\n\n          if (!posOrderFulfillmentProductVariantInstance.canAssignBatches()) {\n            return false;\n          }\n        }\n\n        return true;\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      this.stock_detail_related = value ? value.stock_detail_related : null;\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      this.canAssignBatches = function() {\n        var isBundle = this.pos_order_product_variant_instance.is_bundle;\n        if (isBundle) {\n          for (var i = 0; i < this.pos_order_product_variant_instance.bundle_content.length; i++) {\n            var pos_order_bundle_product_variant = this.pos_order_product_variant_instance.bundle_content[i];\n            if (pos_order_bundle_product_variant.stock_detail_related) {\n              return true;\n\n            }\n          }\n        }\n\n        return this.getRemainingAmount() > 0 && this.can_edit_uid_stocks;\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    MonetaryCalculationBuilder,\n    MonetaryInvoiceInputMapper,\n    MonetaryInvoiceResultApplier,\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.cancelled_by = value ? value.cancelled_by : null;\n      this.cancellation_of = value ? value.cancellation_of : 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      this.subtotal = value ? value.subtotal : 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          var lineData = value.invoice_lines[i];\n          lineData._is_invoice_readonly = value.is_closed || (value.cancellation_of !== null && value.cancellation_of !== undefined);\n          this.invoice_lines.push(new InvoiceLine(lineData));\n        }\n      }\n      this.sale_order_deliveries = value ? value.sale_order_deliveries : [];\n      this.purchase_order_deliveries = value ? value.purchase_order_deliveries : [];\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_excl_tax_after_discount = 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.isReadOnly() && this.subtotal_discount !== null && this.subtotal_discount !== undefined) {\n          return this.subtotal_discount;\n        }\n\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        if (this.isReadOnly() && this.subtotal_early_payment_discount !== null && this.subtotal_early_payment_discount !== undefined) {\n          return this.subtotal_early_payment_discount;\n        }\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.hasPendingCorrectableLines = function () {\n        if (!this.invoice_lines || this.invoice_lines.length === 0) {\n          return false;\n        }\n\n        for (var i = 0; i < this.invoice_lines.length; ++i) {\n          var line = this.invoice_lines[i];\n\n          if (line.corrective_of) {\n            continue;\n          }\n\n          if (line.remaining_amount_to_correct_from_original !== null &&\n              line.remaining_amount_to_correct_from_original !== undefined) {\n            if (line.remaining_amount_to_correct_from_original > 0) {\n              return true;\n            }\n          } else {\n            if (line.quantity && line.quantity > 0) {\n              return true;\n            }\n          }\n        }\n\n        return false;\n      };\n\n      this.canBeCorrected = function () {\n        return (\n          this.type === INVOICE_TYPES.INVOICE &&\n          this.autocode &&\n          !this.corrective_of &&\n          this.isDefaultInvoice() &&\n          !(this.replaced_by || this.replacement_of.length) &&\n          this.hasPendingCorrectableLines()\n        );\n      };\n\n      this.addLine = function (taxId) {\n        var lineData = {\n          tax: taxId,\n          _is_invoice_readonly: this.isReadOnly()\n        };\n        this.invoice_lines.push(new InvoiceLine(lineData));\n      };\n\n      this.updateLines = function (newLines) {\n        this.invoice_lines = [];\n        if (newLines) {\n          for (var i = 0; i < newLines.length; ++i) {\n            var lineData = newLines[i];\n            lineData._is_invoice_readonly = this.isReadOnly();\n            this.invoice_lines.push(new InvoiceLine(lineData));\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.updatePrices = function (taxes) {\n        if (this.isReadOnly()) {\n          if (value && value.subtotals_by_tax) {\n            Object.keys(this.subtotals_by_tax).forEach(function (key) {\n              if (!(this.subtotals_by_tax[key] instanceof SubtotalByTax)) {\n                this.subtotals_by_tax[key] = new SubtotalByTax(this.subtotals_by_tax[key]);\n              }\n            }, this);\n          }\n          return;\n        }\n\n        for (var i = 0; i < this.invoice_lines.length; ++i) {\n          this.invoice_lines[i].setTaxInstance(taxes);\n        }\n\n        var mapper = new MonetaryInvoiceInputMapper();\n        var mappedInput = mapper.map(this, taxes);\n        var calculationBuilder = new MonetaryCalculationBuilder();\n\n        mappedInput.lines.forEach(function(line) {\n          calculationBuilder.addLine(line);\n        });\n\n        mappedInput.discounts.forEach(function(discount) {\n          calculationBuilder.addDiscount(discount);\n        });\n\n        var monetaryDocumentResult = calculationBuilder.build();\n        var resultApplier = new MonetaryInvoiceResultApplier();\n\n        resultApplier.apply(this, monetaryDocumentResult);\n\n        if (!this.invoice_lines || !this.invoice_lines.length) {\n          this.subtotals_by_tax = {};\n          this.total_excl_tax = 0;\n          this.total_tax = 0;\n          this.total_incl_tax = 0;\n          this.subtotal_discount = 0;\n          this.subtotal_early_payment_discount = 0;\n        }\n      };\n\n      // Validations\n      this.isCancellation = function () {\n        return this.cancellation_of !== null && this.cancellation_of !== undefined;\n      };\n\n      this. isReadOnly = function () {\n        return this.is_closed || this.isCancellation();\n      };\n\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.isCancellation()) {\n          return [SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_CORRECTIVE_INVOICE, SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_INVOICE]\n        }\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 : null;\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      this._is_invoice_closed = value ? value._is_invoice_closed : false;\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_order = value ? value.related_order : null;\n\n      /**\n       * Public methods\n       */\n      this.initQuantity = function() {\n          return this.quantity;\n      };\n\n      this.quantity = this.initQuantity();\n\n      this.totalPriceExclTax = function (avoidRound) {\n        if (this._is_invoice_closed && this.total_price_excl_tax !== null && this.total_price_excl_tax !== undefined) {\n          return this.total_price_excl_tax;\n        }\n\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        if (this._is_invoice_closed && this.total_price_incl_tax !== null && this.total_price_incl_tax !== undefined) {\n          return this.total_price_incl_tax;\n        }\n\n        var price;\n        var basePrice = this.totalPriceExclTax(true);\n\n        if (this.tax && this.tax_instance) {\n          var taxPercent = this.tax_instance.percent_value;\n          price = basePrice * (1 + taxPercent / 100);\n\n          if (surcharge && this.tax_instance.surcharge) {\n            var surchargePercent = this.tax_instance.surcharge;\n            price += basePrice * (surchargePercent / 100);\n          }\n        } else if (this.tax_percent_value) {\n          price = basePrice * (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        if (this._is_invoice_readonly && this.price_incl_tax !== null && this.price_incl_tax !== undefined) {\n          return this.price_incl_tax;\n        }\n\n        var price;\n        if (this.tax && this.tax_instance) {\n          var taxPercent = this.tax_instance.percent_value;\n          price = this.price_excl_tax * (1 + taxPercent / 100);\n\n          if (surcharge && this.tax_instance.surcharge) {\n            var surchargePercent = this.tax_instance.surcharge;\n            price += this.price_excl_tax * (surchargePercent / 100);\n          }\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._is_invoice_readonly) {\n          return;\n        }\n\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' && /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:?\\d{2})?)?$/.test(v) && !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    COMPANY_PLANS\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      this.isPlanBusiness = function() {\n        return this.plan === COMPANY_PLANS.BUSINESS;\n      };\n\n      this.isPlanPartner = function() {\n        return this.plan === COMPANY_PLANS.PARTNER;\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      this.minimum_order_enabled = value ? value.minimum_order_enabled : false;\n      this.minimum_order_amount = value ? value.minimum_order_amount : null;\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            var firstName = $scope.fullname.split(' ')[0][0];\n            var lastName = $scope.fullname.split(' ')[1][0];\n            return firstName.toLocaleUpperCase() ? firstName : '' + lastName.toLocaleUpperCase() ? lastName : '' ;\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                                     TicketConfigurationData,\n                                     HTTP_STATUS,\n                                     INVOICE_TYPES,\n                                     Utils,\n                                     $filter) {\n\n    var vm = this;\n    vm.INVOICE_TYPES = INVOICE_TYPES;\n    var invoiceEmail = documentType === 'Invoice' && ContactData && ContactData.invoice_email ? ContactData.invoice_email.trim() : '';\n    var contactEmail = ContactData && ContactData.email ? ContactData.email.trim() : '';\n    vm.emails = [];\n    if (invoiceEmail) {\n      vm.emails.push(invoiceEmail);\n    }\n    if (contactEmail && vm.emails.indexOf(contactEmail) === -1) {\n      vm.emails.push(contactEmail);\n    }\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, TicketConfigurationData)\n        .then(function(result) {\n          vm.subject = getSubjectWithDocumentReference(result.subject);\n          vm.message = result.message;\n        });\n    }\n\n    function getSubjectWithDocumentReference(subject) {\n      var safeSubject = (subject || '').trim();\n      if (vm.documentType !== 'Invoice' || !vm.documentName) {\n        return safeSubject;\n      }\n      var documentReference = getDocumentReferenceWithType();\n      if (!safeSubject) {\n        return documentReference;\n      }\n      if (safeSubject.indexOf(documentReference) !== -1) {\n        return safeSubject;\n      }\n      if (safeSubject.indexOf(vm.documentName) !== -1) {\n        return safeSubject.replace(vm.documentName, documentReference);\n      }\n      return safeSubject + ' - ' + documentReference;\n    }\n\n    function getDocumentReferenceWithType() {\n      var invoiceTypeToTranslationKey = {};\n      invoiceTypeToTranslationKey[INVOICE_TYPES.INVOICE] = 'INVOICE.INVOICE';\n      invoiceTypeToTranslationKey[INVOICE_TYPES.QUOTE] = 'INVOICE.QUOTE';\n      invoiceTypeToTranslationKey[INVOICE_TYPES.PROFORMA] = 'INVOICE.PROFORMA';\n\n      var invoiceTypeLabel = $filter('translate')(invoiceTypeToTranslationKey[vm.invoiceType]) || '';\n      if (!invoiceTypeLabel) {\n        return vm.documentName;\n      }\n\n      return invoiceTypeLabel + ' ' + vm.documentName;\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.81ac9a27.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) {\n      if(!rawData){\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        return;\n      }\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    }\n    \n    function getAndPrintPosOrderInvoice(posOrder, register, isGiftTicket) {\n      var url = api.urls.accounting.printer.replace(':option', 'pos-order-invoices');\n      var params = {\n        pos_order_invoice_ids: posOrder.pos_order_invoices.map(function(invoice) { return invoice.id; }),\n        pos_order_ids: posOrder.id,\n        printer_type: PRINTER_TYPES.PRINTER_TYPE_QZ,\n        page_size: PAGE_SIZES.PAGE_SIZE_ROLL,\n        register_id: register ? register.id : null,\n        is_gift_ticket: !!isGiftTicket\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\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        var showCustomerAccumulatedBalance = options.showCustomerAccumulatedBalance;\n        if (showCustomerAccumulatedBalance === undefined || showCustomerAccumulatedBalance === null) {\n          showCustomerAccumulatedBalance = options.posOrder.show_customer_accumulated_balance;\n        }\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          show_customer_accumulated_balance: showCustomerAccumulatedBalance,\n          customer_accumulated_balance: ndPrinterUtilsService.getCustomerAccumulatedBalance(options.posOrder),\n          customer_accumulated_balance_print_date: options.customerAccumulatedBalancePrintDate ||\n            ndPrinterUtilsService.getCustomerAccumulatedBalancePrintDate(options.posOrder),\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      \n      options.posOrder.created_at = new Date(options.posOrder.created_at);\n      var customerAccumulatedBalancePrintDate = options.customerAccumulatedBalancePrintDate;\n      if (!customerAccumulatedBalancePrintDate) {\n        customerAccumulatedBalancePrintDate = $filter('date')(new Date(), 'dd/MM/yyyy');\n      }\n      options.customerAccumulatedBalancePrintDate = customerAccumulatedBalancePrintDate;\n      options.posOrder.customer_accumulated_balance_print_date = customerAccumulatedBalancePrintDate;\n      if (options.showCustomerAccumulatedBalance !== undefined && options.showCustomerAccumulatedBalance !== null) {\n        options.posOrder.show_customer_accumulated_balance = options.showCustomerAccumulatedBalance;\n      }\n      var featureFlag = FeatureFlagService.isFeatureFlagEnabled('PRINTER_POS_ORDER_INVOICE');\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            if(featureFlag && options.posOrder.pos_order_invoices && options.posOrder.pos_order_invoices.length ){\n              getAndPrintPosOrderInvoice(options.posOrder, options.register, true);\n            } else {\n              printQZRaw(ndPrinterUtilsService.printPosOrder(options.posOrder, options.register, options.openDrawer, true, options.site));\n            }\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          if(featureFlag && options.posOrder.pos_order_invoices && options.posOrder.pos_order_invoices.length ){\n              getAndPrintPosOrderInvoice(options.posOrder, options.register, false);\n            } else {\n              printQZRaw(ndPrinterUtilsService.printPosOrder(options.posOrder, options.register, options.openDrawer, false, options.site));\n            }\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(\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('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('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                                               $rootScope,\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    vm.USE_PRODUCT_BOXES_ID = null;\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.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    vm.useProductPackage = false;\n    vm.openingCustomerDialog = false;\n    vm.goToNextOrderAfterPacking = false;\n    vm.isScanAndGoScreen = $state.includes('app.ecommerce.scan_and_go');\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    vm.packWithSendcloudButtonEnabled = packWithSendcloudButtonEnabled;\n    vm.storeUseProductPackage = storeUseProductPackage;\n    vm.useProductPackageChanged = useProductPackageChanged;\n    vm.storeGoToNextOrderAfterPacking = storeGoToNextOrderAfterPacking;\n    vm.hideSendcloudErrorsDialog = hideSendcloudErrorsDialog;\n    vm.showCustomerPopup = showCustomerPopup;\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      vm.useProductPackage = localStorage.getItem(Session.company.id + '::ScanAndGoController::useProductPackage') === 'true';\n      vm.goToNextOrderAfterPacking = localStorage.getItem(Session.company.id + '::ScanAndGoController::goToNextOrderAfterPacking') === '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.pickingPackingPackingOrderShippingBoxes.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.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            vm.fulfillment.removePosOrderFulfillmentShippingBox(pofsb.id);\n          }\n        });\n    }\n\n    function removeAllShippingBoxes() {\n      if (vm.fulfillment.pos_order_fulfillment_shipping_box_instances.length === 0) {\n        return;\n      }\n      var pofsb = vm.fulfillment.pos_order_fulfillment_shipping_box_instances[0];\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            vm.fulfillment.removePosOrderFulfillmentShippingBox(pofsb.id);\n            removeAllShippingBoxes();\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        fulfillment.lockRefundPaymentMethod = false;\n      }\n    }\n\n    function showEcommerceRefundAlert(onConfirm) {\n      if (!vm.order.isShopifyOrder()) {\n        onConfirm();\n        return;\n      }\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('ORDER.REFUND_RETURN_CONFIRM_TITLE'))\n        .textContent($filter('translate')('ORDER.REFUND_RETURN_CONFIRM_MSG'))\n        .ok($filter('translate')('USERS.CONFIRM'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        onConfirm();\n      });\n    }\n\n    function getShopifyOrderPaymentMethodId() {\n      var orderPaymentMethods = vm.order.pos_order_payment_methods || vm.order.posOrderPaymentMethod || [];\n      var paymentMethods = vm.paymentMethods || [];\n      var availablePaymentMethodIds = {};\n\n      paymentMethods.forEach(function(paymentMethod) {\n        availablePaymentMethodIds[paymentMethod.id] = true;\n      });\n\n      var selectedPaymentMethodId = null;\n      orderPaymentMethods.some(function(orderPaymentMethod) {\n        var paymentMethodId = orderPaymentMethod.payment_method;\n        var hasAmount = Math.abs(orderPaymentMethod.amount || 0) > 0 ||\n          Math.abs(orderPaymentMethod.given_amount || 0) > 0;\n\n        if (paymentMethodId && hasAmount && availablePaymentMethodIds[paymentMethodId]) {\n          selectedPaymentMethodId = paymentMethodId;\n          return true;\n        }\n\n        return false;\n      });\n\n      if (selectedPaymentMethodId) {\n        return selectedPaymentMethodId;\n      }\n\n      orderPaymentMethods.some(function(orderPaymentMethod) {\n        var paymentMethodId = orderPaymentMethod.payment_method;\n\n        if (paymentMethodId && availablePaymentMethodIds[paymentMethodId]) {\n          selectedPaymentMethodId = paymentMethodId;\n          return true;\n        }\n\n        return false;\n      });\n\n      return selectedPaymentMethodId;\n    }\n\n    function shouldLockRefundPaymentMethodForShopify(fulfillment) {\n      return vm.order.isShopifyOrder() &&\n        fulfillment.updatingAction === 'refund_return' &&\n        !!fulfillment.refundPaymentMethod;\n    }\n\n    function refundAndReturnFulfillment(fulfillment) {\n      if (!vm.order.hasOrderEditPermission()) {\n        return;\n      }\n      if (fulfillment.allowRefundAndReturn() && vm.order.allowRefundAndReturn()) {\n        showEcommerceRefundAlert(function() {\n          fulfillment.updatingAmounts = true;\n          fulfillment.updatingAction = 'refund_return';\n          if (vm.order.isShopifyOrder()) {\n            fulfillment.refundPaymentMethod = getShopifyOrderPaymentMethodId();\n            fulfillment.lockRefundPaymentMethod = shouldLockRefundPaymentMethodForShopify(fulfillment);\n          } else {\n            fulfillment.lockRefundPaymentMethod = false;\n          }\n\n        });\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 (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        create_default_shipping_box: !vm.useProductPackage\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          goToNextOrder: false\n        });\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 && !vm.useProductPackage;\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 || 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              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      var amountDict = fulfillment.getUpdatingAmountsDict();\n      if ((!amountDict || !Object.keys(amountDict).length)) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('SCAN_AND_GO.ERROR_NO_AMOUNT_TO_PACK')).position('top right'));\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              goToNextOrder: vm.isScanAndGoScreen && !!vm.goToNextOrderAfterPacking\n            });\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 (status === HTTP_STATUS.HTTP_400_BAD_REQUEST && response.error === ERROR_CODES.ERROR_10012_SENDCLOUD_ADDRESS_TOO_LONG_EXCEPTION) {\n              showSendcloudTooLongFieldsErrorDialog(response.error_fields);\n            } else if (response.errors) {\n              showSendcloudErrorsDialog(response.errors);\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 showSendcloudTooLongFieldsErrorDialog(errors) {\n      vm.dialogErrors = errors.map(function(error) {\n        return error.message;\n      });\n      $mdDialog.show({\n        contentElement: '#sendcloud-error-dialog-too-long-address'\n      }).then(function(result) {\n      }, function() {\n      });\n    }\n\n    function showSendcloudErrorsDialog(errors) {\n      vm.dialogErrors = errors.map(function(error) {\n        var errorText = 'ERRORS.' + error;\n        var translatedError = $filter('translate')(errorText);\n        return errorText === translatedError ? error : translatedError;\n      });\n      $mdDialog.show({\n        contentElement: '#sendcloud-error-dialog'\n      }).then(function(result) {\n      }, function() {\n      });\n    }\n\n    function hideSendcloudErrorsDialog() {\n      $mdDialog.hide();\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          parameters:{\n            forceCustomer: false,\n            forceNaturalPersonType: false,\n            selectedTab: 1,\n            shippingAddressIdToEdit: vm.order.shipping_address\n          }\n        },\n        resolve: {\n          ContactsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.contacts@get', { id: vm.order.customer });\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        vm.contact = contact;\n        vm.order.customer_instance = vm.contact;\n        vm.order.customer = vm.contact.id;\n        vm.openingCustomerDialog = false;\n        reloadContact();\n      }, function() {\n        reloadContact();\n        vm.openingCustomerDialog = false;\n      });\n    }\n\n    function reloadContact() {\n      if (vm.order.customer) {\n        $rootScope.$broadcast('posOrderFulfillmentCard::reloadContact', { contactId: vm.order.customer });\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      var noCustomerDialog = $mdDialog.alert()\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .title($filter('translate')('ORDER.NO_CUSTOMER'))\n        .textContent($filter('translate')('ORDER.NO_CUSTOMER_TO_PRINT_LABELS_TEXT_DIALOG'))\n        .ok($filter('translate')('GENERAL.CLOSE'));\n      if (!vm.order.customer) {\n        $mdDialog.show(noCustomerDialog).then(function() {\n          vm.cancel(vm.fulfillment);\n        });\n\n        return;\n      }\n      if (!vm.order.shipping_address) {\n        var dialog = $mdDialog.alert()\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .title($filter('translate')('CONTACTS.NO_SHIPPING_ADDRESS_TITLE_DIALOG'))\n          .textContent($filter('translate')('CONTACTS.NO_SHIPPING_ADDRESS_TEXT_DIALOG'))\n          .ok($filter('translate')('GENERAL.CLOSE'));\n\n        $mdDialog.show(dialog).then(function() {\n          vm.cancel(vm.fulfillment);\n        });\n\n        return;\n      }\n\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 if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST && response.error === ERROR_CODES.ERROR_10014_SENDCLOUD_MISSING_COUNTRY_EXCEPTION) {\n            $mdDialog.show(noCustomerDialog).then(function() {\n              vm.cancel(vm.fulfillment);\n            });\n          } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST) {\n            showSendcloudErrorsDialog(response.errors);\n            vm.sendcloudShippingMethodsLoaded = false;\n            vm.sendcloudShippingMethodsLoading = false;\n            vm.cancel(vm.fulfillment);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.ERROR_GETTING_SEND_CLOUD_SHIPPING_METHODS')).position('top right'));\n            vm.sendcloudShippingMethodsLoaded = false;\n            vm.sendcloudShippingMethodsLoading = false;\n            vm.cancel(vm.fulfillment);\n          }\n        }, function() {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\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 storeUseProductPackage() {\n      localStorage.setItem(Session.company.id + '::ScanAndGoController::useProductPackage', vm.useProductPackage.toString());\n    }\n\n    function storeGoToNextOrderAfterPacking() {\n      localStorage.setItem(Session.company.id + '::ScanAndGoController::goToNextOrderAfterPacking', vm.goToNextOrderAfterPacking.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    function packWithSendcloudButtonEnabled() {\n      return !vm.saving &&\n        vm.amountUpdated &&\n        vm.selectedSendcloudShippingMethod &&\n        !vm.sendcloudShippingMethodsLoading &&\n        vm.fulfillment.getTotalUploadAmounts() > 0 &&\n        (\n          vm.fulfillment.pos_order_fulfillment_shipping_box_instances.length === 0 ||\n          vm.fulfillment.pos_order_fulfillment_shipping_box_instances.length > 0 &&\n          !vm.fulfillment.pos_order_fulfillment_product_variant_instances.some(function(pofpv) {\n            return pofpv.uploadAmount > 0 && !pofpv.pos_order_fulfillment_shipping_box;\n          })\n        );\n    }\n\n    function useProductPackageChanged() {\n      if (vm.useProductPackage) {\n        removeAllShippingBoxes();\n      }\n      vm.storeUseProductPackage();\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, $rootScope, 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    var lastOrderId = vm.order && vm.order.id;\n\n    var unwatchOrder = $scope.$watch('order', function(newOrder) {\n      if (!newOrder || (lastOrderId && newOrder.id === lastOrderId)) {\n        return;\n      }\n      lastOrderId = newOrder.id;\n      vm.order = newOrder;\n      vm.contactId = newOrder.customer;\n      vm.shippingAddressId = newOrder.shipping_address;\n      vm.billingAddressId = newOrder.billing_address;\n      vm.hideBillingAddress = $scope.hideBillingAddress;\n      init();\n    });\n\n    vm.reloadContactEvent = $scope.$on('posOrderFulfillmentCard::reloadContact', function(event, data) {\n      if (data.contactId && data.contactId === vm.contactId) {\n        init();\n      }\n    });\n\n    $scope.$on('$destroy', function() {\n      vm.reloadContactEvent();\n      unwatchOrder();\n    });\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          parameters:{\n            forceCustomer: false,\n            forceNaturalPersonType: false\n          },\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        $rootScope.$broadcast('posOrderFulfillmentCard::reloadContact', { contactId: vm.order.customer });\n      }, function() {\n        vm.openingCustomerDialog = false;\n        $rootScope.$broadcast('posOrderFulfillmentCard::reloadContact', { contactId: vm.order.customer });\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('ndPosOrderAdditionalInformationCardController', ndPosOrderAdditionalInformationCardController)\n    .directive('ndPosOrderAdditionalInformationCard', ndPosOrderAdditionalInformationCard);\n\n  /** @ngInject */\n  function ndPosOrderAdditionalInformationCard() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/pos-order-additional-information-card/nd-pos-order-additional-information-card.html',\n      scope: {\n        order: '=',\n        warehouses: '=?',\n        readonly: '=?',\n        updateDebounce: '&?',\n        noMargin: '=?'\n      },\n      controllerAs: 'vm',\n      controller: 'ndPosOrderAdditionalInformationCardController'\n    };\n  }\n\n  /** @ngInject */\n  function ndPosOrderAdditionalInformationCardController($scope) {\n    var vm = this;\n\n    vm.order = $scope.order;\n    vm.warehouses = $scope.warehouses || [];\n    vm.readonly = $scope.readonly === true;\n    vm.noMargin = $scope.noMargin === true;\n\n    $scope.$watch('order', function(newOrder) {\n      if (newOrder) {\n        vm.order = newOrder;\n      }\n    });\n\n    vm.onUpdate = function() {\n      if (vm.readonly) {\n        return;\n      }\n      if ($scope.updateDebounce) {\n        $scope.updateDebounce();\n      }\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.data);\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.downloadFile',\n    'app.services.stockout',\n    'app.services.storage',\n    'app.services.order-actions',\n    'app.services.scan-queue',\n    'app.services.inventory-configuration',\n    'app.services.label-provider-adapter',\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.temporary-account-access',\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.product-price-edit',\n    'app.models.inventories.product-price-discount-edit',\n    'app.models.inventories.product-variant-price-edit',\n    'app.models.inventories.product-variant-price-discount-edit',\n    'app.models.inventories.ticket-configuration',\n    'app.models.inventories.inventory-configuration',\n    'app.models.inventories.gift-card',\n    'app.models.inventories.picking-packing.packing-order',\n    'app.models.inventories.picking-packing.packing-activity',\n    'app.models.packing-order-sendcloud-data',\n    'app.models.net-promoter-score',\n    'app.models.site-product',\n\n    // Accounting\n    'app.shared-kernel.monetary',\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    'app.public-registration',\n    'app.shared-kernel'\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      'INVENTORY_LOYALTY_BALANCE_SPEND_RULES': {\n        title: 'NEW_FEATURES.INVENTORY_LOYALTY_BALANCE_SPEND_RULES_NAME',\n        body: 'NEW_FEATURES.INVENTORY_LOYALTY_BALANCE_SPEND_RULES_BODY',\n        activationDate: new Date('2026-03-06'),\n        daysActive: 30,\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      'DELIVERIES_AS_LINES': {\n        title: 'NEW_FEATURES.DELIVERIES_AS_LINES_NAME',\n        body: 'NEW_FEATURES.DELIVERIES_AS_LINES_BODY',\n        activationDate: new Date('2025-12-17'),\n        daysActive: 20\n      },\n       'TEMPORARY_ACCOUNT_ACCESS': {\n        title: 'NEW_FEATURES.TEMPORARY_ACCOUNT_ACCESS_NAME',\n        body: 'NEW_FEATURES.TEMPORARY_ACCOUNT_ACCESS_BODY',\n        activationDate: new Date('2026-01-08'),\n        daysActive: 30\n      },\n      'SITE_VARIANT_MAPPING': {\n        title: 'NEW_FEATURES.SITE_VARIANT_MAPPING_NAME',\n        body: 'NEW_FEATURES.SITE_VARIANT_MAPPING_BODY',\n        activationDate: new Date('2026-02-10'),\n        daysActive: 30\n      },\n      'PICKING_SELECTIVE_PRINT': {\n        title: 'NEW_FEATURES.PICKING_SELECTIVE_PRINT_NAME',\n        body: 'NEW_FEATURES.PICKING_SELECTIVE_PRINT_BODY',\n        activationDate: new Date('2026-02-17'),\n        daysActive: 30\n      },\n      'PRODUCT_SALE_INFORMATION_CARD': {\n        title: 'NEW_FEATURES.PRODUCT_SALE_INFORMATION_CARD_NAME',\n        body: 'NEW_FEATURES.PRODUCT_SALE_INFORMATION_CARD_BODY',\n        activationDate: new Date('2026-03-05'),\n        daysActive: 30\n      },\n      'PUBLIC_REGISTRATION_CUSTOMER_LINKS': {\n        title: 'NEW_FEATURES.PUBLIC_REGISTRATION_CUSTOMER_LINKS_NAME',\n        body: 'NEW_FEATURES.PUBLIC_REGISTRATION_CUSTOMER_LINKS_BODY',\n        activationDate: new Date('2026-04-14'),\n        daysActive: 60\n      },\n      'GIFT_CARD_TOGGLE_VALIDITY': {\n        title: 'NEW_FEATURES.GIFT_CARD_TOGGLE_VALIDITY_NAME',\n        body: 'NEW_FEATURES.GIFT_CARD_TOGGLE_VALIDITY_BODY',\n        activationDate: new Date('2026-04-08'),\n        daysActive: 30\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('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('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('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('ndVouchersListController', ndVouchersListController)\n    .directive('ndVouchersList', ndVouchersList);\n\n  /** @ngInject */\n  function ndVouchersList() {\n    return {\n      restrict: 'E',\n      scope: {\n        siteId: '=?'\n      },\n      controller: 'ndVouchersListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-vouchers-list/nd-vouchers-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndVouchersListController($scope, $filter, api, SEARCH_MAX_LENGTH, UiGridService) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.ecommerce.prestashopSiteGiftCards.replace('/:id', '');\n    vm.context = 'ecommerce_site_vouchers';\n    vm.storageLabel = 'UIGridEcommerceSiteVouchersController';\n    vm.status = {\n      state: {},\n      search: '',\n      ordering: '',\n      filters: {\n        types: [],\n        is_valid: []\n      },\n      filtersParams: {},\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE,\n      totalItemsField: 'recordsFiltered'\n    };\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.types = ['gift_card', 'voucher'];\n    vm.is_valid = [true, false];\n    vm.filterChanged = filterChanged;\n\n    vm.columns = {\n      is_voucher: {\n        displayName: $filter('translate')('GIFT_CARDS.TYPE'),\n        headerTooltip: $filter('translate')('GIFT_CARDS.TYPE'),\n        field: 'gift_card.is_voucher',\n        permission: true,\n        visible: true,\n        enablePinning: true,\n        pinnedLeft: true,\n        enableHiding: false,\n        enableColumnMoving: false,\n        minWidth: 150,\n        width: 150,\n        cellTemplate: '<div class=\"cell-middle\"><span ng-if=\"!(row.entity.gift_card && row.entity.gift_card.is_voucher)\"><md-icon md-font-icon=\"icon-wallet-giftcard\" class=\"mr-5\"></md-icon>{{\\'GIFT_CARDS.GIFT_CARD\\' | translate}}</span>' +\n          '<span ng-if=\"row.entity.gift_card && row.entity.gift_card.is_voucher\"><md-icon md-font-icon=\"icon-wallet-membership\" class=\"mr-5\"></md-icon>{{\\'GIFT_CARDS.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: true,\n        minWidth: 130\n      },\n      cart_rule_id: {\n        displayName: $filter('translate')('GIFT_CARDS.CART_RULE_ID'),\n        headerTooltip: $filter('translate')('GIFT_CARDS.CART_RULE_ID'),\n        field: 'cart_rule_id',\n        permission: true,\n        visible: true,\n        minWidth: 120,\n        width: 140,\n        cellTemplate: '<div class=\"cell-middle\">{{row.entity.cart_rule_id || \"-\"}}</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: true,\n        minWidth: 140,\n        width: 160,\n        cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.created_at)}}</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: true,\n        minWidth: 200,\n        cellTemplate: '<div class=\"cell-middle\">{{row.entity.customer ? (row.entity.customer | personname) : \"-\"}}</div>'\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: true,\n        minWidth: 100,\n        width: 120,\n        cellClass: 'cell-right amount-cell',\n        cellTemplate: '<div class=\"cell-middle\">{{row.entity.amount_incl_tax === null || row.entity.amount_incl_tax === undefined ? \"-\" : grid.appScope.getPrice(row.entity.amount_incl_tax)}}</div>'\n      },\n      external_customer_id: {\n        displayName: $filter('translate')('GIFT_CARDS.EXTERNAL_CUSTOMER_ID'),\n        headerTooltip: $filter('translate')('GIFT_CARDS.EXTERNAL_CUSTOMER_ID'),\n        field: 'external_customer_id',\n        permission: true,\n        visible: true,\n        minWidth: 170,\n        width: 190,\n        cellTemplate: '<div class=\"cell-middle\">{{row.entity.external_customer_id || \"-\"}}</div>'\n      },\n      external_customer_email: {\n        displayName: $filter('translate')('GIFT_CARDS.EXTERNAL_CUSTOMER_EMAIL'),\n        headerTooltip: $filter('translate')('GIFT_CARDS.EXTERNAL_CUSTOMER_EMAIL'),\n        field: 'external_customer_email',\n        permission: true,\n        visible: true,\n        minWidth: 210,\n        width: 240,\n        cellTemplate: '<div class=\"cell-middle\">{{row.entity.external_customer_email || \"-\"}}</div>'\n      },\n      quantity: {\n        displayName: $filter('translate')('GIFT_CARDS.QUANTITY'),\n        headerTooltip: $filter('translate')('GIFT_CARDS.QUANTITY'),\n        field: 'quantity',\n        permission: true,\n        visible: true,\n        minWidth: 100,\n        width: 120,\n        cellTemplate: '<div class=\"cell-middle\">{{row.entity.quantity || \"-\"}}</div>'\n      },\n      quantity_per_user: {\n        displayName: $filter('translate')('GIFT_CARDS.QUANTITY_PER_USER'),\n        headerTooltip: $filter('translate')('GIFT_CARDS.QUANTITY_PER_USER'),\n        field: 'quantity_per_user',\n        permission: true,\n        visible: true,\n        minWidth: 140,\n        width: 170,\n        cellTemplate: '<div class=\"cell-middle\">{{row.entity.quantity_per_user || \"-\"}}</div>'\n      },\n      tax_included: {\n        displayName: $filter('translate')('GIFT_CARDS.TAX_INCLUDED'),\n        headerTooltip: $filter('translate')('GIFT_CARDS.TAX_INCLUDED'),\n        field: 'tax_included',\n        permission: true,\n        visible: true,\n        minWidth: 130,\n        width: 150,\n        cellTemplate: '<div class=\"cell-middle\"><span ng-if=\"row.entity.tax_included === null || row.entity.tax_included === undefined\">-</span><span ng-if=\"row.entity.tax_included === true\">{{\\'GIFT_CARDS.YES\\' | translate}}</span><span ng-if=\"row.entity.tax_included === false\">{{\\'GIFT_CARDS.NO\\' | translate}}</span></div>'\n      },\n      is_active: {\n        displayName: $filter('translate')('GIFT_CARDS.IS_ACTIVE'),\n        headerTooltip: $filter('translate')('GIFT_CARDS.IS_ACTIVE'),\n        field: 'is_active',\n        permission: true,\n        visible: true,\n        minWidth: 120,\n        width: 140,\n        cellTemplate: '<div class=\"cell-middle\"><span ng-if=\"row.entity.is_active\">{{\\'GIFT_CARDS.ACTIVE\\' | translate}}</span><span ng-if=\"!row.entity.is_active\">{{\\'GIFT_CARDS.INACTIVE\\' | translate}}</span></div>'\n      },\n      date_updated: {\n        displayName: $filter('translate')('GIFT_CARDS.DATE_UPDATED'),\n        headerTooltip: $filter('translate')('GIFT_CARDS.DATE_UPDATED'),\n        field: 'date_updated',\n        permission: true,\n        visible: true,\n        minWidth: 150,\n        width: 170,\n        cellTemplate: '<div class=\"cell-middle\">{{row.entity.date_updated ? grid.appScope.getShortDate(row.entity.date_updated) : \"-\"}}</div>'\n      },\n      last_sync_uploaded: {\n        displayName: $filter('translate')('GIFT_CARDS.LAST_SYNC_UPLOADED'),\n        headerTooltip: $filter('translate')('GIFT_CARDS.LAST_SYNC_UPLOADED'),\n        field: 'last_sync_uploaded',\n        permission: true,\n        visible: true,\n        minWidth: 170,\n        width: 180,\n        cellTemplate: '<div class=\"cell-middle\">{{row.entity.last_sync_uploaded ? grid.appScope.getShortDate(row.entity.last_sync_uploaded) : \"-\"}}</div>'\n      },\n      last_sync_downloaded: {\n        displayName: $filter('translate')('GIFT_CARDS.LAST_SYNC_DOWNLOADED'),\n        headerTooltip: $filter('translate')('GIFT_CARDS.LAST_SYNC_DOWNLOADED'),\n        field: 'last_sync_downloaded',\n        permission: true,\n        visible: true,\n        minWidth: 180,\n        width: 190,\n        cellTemplate: '<div class=\"cell-middle\">{{row.entity.last_sync_downloaded ? grid.appScope.getShortDate(row.entity.last_sync_downloaded) : \"-\"}}</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: true,\n        minWidth: 120,\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><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    initializeStatus();\n    vm.filters = vm.status.filters;\n    updateFiltersParams();\n\n    var deregisterSiteIdWatcher = $scope.$watch('siteId', updateFiltersParams);\n    var deregisterTypesWatcher = $scope.$watchCollection(function() {\n      return vm.status.filters.types;\n    }, updateFiltersParams);\n    var deregisterValidityWatcher = $scope.$watchCollection(function() {\n      return vm.status.filters.is_valid;\n    }, updateFiltersParams);\n\n    $scope.$on('$destroy', function() {\n      [deregisterSiteIdWatcher, deregisterTypesWatcher, deregisterValidityWatcher].forEach(function(deregisterWatcher) {\n        if (angular.isFunction(deregisterWatcher)) {\n          deregisterWatcher();\n        }\n      });\n    });\n\n    function initializeStatus() {\n      vm.status.filters = vm.status.filters || {};\n      vm.status.filters.types = vm.status.filters.types || [];\n      vm.status.filters.is_valid = vm.status.filters.is_valid || [];\n      vm.status.filters.site_id = vm.status.filters.site_id || $scope.siteId;\n      vm.status.filtersParams = vm.status.filtersParams || {};\n      vm.status.totalItemsField = 'recordsFiltered';\n    }\n\n    function updateFiltersParams() {\n      vm.status.filters.site_id = $scope.siteId;\n      vm.status.filtersParams.site_id = $scope.siteId;\n      vm.status.filtersParams.types = vm.status.filters.types;\n      vm.status.filtersParams.is_valid = vm.status.filters.is_valid;\n    }\n\n    function filterChanged() {\n      vm.status.pageNumber = 1;\n      $scope.$broadcast('ndGrid::filtersChanged');\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndVerifactuBadgeController', ndVerifactuBadgeController)\n    .directive('ndVerifactuBadge', ndVerifactuBadge);\n\n  /** @ngInject */\n  function ndVerifactuBadge() {\n    return {\n      restrict: 'E',\n      scope: {\n        value: '=',\n        type: '@'\n      },\n      controller: 'ndVerifactuBadgeController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-verifactu-badge/nd-verifactu-badge.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndVerifactuBadgeController($scope, $filter) {\n\n    // Data\n    var vm = this;\n    vm.value = $scope.value;\n    vm.type = $scope.type;\n    vm.label = '';\n    vm.className = 'text-boxed';\n\n    // Initialize\n    initialize();\n\n    // Watch for changes\n    $scope.$watch('value', function(newValue) {\n      if (newValue !== undefined) {\n        vm.value = newValue;\n        initialize();\n      }\n    });\n\n    // Functions\n    function initialize() {\n      if (!vm.value && vm.value !== 0) {\n        vm.label = '-';\n        vm.className = 'text-boxed';\n        return;\n      }\n\n      switch(vm.type) {\n        case 'operation':\n          processOperationType();\n          break;\n        case 'document':\n          processDocumentType();\n          break;\n        case 'status':\n          processStatus();\n          break;\n        default:\n          vm.label = vm.value || '-';\n          vm.className = 'text-boxed';\n      }\n    }\n\n    function processOperationType() {\n      var parts = vm.value.split('.');\n      var operation = parts.length > 1 ? parts[1] : vm.value;\n\n      switch(operation) {\n        case 'created':\n          vm.label = $filter('translate')('VERIFACTU.OPERATION_TYPE_CREATION');\n          vm.className = 'text-boxed blue';\n          break;\n        case 'cancelled':\n          vm.label = $filter('translate')('VERIFACTU.OPERATION_TYPE_CANCELLATION');\n          vm.className = 'text-boxed red';\n          break;\n        default:\n          vm.label = operation || '-';\n          vm.className = 'text-boxed';\n      }\n    }\n\n    function processDocumentType() {\n      switch(vm.value) {\n        case 'invoice':\n          vm.label = $filter('translate')('VERIFACTU.DOCUMENT_TYPE_COMPLETE_INVOICE');\n          vm.className = 'text-boxed blue';\n          break;\n        case 'pos_order_invoice':\n          vm.label = $filter('translate')('VERIFACTU.DOCUMENT_TYPE_SIMPLIFIED_INVOICE');\n          vm.className = 'text-boxed green';\n          break;\n        case 'invoice_corrective':\n          vm.label = $filter('translate')('VERIFACTU.DOCUMENT_TYPE_RECTIFICATIVE_INVOICE');\n          vm.className = 'text-boxed orange';\n          break;\n        case 'invoice_substitutive':\n          vm.label = $filter('translate')('VERIFACTU.DOCUMENT_TYPE_SUBSTITUTIVE_INVOICE');\n          vm.className = 'text-boxed purple';\n          break;\n        default:\n          vm.label = vm.value || '-';\n          vm.className = 'text-boxed';\n      }\n    }\n\n    function processStatus() {\n      switch(vm.value) {\n        case 1:\n        case 'Pending':\n          vm.label = $filter('translate')('VERIFACTU.STATUS_PENDING');\n          vm.className = 'text-boxed orange';\n          break;\n        case 2:\n        case 'Processing':\n          vm.label = $filter('translate')('VERIFACTU.STATUS_PROCESSING');\n          vm.className = 'text-boxed blue';\n          break;\n        case 3:\n        case 'Processed':\n          vm.label = $filter('translate')('VERIFACTU.STATUS_PROCESSED');\n          vm.className = 'text-boxed green';\n          break;\n        case 4:\n        case 'Error':\n        case 'WithErrors':\n          vm.label = $filter('translate')('VERIFACTU.STATUS_WITH_ERRORS');\n          vm.className = 'text-boxed red';\n          break;\n        default:\n          vm.label = vm.value || '-';\n          vm.className = 'text-boxed';\n      }\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('ndSiteOperationBadgeController', ndSiteOperationBadgeController)\n    .directive('ndSiteOperationBadge', ndSiteOperationBadge);\n\n  /** @ngInject */\n  function ndSiteOperationBadge() {\n    return {\n      restrict: 'E',\n      scope: {\n        value: '=',\n        type: '@'\n      },\n      controller: 'ndSiteOperationBadgeController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-site-operation-badge/nd-site-operation-badge.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndSiteOperationBadgeController($scope, EventBadgeHelper) {\n\n    var vm = this;\n    vm.value = $scope.value;\n    vm.type = $scope.type;\n    vm.label = '';\n    vm.className = 'text-boxed';\n\n    initialize();\n\n    $scope.$watch('value', function(newValue) {\n      if (newValue !== undefined) {\n        vm.value = newValue;\n        initialize();\n      }\n    });\n\n    function initialize() {\n      if (!vm.value && vm.value !== 0) {\n        vm.label = '-';\n        vm.className = 'text-boxed';\n        return;\n      }\n\n      switch(vm.type) {\n        case 'operation':\n          setBadgeData(EventBadgeHelper.getSiteOperationBadgeData(vm.value));\n          break;\n        case 'status':\n          setBadgeData(EventBadgeHelper.getStatusBadgeData(vm.value, 'SITE'));\n          break;\n        default:\n          vm.label = vm.value || '-';\n          vm.className = 'text-boxed';\n      }\n    }\n\n    function setBadgeData(badgeData) {\n      vm.label = badgeData.label;\n      vm.className = badgeData.className;\n    }\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('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('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('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.columnsReady = false;\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      sanitizePersistedColumns();\n      vm.columnsReady = true;\n    }\n\n    function sanitizePersistedColumns() {\n      var persistedColumns;\n      var sanitizedColumns;\n\n      if (!vm.status || !vm.status.state || !angular.isArray(vm.status.state.columns)) {\n        return;\n      }\n\n      persistedColumns = vm.status.state.columns;\n      sanitizedColumns = persistedColumns.filter(function (column) {\n        return column && column.name && vm.columns[column.name];\n      });\n\n      if (!sanitizedColumns.length) {\n        vm.status.state.columns = null;\n        return;\n      }\n\n      vm.status.state.columns = sanitizedColumns;\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              return apiResolver.resolve('inventories.posOrders@get', {\n                id: object.id,\n                serializer: 'PosOrderWithDevolutionsSerializer',\n              });\n            },\n          },\n        })\n        .then(\n          function (refresh) {\n            vm.dialogOpened = false;\n            if (refresh) {\n              $rootScope.$broadcast('ndGrid::filtersChanged');\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    .directive('mdOptionClickFix', mdOptionClickFix);\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 mdOptionClickFix() {\n    return {\n      restrict: 'A',\n      link: function(scope, element) {\n        setTimeout(function() {\n          var mdTextElements = element[0].querySelectorAll('md-option .md-text');\n          angular.forEach(mdTextElements, function(mdTextEl) {\n            mdTextEl.addEventListener('click', function(event) {\n              var mdOption = mdTextEl.closest('md-option');\n              if (mdOption && event.target !== mdOption) {\n                var clickEvent = new MouseEvent('click', {\n                  bubbles: true,\n                  cancelable: true,\n                  view: window\n                });\n                mdOption.dispatchEvent(clickEvent);\n                event.stopPropagation();\n              }\n            });\n          });\n        }, 100);\n      }\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    PRODUCT_SHIPPING_BOX_ID,\n    $timeout\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 = 'UIGridInventoryPackingProductsControllerV2';\n    vm.ITEM_STATUS = ITEM_PACKING_STATUS;\n    vm.WEIGHT_UNITS_FORMATTED = WEIGHT_UNITS_FORMATTED;\n    vm.PRODUCT_SHIPPING_BOX_ID = PRODUCT_SHIPPING_BOX_ID;\n    vm.finishing = false;\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    // Recibe el estado de finishing desde PackingProductsController\n    vm.finishingEvent = $scope.$on('PackingProductsController::finishing', function (event, finishing) {\n      vm.finishing = !!finishing;\n    });\n\n    // Unregister Events\n    $scope.$on('$destroy', function () {\n      if (vm.finishingEvent) {\n        vm.finishingEvent();\n      }\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      $timeout(function() {\n        shippingBoxChanged(data, false);\n      }, 100);\n    });\n\n    var setProductShippingBoxEvent = $scope.$on('PackingProductsController::setProductShippingBoxForPackedItems', function () {\n      $timeout(function() {\n        setProductShippingBoxForPackedItems();\n      }, 100);\n    });\n\n\n    var gridApiListener = $scope.$on('gridApiInitialized', function(event, gridApi) {\n      vm.gridApi = gridApi;\n      $scope.$emit('ndPackingProductsList::gridApiInitialized', gridApi);\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        meta: {\n          displayName: $filter('translate')('PICKING.METADATA'),\n          headerTooltip: $filter('translate')('PICKING.METADATA'),\n          field: 'meta',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-if=\"row.entity.meta && row.entity.meta.length\">' +\n                        '  <span ng-repeat=\"item in row.entity.meta track by $index\">' +\n                        '    <strong>{{item.key}}</strong>: {{item.value}}<span ng-if=\"!$last\"> | </span>' +\n                        '  </span>' +\n                        '</div>'\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          pinnedRight: true,\n          enableHiding: true,\n          cellTemplate: '<div layout=\"column\" flex>' +\n            '<md-select md-option-click-fix 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\" ' +\n            'ng-disabled=\"grid.appScope.$parent.vm.finishing || ((grid.appScope.$parent.packingOrder.isPendingToShip() && grid.appScope.$parent.packingOrder.hasParcels()) || grid.appScope.$parent.packingOrder.isShipped())\" ' +\n            'ng-change=\"grid.appScope.$parent.vm.shippingBoxChanged(row.entity, false)\">' +\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=\"-1\">' +\n            '{{\\'SCAN_AND_GO.PRODUCT_SHIPPING_BOX\\' | translate}}' +\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-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          pinnedRight: true,\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}\" ' +\n            'ng-disabled=\"grid.appScope.$parent.vm.finishing || ((grid.appScope.$parent.packingOrder.isPendingToShip() && grid.appScope.$parent.packingOrder.hasParcels() && !grid.appScope.$parent.packingOrder.labelsGenerationFailed) || 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}\" ' +\n            'ng-disabled=\"grid.appScope.$parent.vm.finishing || ((grid.appScope.$parent.packingOrder.isPendingToShip() && grid.appScope.$parent.packingOrder.hasParcels() && !grid.appScope.$parent.packingOrder.labelsGenerationFailed) || 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          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      var currentShippingBox = row.packing_order_shipping_box;\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 (currentShippingBox !== vm.PRODUCT_SHIPPING_BOX_ID &&\n              response &&\n              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          $scope.$emit('PackingProductsController::itemStatusChanged');\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function setProductShippingBoxForPackedItems() {\n      if (!vm.gridApi || !vm.gridApi.grid || !vm.gridApi.grid.rows) {\n        $scope.$emit('PackingProductsController::setProductShippingBoxForPackedItemsCompleted');\n        return;\n      }\n\n      var itemsToUpdate = [];\n      vm.gridApi.grid.rows.forEach(function(row) {\n        if (!row.entity) {\n          return;\n        }\n\n        if (row.entity.packed === vm.ITEM_STATUS.PACKED && !row.entity.packing_order_shipping_box) {\n          row.entity.packing_order_shipping_box = vm.PRODUCT_SHIPPING_BOX_ID;\n          itemsToUpdate.push(row.entity);\n        }\n      });\n\n      if (itemsToUpdate.length === 0) {\n        $scope.$emit('PackingProductsController::setProductShippingBoxForPackedItemsCompleted');\n        return;\n      }\n\n      var completedCount = 0;\n      var totalCount = itemsToUpdate.length;\n      itemsToUpdate.forEach(function(item) {\n        shippingBoxChanged(item, false, null, function() {\n          completedCount++;\n          if (completedCount === totalCount) {\n            $scope.$emit('PackingProductsController::setProductShippingBoxForPackedItemsCompleted');\n          }\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, callback) {\n      if (event) {\n        event.stopPropagation();\n      }\n      if (isNewShippingBox) {\n        vm.createShippingBoxWithProductVariant(row);\n        $mdSelect.hide();\n        if (callback) {\n          callback();\n        }\n        return;\n      }\n      var payload = {\n        id: row.id,\n        packing_order_shipping_box: row.packing_order_shipping_box\n      };\n      if (row.packing_order_shipping_box === vm.PRODUCT_SHIPPING_BOX_ID) {\n        row.use_product_shipping_box = true;\n      } else {\n        row.use_product_shipping_box = false;\n      }\n\n      api.inventories.pickingPackingPackingOrderProductVariants.patch(payload, function (response, fn, status) {\n        row.changingPackingStatus = false;\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          if (response && angular.isDefined(response.use_product_shipping_box)) {\n            row.use_product_shipping_box = response.use_product_shipping_box;\n          }\n          if (callback) {\n            callback();\n          }\n          return;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          if (callback) {\n            callback();\n          }\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    $scope.$on('$destroy', function() {\n      if (setProductShippingBoxEvent) {\n        setProductShippingBoxEvent();\n      }\n      if (gridApiListener) {\n        gridApiListener();\n      }\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 ? 'UIGridAccountingInvoicesControllerV6' : $scope.type == INVOICE_TYPES.PROFORMA ? 'UIGridAccountingProformaControllerV6' : 'UIGridAccountingQuotesControllerV6';\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          name: 'concept',\n          field: 'concept',\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        '<span class=\"ml-5 secondary-text\" ng-if=\"invoice.cancellation_of\" style=\"display: inline;\">',\n        '({{ \"INVOICE.CANCELLATION_OF\" | translate }}: <nd-a style=\"display: inline;\" state=\"cancellationOfState\" state-params=\"cancellationOfStateParams\">{{ invoice.cancellation_of.autocode }}</nd-a>)',\n        '</span>',\n        '<span class=\"ml-5 secondary-text\" ng-if=\"invoice.cancelled_by\" style=\"display: inline;\">',\n        '({{ \"INVOICE.CANCELLED_BY\" | translate }}: <nd-a style=\"display: inline;\" state=\"cancelledByState\" state-params=\"cancelledByStateParams\">{{ invoice.cancelled_by.autocode || (\"INVOICE.DRAFT\" | translate) }}</nd-a>)',\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.getCancellationOf = function() {\n          if ($scope.invoice.cancellation_of) {\n            $scope.cancellationOfState = 'app.accounting.invoices.invoice';\n            $scope.cancellationOfStateParams = { id: $scope.invoice.cancellation_of.id };\n          }\n        };\n\n        $scope.getCancelledBy = function() {\n          if ($scope.invoice.cancelled_by) {\n            $scope.cancelledByState = 'app.accounting.invoices.invoice';\n            $scope.cancelledByStateParams = { id: $scope.invoice.cancelled_by.id };\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        $scope.getCancellationOf();\n        $scope.getCancelledBy();\n\n      }]\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndHandlerEventsListController', ndHandlerEventsListController)\n    .directive('ndHandlerEventsList', ndHandlerEventsList);\n\n  function ndHandlerEventsList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        listConfig: '=?'\n      },\n      controller: 'ndHandlerEventsListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-handler-events-list/nd-handler-events-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndHandlerEventsListController($scope, $filter, api) {\n    var vm = this;\n    vm.listConfig = $scope.listConfig || {};\n    vm.url = vm.listConfig.url || api.urls.integrationApps.handlerEvents;\n    vm.columns = vm.listConfig.columns || createColumns(vm.listConfig.columnsConfig || {});\n    vm.status = $scope.status;\n    vm.status.expand = vm.listConfig.expand || 'integration_event';\n    if (vm.listConfig.nonStorableFilters) {\n      vm.status.nonStorableFilters = vm.listConfig.nonStorableFilters;\n    }\n    vm.storageLabel = vm.listConfig.storageLabel || 'UIGridHandlerEventsListV2';\n\n    $scope.formatDate = formatDate;\n\n    function createColumns(columnConfig) {\n      columnConfig = angular.extend({\n        translationPrefix: 'HANDLER_EVENTS',\n        idTranslationKey: 'EVENT_ID',\n        processedAtTranslationKey: 'PROCESSED_AT',\n        operationTypeTranslationKey: 'OPERATION_TYPE',\n        statusTranslationKey: 'STATUS',\n        detailState: 'app.integration_apps.handler_events.detail',\n        detailStateParam: 'id',\n        badgeDirective: 'nd-handler-event-badge',\n        statusEnableSorting: true\n      }, columnConfig || {});\n\n      var translationPrefix = columnConfig.translationPrefix || 'HANDLER_EVENTS';\n      var badgeDirective = columnConfig.badgeDirective || 'nd-handler-event-badge';\n      var idCellTemplate = '<div><a ui-sref=\"' + columnConfig.detailState + '({' + columnConfig.detailStateParam + ': row.entity.id})\"> {{row.entity.id}} </a></div>';\n      var operationCellTemplate = '<' + badgeDirective + ' value=\"row.entity.operation_type\" type=\"operation\"></' + badgeDirective + '>';\n      var statusCellTemplate = '<' + badgeDirective + ' value=\"row.entity.status\" type=\"status\"></' + badgeDirective + '>';\n\n      return {\n        id: {\n          displayName: $filter('translate')(translationPrefix + '.' + columnConfig.idTranslationKey),\n          field: 'id',\n          permission: true,\n          visible: true,\n          minWidth: 250,\n          width: 300,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          enableSorting: false,\n          cellClass: 'cell-padding',\n          cellTemplate: idCellTemplate\n        },\n        processed_at: {\n          displayName: $filter('translate')(translationPrefix + '.' + columnConfig.processedAtTranslationKey),\n          field: 'processed_at',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          width: 180,\n          enablePinning: false,\n          enableHiding: true,\n          enableSorting: true,\n          cellClass: 'cell-padding',\n          cellTemplate: '<span>{{grid.appScope.$parent.formatDate(row.entity.processed_at)}}</span>'\n        },\n        operation_type: {\n          displayName: $filter('translate')(translationPrefix + '.' + columnConfig.operationTypeTranslationKey),\n          field: 'operation_type',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          width: 180,\n          enablePinning: false,\n          enableHiding: true,\n          enableSorting: false,\n          cellClass: 'cell-padding',\n          cellTemplate: operationCellTemplate\n        },\n        status: {\n          displayName: $filter('translate')(translationPrefix + '.' + columnConfig.statusTranslationKey),\n          field: 'status',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          width: 180,\n          enablePinning: false,\n          enableHiding: true,\n          enableSorting: !!columnConfig.statusEnableSorting,\n          cellClass: 'cell-padding',\n          cellTemplate: statusCellTemplate\n        }\n      };\n    }\n\n    function formatDate(date) {\n      if (!date) {\n        return '-';\n      }\n      return $filter('date')(date, 'dd/MM/yyyy HH:mm:ss');\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndHandlerEventBadgeController', ndHandlerEventBadgeController)\n    .directive('ndHandlerEventBadge', ndHandlerEventBadge);\n\n  /** @ngInject */\n  function ndHandlerEventBadge() {\n    return {\n      restrict: 'E',\n      scope: {\n        value: '=',\n        type: '@'\n      },\n      controller: 'ndHandlerEventBadgeController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-handler-event-badge/nd-handler-event-badge.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndHandlerEventBadgeController($scope, EventBadgeHelper) {\n    var vm = this;\n    vm.value = $scope.value;\n    vm.type = $scope.type;\n    vm.label = '';\n    vm.className = 'text-boxed';\n\n    initialize();\n\n    $scope.$watch('value', function(newValue) {\n      if (newValue !== undefined) {\n        vm.value = newValue;\n        initialize();\n      }\n    });\n\n    function initialize() {\n      if (!vm.value && vm.value !== 0) {\n        vm.label = '-';\n        vm.className = 'text-boxed';\n        return;\n      }\n\n      switch (vm.type) {\n        case 'status':\n          setBadgeData(EventBadgeHelper.getStatusBadgeData(vm.value, 'HANDLER_EVENTS'));\n          break;\n        case 'operation':\n          setBadgeData(EventBadgeHelper.getHandlerOperationBadgeData(vm.value));\n          break;\n        default:\n          vm.label = vm.value || '-';\n          vm.className = 'text-boxed';\n      }\n    }\n\n    function setBadgeData(badgeData) {\n      vm.label = badgeData.label;\n      vm.className = badgeData.className;\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        lockStatusFilter: '=?',\n        fixedStatus: '=?'\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 = true;\n    vm.saving = false;\n    vm.timeout = null;\n    vm.expandVisibleColumnsTimeout = null;\n    vm.handlingWindowResize = false;\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.lockStatusFilter = !!$scope.lockStatusFilter;\n    vm.fixedStatus = $scope.fixedStatus;\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.persistStatusOnDestroyWatcher = $scope.$on('$destroy', function() {\n        if (!vm.uiGridInitialized || !vm.gridApi || !vm.gridApi.saveState || !vm.gridApi.saveState.save) {\n          return;\n        }\n\n        saveStatus();\n      });\n\n      vm.sizeWatcher = $scope.$on('ndGrid::sizeChanged', function() {\n        vm.gridApi.core.handleWindowResize();\n        scheduleExpandVisibleColumns();\n      });\n      $scope.$on('$destroy', function() {\n        vm.sizeWatcher();\n        vm.persistStatusOnDestroyWatcher();\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        scheduleExpandVisibleColumns();\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        scheduleExpandVisibleColumns();\n      });\n\n      vm.gridApi.colMovable.on.columnPositionChanged($scope, function(oldPosition, newPositio) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n        scheduleExpandVisibleColumns();\n      });\n\n      vm.gridApi.colResizable.on.columnSizeChanged($scope, function(colDef, deltaChange) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n        scheduleExpandVisibleColumns();\n      });\n\n      loadStatus();\n      setGridColumns();\n      getGridPage();\n      scheduleExpandVisibleColumns();\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        if (vm.gridOptions.columnDefs.length) {\n          return;\n        }\n      }\n\n      if (vm.status.state) {\n        vm.status.state.columns = null;\n      }\n\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    function restoreGridColumns() {\n      vm.columns = {};\n      vm.gridOptions.columnDefs = [];\n      vm.status.ordering = null;\n\n      setGridColumns(true);\n      getGridPage();\n      scheduleExpandVisibleColumns();\n      // Without the timeout the saveStatus is not working, pending to investigate\n      $timeout(function() {\n        saveStatus();\n      }, 100);\n    }\n\n    function scheduleExpandVisibleColumns() {\n      if (!vm.gridApi || !vm.gridApi.grid) {\n        return;\n      }\n\n      if (vm.expandVisibleColumnsTimeout) {\n        $timeout.cancel(vm.expandVisibleColumnsTimeout);\n      }\n\n      vm.expandVisibleColumnsTimeout = $timeout(function() {\n        vm.expandVisibleColumnsTimeout = null;\n        expandVisibleColumnsToViewport();\n      }, 100, false);\n    }\n\n    function getColumnCurrentWidth(column, grid) {\n      if (angular.isNumber(column.drawnWidth) && column.drawnWidth > 0) {\n        return column.drawnWidth;\n      }\n      if (angular.isNumber(column.width) && column.width > 0) {\n        return column.width;\n      }\n      if (column.colDef && angular.isNumber(column.colDef.width) && column.colDef.width > 0) {\n        return column.colDef.width;\n      }\n      if (grid.options && angular.isNumber(grid.options.columnWidth) && grid.options.columnWidth > 0) {\n        return grid.options.columnWidth;\n      }\n      return 0;\n    }\n\n    function getBodyViewportWidth(grid, bodyContainer) {\n      var viewport = bodyContainer.viewport && bodyContainer.viewport[0] ? bodyContainer.viewport[0] : null;\n      if (viewport && viewport.clientWidth > 0) {\n        return viewport.clientWidth;\n      }\n\n      if (grid.element && grid.element[0]) {\n        var fallbackViewport = grid.element[0].querySelector('.ui-grid-render-container-body .ui-grid-viewport');\n        if (fallbackViewport && fallbackViewport.clientWidth > 0) {\n          return fallbackViewport.clientWidth;\n        }\n      }\n\n      return 0;\n    }\n\n    function expandVisibleColumnsToViewport() {\n      if (!vm.gridApi || !vm.gridApi.grid || !vm.gridApi.grid.renderContainers) {\n        return;\n      }\n\n      var grid = vm.gridApi.grid;\n      var bodyContainer = grid.renderContainers.body;\n      if (!bodyContainer || !bodyContainer.visibleColumnCache || !bodyContainer.visibleColumnCache.length) {\n        return;\n      }\n\n      var availableWidth = getBodyViewportWidth(grid, bodyContainer);\n      if (!availableWidth) {\n        return;\n      }\n\n      var visibleColumns = bodyContainer.visibleColumnCache.filter(function(column) {\n        return column && column.visible !== false;\n      });\n      if (!visibleColumns.length) {\n        return;\n      }\n\n      var usedWidth = 0;\n      visibleColumns.forEach(function(column) {\n        usedWidth += getColumnCurrentWidth(column, grid);\n      });\n\n      if (usedWidth >= availableWidth) {\n        return;\n      }\n\n      var extraWidth = Math.floor(availableWidth - usedWidth);\n      if (extraWidth <= 0) {\n        return;\n      }\n\n      var widthPerColumn = Math.floor(extraWidth / visibleColumns.length);\n      var remainder = extraWidth % visibleColumns.length;\n\n      var hasWidthChanges = false;\n\n      visibleColumns.forEach(function(column, index) {\n        var increment = widthPerColumn + (index < remainder ? 1 : 0);\n        if (increment <= 0) {\n          return;\n        }\n\n        var newWidth = getColumnCurrentWidth(column, grid) + increment;\n        column.width = newWidth;\n        column.drawnWidth = newWidth;\n        if (column.colDef) {\n          column.colDef.width = newWidth;\n        }\n        hasWidthChanges = true;\n      });\n\n      if (!hasWidthChanges || !vm.gridApi || !vm.gridApi.core || vm.handlingWindowResize) {\n        return;\n      }\n\n      vm.handlingWindowResize = true;\n      try {\n        vm.gridApi.core.handleWindowResize();\n      } finally {\n        $timeout(function() {\n          vm.handlingWindowResize = false;\n        }, 0, false);\n      }\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      if (vm.status.pageSize === null || vm.status.pageSize === undefined) {\n        vm.status.pageSize = UiGridService.DEFAULT_PAGE_SIZE;\n      }\n      vm.status.state.pagination = vm.status.state.pagination || {};\n      vm.status.state.pagination.paginationCurrentPage = vm.status.pageNumber;\n      vm.status.state.pagination.paginationPageSize = vm.status.pageSize;\n      localStorage.setItem(Session.company.id + '::' + $scope.storageLabel, JSON.stringify(vm.status));\n      vm.status.nonStorableFilters = copyNonStorableFilters;\n    }\n\n    function loadStatus() {\n      var storageKey = Session.company.id + '::' + $scope.storageLabel;\n      var loadedStatus = parseStatusFromStorage(storageKey);\n      var searchParam = vm.status.search;\n      var lockedStatusFilter = getLockedStatusFilter();\n      var paginationNormalized = normalizePersistedPagination(loadedStatus);\n      var columnsSanitized = sanitizePersistedColumns(loadedStatus);\n\n      if (columnsSanitized || paginationNormalized) {\n        localStorage.setItem(storageKey, JSON.stringify(loadedStatus));\n      }\n\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        reapplyLockedStatusFilter(lockedStatusFilter);\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        reapplyLockedStatusFilter(lockedStatusFilter);\n      }\n    }\n\n    function parseStatusFromStorage(storageKey) {\n      var rawStatus = localStorage.getItem(storageKey);\n\n      if (!rawStatus) {\n        return null;\n      }\n\n      try {\n        return JSON.parse(rawStatus);\n      } catch (error) {\n        localStorage.removeItem(storageKey);\n        return null;\n      }\n    }\n\n    function normalizePersistedPagination(status) {\n      if (!status || typeof status !== 'object') {\n        return false;\n      }\n\n      var changed = false;\n      var pageSize = parseInt(status.pageSize, 10);\n      var pageNumber = parseInt(status.pageNumber, 10);\n\n      if (!pageSize || pageSize < 1) {\n        pageSize = UiGridService.DEFAULT_PAGE_SIZE;\n        status.pageSize = pageSize;\n        changed = true;\n      } else if (status.pageSize !== pageSize) {\n        status.pageSize = pageSize;\n        changed = true;\n      }\n\n      if (!pageNumber || pageNumber < 1) {\n        pageNumber = 1;\n        status.pageNumber = pageNumber;\n        changed = true;\n      } else if (status.pageNumber !== pageNumber) {\n        status.pageNumber = pageNumber;\n        changed = true;\n      }\n\n      status.state = status.state || {};\n      status.state.pagination = status.state.pagination || {};\n\n      if (status.state.pagination.paginationPageSize !== pageSize) {\n        status.state.pagination.paginationPageSize = pageSize;\n        changed = true;\n      }\n      if (status.state.pagination.paginationCurrentPage !== pageNumber) {\n        status.state.pagination.paginationCurrentPage = pageNumber;\n        changed = true;\n      }\n\n      return changed;\n    }\n\n    function getLockedStatusFilter() {\n      if (!shouldLockStatusFilter()) {\n        return undefined;\n      }\n\n      if (angular.isDefined(vm.fixedStatus) && vm.fixedStatus !== null) {\n        return angular.copy(vm.fixedStatus);\n      }\n\n      if (vm.status && vm.status.filters && angular.isDefined(vm.status.filters.status)) {\n        return angular.copy(vm.status.filters.status);\n      }\n\n      return undefined;\n    }\n\n    function reapplyLockedStatusFilter(lockedStatusFilter) {\n      if (!angular.isDefined(lockedStatusFilter)) {\n        return;\n      }\n\n      vm.status.filters = vm.status.filters || {};\n      vm.status.filters.status = angular.copy(lockedStatusFilter);\n    }\n\n    function shouldLockStatusFilter() {\n      return vm.lockStatusFilter || angular.isDefined(vm.fixedStatus);\n    }\n\n    function sanitizePersistedColumns(status) {\n      var persistedColumns;\n      var sanitizedColumns;\n\n      if (!shouldSanitizePersistedColumns()) {\n        return false;\n      }\n\n      if (!status || !status.state || !angular.isArray(status.state.columns)) {\n        return false;\n      }\n\n      if (!$scope.columns || !angular.isObject($scope.columns)) {\n        return false;\n      }\n\n      persistedColumns = status.state.columns;\n      sanitizedColumns = persistedColumns.filter(function(column) {\n        return column &&\n          column.name &&\n          $scope.columns[column.name] &&\n          $scope.columns[column.name].permission;\n      });\n\n      if (sanitizedColumns.length === persistedColumns.length) {\n        return false;\n      }\n\n      if (!sanitizedColumns.length) {\n        status.state.columns = null;\n        return true;\n      }\n\n      status.state.columns = sanitizedColumns;\n      return true;\n    }\n\n    function shouldSanitizePersistedColumns() {\n      return !!($scope.storageLabel && $scope.storageLabel.indexOf('PosOrders') !== -1);\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      if(vm.status.search){\n        d.search = vm.status.search;\n      }\n      if(vm.context){\n        d.context = vm.context;\n      }\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\n      if (vm.status.expand) {\n        d.expand = vm.status.expand;\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      if (vm.timeout) {\n        $timeout.cancel(vm.timeout);\n        vm.timeout = null;\n      }\n\n      if (vm.expandVisibleColumnsTimeout) {\n        $timeout.cancel(vm.expandVisibleColumnsTimeout);\n        vm.expandVisibleColumnsTimeout = null;\n      }\n    });\n\n    function getGridPage() {\n      if (vm.loading) {\n        try {\n          controller.abort();\n        } catch (e) {\n          // to avoid js error\n        }\n      }\n      controller = new AbortController();\n      var currentRequestController = controller;\n\n      setLoading(true);\n      vm.gridOptions.data = [];\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: currentRequestController.signal\n      })\n        .then(function(response) {\n          return response.json();\n        })\n        .then(function(data) {\n          if (currentRequestController !== controller) {\n            return;\n          }\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            scheduleExpandVisibleColumns();\n          });\n        })\n        .catch(function(error) {\n          if (error && error.name === 'AbortError') {\n            return;\n          }\n          if (currentRequestController === controller) {\n            setLoading(false);\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.paymentStatuses && filter.paymentStatuses.length) {\n          params.payment_statuses = filter.paymentStatuses.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        if (filter.warning) {\n          params.warning = filter.warning;\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        // Support for dateRange object\n        var dateStart = filter.dateStart || (filter.dateRange && filter.dateRange.dateStart);\n        var dateEnd = filter.dateEnd || (filter.dateRange && filter.dateRange.dateEnd);\n\n        if (dateStart) {\n          if (!(dateStart instanceof Date)) {\n            dateStart = new Date(dateStart);\n          }\n          params.dateStart = angular.copy(dateStart);\n          params.dateStart.setHours(0);\n          params.dateStart = params.dateStart.toISOString();\n        }\n        if (dateEnd) {\n          if (!(dateEnd instanceof Date)) {\n            dateEnd = new Date(dateEnd);\n          }\n          params.dateEnd = angular.copy(dateEnd);\n          params.dateEnd.setHours(0);\n          params.dateEnd.setHours(params.dateEnd.getHours() + 24);\n          params.dateEnd = params.dateEnd.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        if (filter.operation_type && filter.operation_type.length) {\n          params.operation_type = filter.operation_type.join(',');\n        }\n        if (filter.verifactu_document_type && filter.verifactu_document_type.length) {\n          params.verifactu_document_type = filter.verifactu_document_type.join(',');\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    .directive('ndEventDetail', ndEventDetail);\n\n  function ndEventDetail() {\n    return {\n      restrict: 'E',\n      transclude: {\n        'fields': 'ndEventDetailFields',\n        'extra': '?ndEventDetailExtra'\n      },\n      scope: {\n        loading: '=',\n        error: '=',\n        event: '=',\n        goBack: '&',\n        formattedStatus: '=',\n        hasError: '=',\n        translations: '='\n      },\n      templateUrl: 'app/directives/nd-event-detail/nd-event-detail.html'\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            parameters: {\n              forceCustomer: true,\n              forceNaturalPersonType: true,\n            }\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('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    .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    .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        '<div layout=\"row\" layout-align=\"center center\"><img class=\"{{getIconSizeClass()}}\" style=\"vertical-align: inherit !important;\" ng-src=\"{{::getSiteIcon()}}\"></div> ',\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  /* global angular */\n  angular\n    .module('app.core')\n    .controller('DialogWithConfirmationController', DialogWithConfirmationController);\n\n  /** @ngInject */\n  function DialogWithConfirmationController($mdDialog, params) {\n    var vm = this;\n\n    vm.title = params.title;\n    vm.body = params.body;\n\n    vm.primaryOptionText = params.primaryOptionText;\n    vm.primaryOptionCallback = params.primaryOptionCallback;\n    vm.primaryOptionClasses = params.primaryOptionClasses;\n\n    vm.secondOptionText = params.secondOptionText;\n    vm.secondOptionCallback = params.secondOptionCallback;\n    vm.secondOptionClasses = params.secondOptionClasses;\n\n    vm.cancelClasses = params.cancelClasses;\n    vm.cancelCallback = params.cancelCallback;\n\n    vm.bodyParams = params.bodyParams;\n\n    vm.cancel = cancel;\n\n    function cancel() {\n      $mdDialog.cancel();\n      if (angular.isFunction(vm.cancelCallback)) {\n        vm.cancelCallback();\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      require: '?ngModel',\n      link: function ($scope, element, attrs, ngModelCtrl) {\n        $scope.INPUT_DELAY = 25;\n        $scope.hasSelection = false;\n\n        function isNumberInputWithoutSelectionSupport(selectionStart, selectionEnd) {\n          return element[0].type === 'number' &&\n            (!angular.isNumber(selectionStart) || !angular.isNumber(selectionEnd));\n        }\n\n        function getUpdatedValue(newCharacter) {\n          var currentValue = element[0].value || '';\n          var selectionStart = element[0].selectionStart;\n          var selectionEnd = element[0].selectionEnd;\n\n          if (angular.isNumber(selectionStart) && angular.isNumber(selectionEnd) && selectionStart !== selectionEnd) {\n            return currentValue.substring(0, selectionStart) + newCharacter + currentValue.substring(selectionEnd);\n          }\n\n          if (isNumberInputWithoutSelectionSupport(selectionStart, selectionEnd) && $scope.hasSelection) {\n            return newCharacter;\n          }\n\n          return $scope.value ? $scope.value + newCharacter : newCharacter;\n        }\n\n        element.bind('select', function () {\n          $scope.hasSelection = true;\n        });\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            $scope.hasSelection = false;\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 = getUpdatedValue(String.fromCharCode(e.which));\n            $scope.hasSelection = false;\n          }\n\n          $scope.timeout = $timeout(function () {\n            if($scope.value !== null && $scope.value !== undefined) {\n              element[0].value = angular.copy($scope.value);\n              if (ngModelCtrl) {\n                ngModelCtrl.$setViewValue(angular.copy($scope.value));\n                ngModelCtrl.$render();\n              }\n            }\n            $scope.value = null;\n            $scope.timeout = null;\n            $scope.hasSelection = false;\n          }, $scope.INPUT_DELAY);\n\n        });\n\n\n        $scope.$on('$destroy', function () {\n          element.unbind('keypress');\n          element.unbind('select');\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  'use strict';\n\n  angular\n    .module('app.core')\n    .factory('PollingService', PollingService);\n\n  /** @ngInject */\n  function PollingService($interval, $q) {\n\n    var DEFAULT_INTERVAL = 3000;\n\n    var service = {\n      create: create\n    };\n\n    return service;\n\n    function create(config) {\n      var intervalPromise = null;\n      var attempts = 0;\n      var deferred = null;\n\n      var instance = {\n        start: start,\n        stop: stop,\n        isPolling: isPolling,\n        getAttempts: getAttempts\n      };\n\n      return instance;\n\n      function start() {\n        if (intervalPromise) {\n          return deferred.promise;\n        }\n\n        deferred = $q.defer();\n        attempts = 0;\n\n        executePoll();\n\n        intervalPromise = $interval(executePoll, config.interval || DEFAULT_INTERVAL);\n\n        return deferred.promise;\n      }\n\n      function executePoll() {\n        attempts++;\n\n        if (config.maxAttempts && attempts > config.maxAttempts) {\n          stop();\n          var error = new Error('Max polling attempts reached');\n          if (angular.isFunction(config.onError)) {\n            config.onError(error);\n          }\n          deferred.reject(error);\n          return;\n        }\n\n        var pollPromise = config.pollFn();\n\n        if (pollPromise && pollPromise.$promise) {\n          pollPromise = pollPromise.$promise;\n        }\n\n        $q.when(pollPromise).then(function(response) {\n          if (angular.isFunction(config.onPoll)) {\n            config.onPoll(response, attempts);\n          }\n\n          if (config.checkCondition(response)) {\n            stop();\n\n            if (angular.isFunction(config.onComplete)) {\n              config.onComplete(response);\n            }\n\n            deferred.resolve(response);\n          }\n        }).catch(function(error) {\n          stop();\n          if (angular.isFunction(config.onError)) {\n            config.onError(error);\n          }\n          if (deferred) {\n            deferred.reject(error);\n          }\n        });\n      }\n\n      function stop() {\n        if (intervalPromise) {\n          $interval.cancel(intervalPromise);\n          intervalPromise = null;\n        }\n      }\n\n      function isPolling() {\n        return intervalPromise !== null;\n      }\n\n      function getAttempts() {\n        return attempts;\n      }\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, $filter,\n                             msNavigationService, Session, PERMISSIONS, Version, AuthService, tmhDynamicLocale, hotkeys, SEARCH_MAX_LENGTH, WORKDAY_STATUSES,\n                             Support, $mdDialog, $document, BarcodeService, HTTP_STATUS) {\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    if (Session.hasPermission('app.support.api_access')) {\n      vm.menuItems.push({\n        title: 'API access',\n        translation: 'TOOLBAR.API_ACCESS',\n        icon: 'icon-key-variant',\n        state: 'app.support.api_access',\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(company) {\n      api.account.company.save({\n        id: company.id,\n        option: 'set-user-company'\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $window.location.reload();\n        } else {\n          vm.companyInstance = null;\n          company = null;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ACCESS_NOT_GRANTED')).position('top right'));\n        }\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      Session.setLanguage(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  '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{\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('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        var currentPath = $location.path();\n        var params = $location.search();\n        var isShopifyOAuth = (params.shop && params.shop.indexOf('myshopify.com') !== -1) || !!params.code;\n\n        if (currentPath.indexOf('/shopify/success') === 0 ||\n            currentPath.indexOf('/shopify/new-site') === 0 ||\n            currentPath === '/sign-up' ||\n            currentPath === '/sign-up-two' ||\n            currentPath.indexOf('/validate-sign-up') === 0 ||\n            currentPath.indexOf('/validate-sign-up-two') === 0 ||\n            currentPath.indexOf('/reset-password') === 0 ||\n            currentPath.indexOf('/public-registration/') === 0 ||\n            currentPath.indexOf('/hub') === 0) {\n          return;\n        }\n\n        if (currentPath.indexOf('/ecommerce/sites/') === 0 && isShopifyOAuth) {\n          $location.path('/shopify/success');\n          return;\n        }\n\n        // Por defecto: Redirigir a login\n        if (currentPath !== '/' && currentPath !== '/login') {\n          sessionStorage.setItem('afterLoginUrl', currentPath);\n        } else {\n          sessionStorage.removeItem('afterLoginUrl');\n        }\n        $location.path('/login');\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        if(result === ''){\n          result += '---';\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\n        if (!filterType) {\n          return items;\n        }\n\n        var isArray = Array.isArray(filterType);\n\n        var filtered = items.filter(function(item) {\n          if (item.type === null) {\n            return true;\n          }\n\n          if (isArray) {\n            return filterType.indexOf(item.type) !== -1;\n          } else {\n            return item.type === filterType;\n          }\n        });\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      ERROR_01028_INVOICE_INVALID_CHAIN_TYPE_EXCEPTION: 'ERROR_01028_INVOICE_INVALID_CHAIN_TYPE_EXCEPTION',\n      ERROR_01034_MISSING_TICKET_CONFIGURATION_FOR_WAREHOUSE_OR_SITE: 'ERROR_01034_MISSING_TICKET_CONFIGURATION_FOR_WAREHOUSE_OR_SITE',\n\n\n      // 02 AUTHENTICATION ERRORS\n      ERROR_02001_COMPANY_SESSION_OUT_OF_SYNC: 'ERROR_02001_COMPANY_SESSION_OUT_OF_SYNC',\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_04067_CREATING_STOCKTAKING_ORDER_PRODUCT_VARIANT_ERROR_DUE_TO_PRODUCT_VARIANT_DELETED: 'ERROR_04067_CREATING_STOCKTAKING_ORDER_PRODUCT_VARIANT_ERROR_DUE_TO_PRODUCT_VARIANT_DELETED',\n\n      // ORDER TYPE ERRORS\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      ERROR_08006_REFRESH_TOKEN_EXPIRED_EXCEPTION: 'ERROR_08006_REFRESH_TOKEN_EXPIRED_EXCEPTION',\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      ERROR_10012_SENDCLOUD_ADDRESS_TOO_LONG_EXCEPTION: 'ERROR_10012_SENDCLOUD_ADDRESS_TOO_LONG_EXCEPTION',\n      ERROR_10014_SENDCLOUD_MISSING_COUNTRY_EXCEPTION: 'ERROR_10014_SENDCLOUD_MISSING_COUNTRY_EXCEPTION',\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('DOJO_PAYMENT_STATUS', {\n      INITIATING: 10,\n      INITIATED: 20,\n      AUTHORIZED: 30,\n      CAPTURED: 40,\n      CANCEL_REQUESTED: 50,\n      CANCELLED: 60,\n      SIGNATURE_VERIFICATION_ACCEPTED: 70,\n      SIGNATURE_VERIFICATION_REJECTED: 80,\n      SIGNATURE_VERIFICATION_REQUIRED: 90,\n      EXPIRED: 100,\n      DECLINED: 110,\n      TIMEOUT: 120\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     1: 'FREEMIUM',\n     2: 'BUSINESS',\n     10: 'DEMO',\n     11: 'PARTNER'\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('PRODUCT_SHIPPING_BOX_ID', -1)\n\n    .constant('LABEL_PRINT_ORDER', {\n      PICKING: 'picking_order',\n      PICKING_REVERSE: 'picking_order_reverse',\n      SKU: 'sku',\n      SKU_REVERSE: 'sku_reverse',\n      STOCK_LOCATION: 'stock_location',\n      STOCK_LOCATION_REVERSE: 'stock_location_reverse',\n      DEFAULT: 'picking_order'\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  function resolveLanguage($injector) {\n    var fallback = 'es';\n\n    try {\n      var $translate = $injector.get('$translate');\n      if ($translate && typeof $translate.use === 'function') {\n        var langUse = $translate.use();\n        if (langUse) {\n          return langUse;\n        }\n      }\n      if ($translate && typeof $translate.preferredLanguage === 'function') {\n        var langPref = $translate.preferredLanguage();\n        if (langPref) {\n          return langPref;\n        }\n      }\n    } catch (e) {\n    }\n\n    try {\n      var Session = $injector.get('Session');\n      if (Session && Session.user && Session.user.lang) {\n        return Session.user.lang;\n      }\n    } catch (e2) {\n    }\n\n    return fallback;\n  }\n\n  function isAuthRequest(config) {\n    var url = (config && config.url) || '';\n    return url.indexOf('api-token-auth') !== -1;\n  }\n\n  /** @ngInject */\n  function ApiInjector(Session, $injector, $q, $filter, ERROR_CODES, HTTP_STATUS) {\n    return {\n      request: function(config) {\n        if (Session.isAuthenticated()) {\n          config.headers['Authorization'] = 'Token ' + Session.token;\n          if (Session.company && Session.company.id) {\n            config.headers['X-Company-Id'] = Session.company.id;\n          }\n        }\n\n        var lang = resolveLanguage($injector);\n        if (lang) {\n          config.headers = config.headers || {};\n          config.headers['Accept-Language'] = lang;\n        }\n\n        config.timeout = 2 * 60 * 1000;\n        return config;\n      },\n      responseError: function(response) {\n        if (response.status === HTTP_STATUS.HTTP_403_FORBIDDEN &&\n            response.data &&\n            response.data.error === ERROR_CODES.ERROR_02001_COMPANY_SESSION_OUT_OF_SYNC) {\n          var $mdToast = $injector.get('$mdToast');\n          var $window = $injector.get('$window');\n\n          var toast = $mdToast.simple()\n            .textContent($filter('translate')('ERRORS.' + response.data.error))\n            .action($filter('translate')('TOOLBAR.REFRESH'))\n            .highlightAction(true)\n            .position('top right')\n            .hideDelay(10000);\n\n          $mdToast.show(toast).then(function(action) {\n            if (action === 'ok') {\n              $window.location.reload();\n            }\n          });\n\n          return $q.reject(response);\n        }\n        if (response.status === HTTP_STATUS.HTTP_401_UNAUTHORIZED) {\n          Session.removeUser(Session.user.username);\n          Session.destroy();\n          var $state = $injector.get('$state');\n          $state.go('app.pages_auth_login-v3');\n          return $q.reject(response);\n\n        }\n        return response;\n      }\n    };\n  }\n\n  ///** @ngInject */\n  function NotificationsInjector($rootScope) {\n    var timeout = 1000; // 1 sec\n    var lastUpdate = null;\n\n    return {\n      response: function(config) {\n        var 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       * MONETARY API\n       */\n      api.monetary = {\n        monetaryCalculation: $resource(api.baseUrl + 'monetary/monetary-calculation/')\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        temporaryAccountAccess: $resource(api.baseUrl + 'companies/temporary-account-accesses/:id/:option', {\n          id: '@id'\n        }, {\n          'list': { method: 'GET', isArray: true },\n          'save': { method: 'POST' },\n          'revoke': {\n            method: 'PUT',\n            params: { option: 'revoke' },\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        pickingAndPackingConfiguration: $resource(api.baseUrl + 'inventories/picking-and-packing-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          'bulk': { method: 'POST', url: api.baseUrl + 'inventories/product-prices/bulk', isArray: true },\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          'patch': { method: 'PATCH' },\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' },\n          'get': { method: 'GET' },\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' },\n          'update': { method: 'PUT' },\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' },\n          'update': { method: 'PUT' },\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' },\n          'update': { method: 'PUT' },\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' },\n          'update': { method: 'PUT' },\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' },\n          'update': { method: 'PUT' },\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/: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        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        siteGiftCards: $resource(api.baseUrl + 'ecommerce/site-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        prestashopSiteGiftCards: $resource(api.baseUrl + 'ecommerce/prestashop-site-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        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        verifactuHandlerEvents: $resource(api.baseUrlV2 + 'integration-apps/verifactu-handler-events/:id', {\n          id: '@id'\n        }, {\n          'get': { method: 'GET', isArray: false },\n          'list': {\n            method: 'GET',\n            isArray: false\n          }\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/generate-zip',\n          invoicesZipStatus: api.baseUrl + 'accounting/invoices/zip-status',\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          saleOrdersCheckCatalogStatus: api.baseUrl + 'inventories/sale-orders/:id/check-catalog-status',\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          siteGiftCards: api.baseUrl + 'ecommerce/site-gift-cards/:id',\n          prestashopSiteGiftCards: api.baseUrl + 'ecommerce/prestashop-site-gift-cards/:id',\n          orders: api.baseUrl + 'ecommerce/orders/:id/:option',\n          fulfillments: api.baseUrl + 'ecommerce/fulfillments',\n          shopifyAuth: api.url + 'shopify/authenticate/',\n          siteHandlerEvents: api.baseUrlV2 + 'integration-apps/site-handler-events'\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          verifactuOperations: api.baseUrlV2 + 'integration-apps/verifactu-handler-events',\n          handlerEvents: api.baseUrlV2 + 'integration-apps/handler-events'\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        publicRegistration: {\n          register: api.url + 'open/api/register/:uid/',\n          contracts: api.baseUrl + 'contacts/privacy-contracts/:id/:option',\n          locationSettings: api.baseUrl + 'contacts/location-registration-settings/:warehouse_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\n(function () {\n  'use strict';\n\n  angular\n    .module('app.shared-kernel', [\n      'app.shared-kernel.monetary'\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/dialog-with-confirmation/dialog-with-confirmation.html\",\"<md-dialog id=\\\"dialog-with-confirmation\\\"><md-dialog-content class=\\\"p-24\\\" layout=\\\"column\\\"><h2 class=\\\"md-title\\\" \\ntranslate=\\\"{{vm.title}}\\\"></h2><div class=\\\"md-dialog-content-body\\\"><p ng-if=\\\"!vm.bodyParams\\\" translate=\\\"{{vm.body}}\\\" \\nclass=\\\"m-0\\\"></p><p ng-if=\\\"vm.bodyParams\\\" translate=\\\"{{vm.body}}\\\" translate-values=\\\"vm.bodyParams\\\" class=\\\"m-0\\\"></p>\\n</div></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.secondOptionText\\\" \\nclass=\\\"md-primary\\\" ng-class=\\\"vm.secondOptionClasses\\\" ng-click=\\\"vm.secondOptionCallback($event)\\\" \\ntranslate=\\\"{{vm.secondOptionText}}\\\"></md-button><md-button class=\\\"md-primary\\\" ng-class=\\\"vm.primaryOptionClasses\\\" \\nng-click=\\\"vm.primaryOptionCallback($event)\\\" translate=\\\"{{vm.primaryOptionText}}\\\"></md-button></md-dialog-actions>\\n</md-dialog>\");\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-event-detail/nd-event-detail.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\" flex><div class=\\\"center\\\" layout=\\\"column\\\" flex><div \\nng-if=\\\"loading\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" flex class=\\\"p-24\\\"><md-progress-circular \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular></div><div ng-if=\\\"error && !loading\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" flex class=\\\"p-24\\\"><div layout=\\\"column\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-alert-circle\\\" class=\\\"s64 md-warn-fg\\\"></md-icon><h2 class=\\\"mt-16\\\">\\n{{translations.errorLoading | translate}}</h2><md-button class=\\\"md-raised md-accent mt-16\\\" ng-click=\\\"goBack()\\\">\\n{{translations.goBack | translate}}</md-button></div></div><div ng-if=\\\"!loading && !error\\\" class=\\\"content-card\\\" \\nlayout=\\\"column\\\" flex><div class=\\\"toolbar nd-event-detail-toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"goBack()\\\" aria-label=\\\"Back\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon>\\n</md-button><h2 class=\\\"ml-16 nd-event-detail-id\\\">{{event.id}}</h2><span flex></span></div><md-content \\nclass=\\\"content p-24\\\" flex layout=\\\"column\\\"><div class=\\\"mb-32\\\"><div class=\\\"widget-group layout-wrap\\\" layout=\\\"row\\\" \\nflex=\\\"100\\\" layout-wrap=\\\"\\\"><ms-widget class=\\\"nd-widget\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\">\\n<ms-widget-front layout=\\\"column\\\"><span class=\\\"title\\\">{{translations.status | translate}}</span><div class=\\\"value\\\" \\nflex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span>{{formattedStatus}}</span></div></ms-widget-front>\\n</ms-widget></div></div><div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mb-16\\\"><h3 class=\\\"m-0\\\">\\n{{translations.details | translate}}</h3></div><form><div ng-transclude=\\\"fields\\\"></div><div \\nng-if=\\\"event.processed_result\\\" class=\\\"mb-32\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mb-16\\\"><h3 \\nclass=\\\"m-0\\\">{{translations.processedResult | translate}}</h3></div><pre class=\\\"md-grey-200-bg nd-event-detail-pre\\\">\\n{{event.processed_result | json}}</pre></div><div ng-if=\\\"hasError && event.error_result\\\" class=\\\"mb-32\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mb-16\\\"><h3 class=\\\"m-0\\\">{{translations.eventError | translate}}</h3>\\n</div><pre class=\\\"md-grey-200-bg nd-event-detail-pre\\\">{{event.error_result | json}}</pre></div><div \\nng-transclude=\\\"extra\\\"></div></form></div></md-content></div></div></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-handler-event-badge/nd-handler-event-badge.html\",\"<span class=\\\"{{vm.className}}\\\">{{vm.label}}</span>\");\n$templateCache.put(\"app/directives/nd-handler-events-list/nd-handler-events-list.html\",\"<nd-grid columns=\\\"vm.columns\\\" layout-fill flex=\\\"100\\\" url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\" \\nenable-grouping=\\\"true\\\"></nd-grid>\");\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 \\nng-if=\\\"vm.columnsReady\\\" columns=\\\"vm.columns\\\" layout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" \\ncontext=\\\"vm.context\\\" selected=\\\"selected\\\" storage-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-site-operation-badge/nd-site-operation-badge.html\",\"<span class=\\\"{{vm.className}}\\\">{{vm.label}}</span>\");\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-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-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-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-badge/nd-verifactu-badge.html\",\"<span class=\\\"{{vm.className}}\\\">{{vm.label}}</span>\");\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-vouchers-list/nd-vouchers-list.html\",\"<div id=\\\"nd-vouchers-list\\\" class=\\\"content no-padding\\\" flex layout=\\\"column\\\" layout-fill><div class=\\\"toolbar p-8\\\" \\nlayout=\\\"row\\\"><div class=\\\"mr-8\\\"><md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon \\nmd-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"site-vouchers-search\\\" nd-mute-barcode-callbacks \\nng-model=\\\"vm.status.search\\\" ng-change=\\\"vm.filterChanged()\\\" ng-model-options=\\\"{debounce:500}\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" class=\\\"secondary-text\\\" 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.filters.types\\\" md-font-icon=\\\"icon-credit-card\\\">\\n</md-icon><md-select ng-model=\\\"vm.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=\\\"GIFT_CARDS.GIFT_CARD\\\"></span>\\n <span ng-if=\\\"type == \\'voucher\\'\\\" translate=\\\"GIFT_CARDS.VOUCHER\\\"></span></md-option></md-select></md-input-container>\\n</div><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.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><nd-grid columns=\\\"vm.columns\\\" layout=\\\"column\\\" layout-fill \\nflex url=\\\"vm.url\\\" status=\\\"vm.status\\\" context=\\\"vm.context\\\" storage-label=\\\"vm.storageLabel\\\"></nd-grid></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()\\\" ng-click=\\\"$event.stopPropagation()\\\"><md-menu \\nmd-position-mode=\\\"target-left bottom\\\" md-offset=\\\"0 12\\\"><md-button class=\\\"open-menu-button\\\" \\nng-class=\\\"{\\'no-margin\\': removeMargin, \\'open-menu-button-icon\\': showIcon}\\\" ng-click=\\\"$mdMenu.open($event)\\\"><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-additional-information-card/nd-pos-order-additional-information-card.html\",\"<md-card ng-class=\\\"{\\'m-0\\': vm.noMargin}\\\"><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 ng-if=\\\"!vm.readonly && vm.order.site\\\"><label \\ntranslate=\\\"ORDER.STOCK_WAREHOUSE\\\">Stock warehouse</label><md-select flex ng-change=\\\"vm.onUpdate()\\\" \\nng-disabled=\\\"!vm.order.site || !vm.order.autocode\\\" ng-model=\\\"vm.order.source_warehouse\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy:\\'name\\'\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option>\\n</md-select></md-input-container><md-input-container class=\\\"no-md-errors-spacer\\\" flex \\nng-if=\\\"vm.readonly && vm.order.site\\\"><label translate=\\\"ORDER.STOCK_WAREHOUSE\\\">Stock warehouse</label><input \\nng-disabled=\\\"true\\\" \\nng-value=\\\"(vm.order.source_warehouse_instance && vm.order.source_warehouse_instance.name) || vm.order.source_warehouse\\\">\\n</md-input-container><md-input-container class=\\\"no-md-errors-spacer\\\" flex=\\\"50\\\" ng-if=\\\"!vm.order.site\\\"><label \\ntranslate=\\\"ORDER.REGISTER\\\">Register</label><input ng-disabled=\\\"true\\\" ng-value=\\\"vm.order.register_instance.code\\\">\\n</md-input-container></div><div flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-input-container \\nclass=\\\"no-md-errors-spacer pr-10\\\" flex=\\\"50\\\" ng-if=\\\"vm.order.site\\\"><label translate=\\\"ORDER.SITE\\\">Site</label><input \\nng-disabled=\\\"true\\\" ng-model=\\\"vm.order.site.name\\\"></md-input-container><md-input-container class=\\\"no-md-errors-spacer\\\" \\nflex=\\\"50\\\" ng-if=\\\"vm.order.site\\\"><label translate=\\\"ORDER.ORIGIN_CODE\\\">Origin Code</label><input ng-disabled=\\\"true\\\" \\nng-model=\\\"vm.order.origin_code\\\"></md-input-container></div><div flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"left center\\\">\\n<md-input-container class=\\\"fullwidth mb-0\\\" flex=\\\"100\\\"><label translate=\\\"SALES.NOTES_OR_COMMENTS\\\">Notes or comments\\n</label><textarea flex ng-change=\\\"vm.onUpdate()\\\" ng-disabled=\\\"vm.readonly || !vm.order.autocode\\\" \\nng-model=\\\"vm.order.notes\\\" ng-model-options=\\\"{ updateOn: \\'blur\\'}\\\" rows=\\\"1\\\"></textarea></md-input-container></div><div \\nflex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"left center\\\"><md-input-container class=\\\"fullwidth mb-0\\\" flex=\\\"100\\\"><label \\ntranslate=\\\"INVOICE.PRIVATE_NOTES\\\"></label><textarea flex ng-change=\\\"vm.onUpdate()\\\" ng-disabled=\\\"vm.readonly\\\" \\nng-model=\\\"vm.order.private_notes\\\" ng-model-options=\\\"{ updateOn: \\'blur\\'}\\\" rows=\\\"1\\\"></textarea></md-input-container>\\n</div></md-card-content></md-card>\");\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><md-button class=\\\"md-primary stroked\\\" ng-if=\\\"fulfillment.isInPickingPackingProcess()\\\" \\nng-click=\\\"vm.goPickingAndPackingView(fulfillment)\\\">{{\\\"ORDER.WARNING_PICKING_AND_PACKING_BUTTON\\\" | translate}}\\n</md-button><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\\\" ng-if=\\\"!vm.scanAndGo\\\" \\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.packWithSendcloudButtonEnabled()\\\" \\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<table class=\\\"simple compact\\\"><tbody><tbody \\nng-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\\\" \\nng-disabled=\\\"vm.fulfillment.lockRefundPaymentMethod\\\" name=\\\"refund-payment-method\\\" required><md-option \\nng-repeat=\\\"paymentMethod in vm.paymentMethods | orderBy: \\'position\\'\\\" ng-value=\\\"paymentMethod.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"{{paymentMethod.icon}}\\\" \\nstyle=\\\"color:#{{paymentMethod.foreground_color}}\\\"></md-icon><span class=\\\"ml-8\\\" flex>{{paymentMethod.name}}</span></div>\\n</md-option></md-select><div ng-if=\\\"vm.fulfillment.refundPaymentMethodError\\\" class=\\\"md-warn-fg\\\">\\n{{\\'ORDER.THIS_FIELD_IS_REQUIRED\\' | translate}}</div></md-input-container></div><div class=\\\"extra-data-div\\\"><div \\nclass=\\\"extra-data-row\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"!vm.scanAndGo\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/store-outline.583690c9.svg\\\" class=\\\"mr-8\\\"></md-icon><span \\nclass=\\\"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 layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"50\\\"><md-switch \\nng-model=\\\"vm.useProductPackage\\\" ng-change=\\\"vm.useProductPackageChanged()\\\" class=\\\"mr-0\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span class=\\\"mr-5\\\" translate=\\\"SCAN_AND_GO.USE_PRODUCT_PACKAGE\\\"></span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\"><md-tooltip>{{ \\'SCAN_AND_GO.USE_PRODUCT_PACKAGE_INFO\\' | translate}}\\n</md-tooltip></md-icon></div></md-switch></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"50\\\" \\nng-if=\\\"vm.isScanAndGoScreen\\\"><md-switch ng-model=\\\"vm.goToNextOrderAfterPacking\\\" \\nng-change=\\\"vm.storeGoToNextOrderAfterPacking()\\\" class=\\\"mr-0\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><span \\nclass=\\\"mr-5\\\" translate=\\\"SCAN_AND_GO.GO_TO_NEXT_ORDER_AFTER_LABELING\\\"></span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\"><md-tooltip>{{ \\'SCAN_AND_GO.GO_TO_NEXT_ORDER_AFTER_LABELING_INFO\\' | translate}}\\n</md-tooltip></md-icon></div></md-switch></div></div></div></div></md-card-content></md-card><div \\nstyle=\\\"visibility: hidden\\\"><div class=\\\"md-dialog-container\\\" id=\\\"sendcloud-error-dialog\\\"><md-dialog><md-dialog-content \\nclass=\\\"pb-0 w-500\\\"><h2 class=\\\"md-title\\\">{{ \\'SCAN_AND_GO.SENDCLOUD_LABEL_GENERATION_ERROR_TITLE\\' | translate}}</h2>\\n<span>{{ \\'SCAN_AND_GO.SENDCLOUD_LABEL_GENERATION_ERROR_MESSAGE\\' | translate}}</span><ul><li \\nng-repeat=\\\"error in vm.dialogErrors\\\" class=\\\"sendcloud-error-li\\\">{{error}}</li></ul></md-dialog-content>\\n<md-dialog-actions><div layoit=\\\"row\\\" layout=\\\"end center\\\"><md-button ng-click=\\\"vm.hideSendcloudErrorsDialog()\\\">\\n{{\\'GENERAL.CLOSE\\' | translate}}</md-button></div></md-dialog-actions></md-dialog></div></div><div \\nstyle=\\\"visibility: hidden\\\"><div class=\\\"md-dialog-container\\\" id=\\\"sendcloud-error-dialog-too-long-address\\\"><md-dialog>\\n<md-dialog-content class=\\\"pb-0 w-500\\\"><h2 class=\\\"md-title\\\">\\n{{ \\'SCAN_AND_GO.SENDCLOUD_LABEL_GENERATION_ERROR_TITLE\\' | translate}}</h2><span \\ntranslate=\\\"SCAN_AND_GO.SENDCLOUD_TOO_LONG_ADDRESS_ERROR_MESSAGE\\\"></span><ul><li ng-repeat=\\\"error in vm.dialogErrors\\\" \\nclass=\\\"sendcloud-error-li\\\">{{error}}</li></ul></md-dialog-content><md-dialog-actions><div layoit=\\\"row\\\" \\nlayout=\\\"end center\\\"><md-button ng-click=\\\"vm.hideSendcloudErrorsDialog()\\\">{{\\'GENERAL.CLOSE\\' | translate}}</md-button>\\n<md-button class=\\\"md-primary md-raised\\\" \\nhas-permission=\\\"contacts.contact.addresses.create,contacts.contact.addresses.update\\\" \\nng-click=\\\"vm.showCustomerPopup($event)\\\">{{\\'CONTACTS.EDIT_SHIPPING_ADDRESS\\' | translate}}</md-button></div>\\n</md-dialog-actions></md-dialog></div></div>\");\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-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/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/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/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/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-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/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/core/directives/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{{vm.config.title | translate}}</h2><p>{{vm.config.message | translate}}</p><md-input-container class=\\\"mb-0\\\" \\nstyle=\\\"display: inherit !important\\\"><label translate=\\\"CONFIGURATION.SERIAL_NUMBER_TYPE\\\">Serial Number Type</label>\\n<md-select ng-model=\\\"vm.serialNumberType\\\" required><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: vm.config.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\\\"><span \\ntranslate=\\\"{{vm.config.buttonText}}\\\"></span></md-button></md-dialog-actions></md-dialog>\");\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/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/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/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/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/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/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 \\nng-if=\\\"vm.htmlTicket.show_customer_accumulated_balance !== false && vm.htmlTicket.customer_accumulated_balance !== null\\\">\\n<br><div style=\\\"float: left\\\" translate=\\\"SALES.TOTAL_ACCUMULATED_BALANCE\\\" \\ntranslate-values=\\\"{printDate: vm.htmlTicket.customer_accumulated_balance_print_date}\\\"></div><div style=\\\"float: right\\\">\\n{{vm.htmlTicket.customer_accumulated_balance | price}} {{::vm.htmlTicket.currencyCharacter}}</div><br></div></div><div \\nstyle=\\\"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/main/components/button/button.html\",\"<md-button ng-class=\\\"vm.getButtonClasses()\\\" ng-disabled=\\\"vm.isDisabled()\\\" has-permission=\\\"{{vm.permission}}\\\" \\nng-click=\\\"vm.handleClick($event)\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nng-if=\\\"vm.loading\\\" md-diameter=\\\"{{vm.loaderSize}}\\\" class=\\\"mr-5\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular><md-icon\\n ng-if=\\\"vm.icon && vm.iconPosition === \\'left\\' && !vm.loading\\\" md-font-icon=\\\"{{vm.icon}}\\\" class=\\\"mr-5\\\"></md-icon><span>\\n{{ vm.label | translate }}</span><md-icon ng-if=\\\"vm.icon && vm.iconPosition === \\'right\\' && !vm.loading\\\" \\nmd-font-icon=\\\"{{vm.icon}}\\\" class=\\\"ml-5\\\"></md-icon></div></md-button>\");\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/date-range-filter/date-range-filter.html\",\"<div flex class=\\\"nd-input-custom\\\" 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><md-date-range ng-if=\\\"vm.showDatePicker\\\" flex class=\\\"date-range-filter\\\" \\nng-model=\\\"vm.model\\\" placeholder=\\\"{{vm.getPlaceholder() | translate}}\\\" show-template=\\\"vm.showTemplate\\\" \\nauto-confirm=\\\"vm.autoConfirm\\\" md-on-select=\\\"vm.onDateRangeChange()\\\"></md-date-range><md-button class=\\\"md-icon-button\\\" \\nng-if=\\\"vm.clearable && (vm.model.dateStart || vm.model.dateEnd)\\\" ng-click=\\\"vm.clear()\\\" aria-label=\\\"Clear\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div></div>\");\n$templateCache.put(\"app/main/components/filter-selector/filter-selector.html\",\"<div layout=\\\"{{vm.filterFieldsLayout}}\\\" layout-wrap layout-align=\\\"start center\\\"><div class=\\\"filter-fields\\\" \\nlayout=\\\"{{vm.filterFieldsLayout}}\\\" ng-transclude flex></div><md-menu layout=\\\"start center\\\" flex=\\\"nogrow\\\"><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=\\\"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/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=\\\"did-you-know-message\\\" layout=\\\"row\\\" flex><div layout=\\\"column\\\" flex><span ng-transclude=\\\"title\\\"></span> <span \\nclass=\\\"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/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\\\" layout-align=\\\"start center\\\" flex><div ng-transclude=\\\"leadingSlot\\\"></div><div \\nclass=\\\"h2\\\" ng-transclude=\\\"barTitleSlot\\\"></div><span flex></span><div ng-transclude=\\\"actionsSlot\\\" class=\\\"actions\\\"></div>\\n</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/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/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/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/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/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/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)\\\" aria-label=\\\"{{company.name}}\\\" ng-disabled=\\\"company.id == session.user.company\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span flex>{{company.name}}</span></div></md-button></md-menu-item>\\n</md-menu-content></md-menu></md-menu-item><md-menu-item class=\\\"md-indent\\\" ng-if=\\\"vm.autocompleteCompanies\\\"><md-icon \\nmd-font-icon=\\\"icon-bank\\\" class=\\\"top-10\\\"></md-icon><md-menu><md-button class=\\\"language-button\\\" ng-click=\\\"$mdOpenMenu()\\\" \\nng-init=\\\"vm.companiesMdOpenMenu = $mdOpenMenu\\\" aria-label=\\\"Companies\\\"><span class=\\\"iso\\\">\\n{{\\\"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)\\\" 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<div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"company-autocomplete-item\\\"><md-icon md-font-icon=\\\"icon-eye-off\\\" \\nclass=\\\"mr-8\\\" ng-if=\\\"!item.access_granted\\\"></md-icon><md-icon md-font-icon=\\\"icon-eye\\\" class=\\\"mr-8 green-A700-fg\\\" \\nng-if=\\\"item.access_granted\\\"></md-icon><div layout=\\\"column\\\" flex><span class=\\\"company-name\\\">{{item.name}} - {{item.id}}\\n</span> <small class=\\\"company-legal-name secondary-text\\\">{{item.legal_name}}</small></div></div></md-item-template>\\n<md-not-found>Not Found</md-not-found></md-autocomplete></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/school-outline.4417d336.svg\\\">\\n</md-icon><md-button ng-href=\\\"{{vm.academyUrl}}\\\" target=\\\"_blank\\\">{{\\'TOOLBAR.ACADEMY\\' | translate}}</md-button>\\n</md-menu-item><md-menu-item class=\\\"md-indent\\\"><md-icon md-font-icon=\\\"icon-flag-checkered-variant\\\" class=\\\"top-10\\\">\\n</md-icon><md-menu><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\\\" flex><div flex ng-transclude></div><md-button \\nclass=\\\"md-icon-button no-margin\\\" ng-click=\\\"vm.clear()\\\"><md-icon md-font-icon=\\\"icon-close\\\"></md-icon></md-button></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-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/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/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/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/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/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/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/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/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-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-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-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-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-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-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/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/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/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-class=\\\"{\\'md-input-invalid\\': vm.showRequiredFieldErrors && !vm.invoice.customer}\\\" \\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=\\\"100\\\" flex-gt-md=\\\"25\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\"><label translate=\\\"INVOICE.BILLING_DATE\\\">Billing date</label><md-datepicker \\nclass=\\\"invoice-datepicker\\\" flex md-hide-icons=\\\"calendar\\\" md-open-on-focus \\nng-disabled=\\\"(!session.hasPermission(\\'accounting.invoices.create\\') && !session.hasPermission(\\'accounting.invoices.invoice.update\\')) || (vm.canNotEditBillingDate())\\\" \\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=\\\"80\\\" flex-gt-md=\\\"20\\\" flex-gt-sm=\\\"40\\\" layout=\\\"column\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\"><label translate=\\\"INVOICE.EXPIRATION_DATE\\\">Expiration date</label><md-datepicker \\nclass=\\\"invoice-datepicker\\\" md-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=\\\"20\\\" \\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-class=\\\"{\\'md-input-invalid\\': vm.showRequiredFieldErrors && !vm.invoice.serial_number_type}\\\" \\nng-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 ng-disabled=\\\"vm.canNotEditSerialNumber()\\\" \\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><md-card-title><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\" \\ntranslate=\\\"INVOICE.INVOICE_LINES\\\"></span><nd-new-feature-badge id=\\\"DELIVERIES_AS_LINES\\\"></nd-new-feature-badge></div>\\n</md-card-title-text></md-card-title><md-card-content class=\\\"no-padding\\\"><md-progress-linear md-mode=\\\"indeterminate\\\" \\nng-if=\\\"vm.loadingDeliveries\\\"></md-progress-linear><table class=\\\"m-0 full-width\\\" style=\\\"border-spacing: 0\\\" flex=\\\"100\\\">\\n<tr ng-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\\\"><nd-a \\nclass=\\\"cursor-pointer text-truncate\\\" state=\\\"\\'app.inventory.transfers.transfer.delivery\\'\\\" \\nstate-params=\\\"{id:invoice_line.related_order.order_id}\\\" \\nng-if=\\\"invoice_line.related_order && invoice_line.related_order.order_type==\\'TransferOrder\\'\\\">\\n{{invoice_line.related_order.order_autocode}}<md-tooltip>{{invoice_line.related_order.order_autocode}}</md-tooltip>\\n</nd-a><nd-a class=\\\"cursor-pointer text-truncate\\\" state=\\\"\\'app.sale.sales_log.order\\'\\\" \\nstate-params=\\\"{id:invoice_line.related_order.order_id}\\\" \\nng-if=\\\"invoice_line.related_order && invoice_line.related_order.order_type==\\'PosOrder\\'\\\">\\n{{invoice_line.related_order.order_autocode}}<md-tooltip>{{invoice_line.related_order.order_autocode}}</md-tooltip>\\n</nd-a><nd-a class=\\\"cursor-pointer text-truncate\\\" state=\\\"\\'app.wholesale.sales.sale.deliveries.delivery\\'\\\" \\nstate-params=\\\"{id:invoice_line.related_order.order_id, orderDeliveryId: invoice_line.related_order.order_delivery_id}\\\" \\nng-if=\\\"invoice_line.related_order && invoice_line.related_order.order_type==\\'SaleOrder\\'\\\">\\n{{invoice_line.related_order.delivery_autocode}}<md-tooltip>{{invoice_line.related_order.delivery_autocode}}\\n</md-tooltip></nd-a><nd-a class=\\\"cursor-pointer text-truncate\\\" \\nstate=\\\"\\'app.inventory.purchases.purchase.deliveries.delivery\\'\\\" \\nstate-params=\\\"{id:invoice_line.related_order.order_id, orderDeliveryId: invoice_line.related_order.order_delivery_id}\\\" \\nng-if=\\\"invoice_line.related_order && invoice_line.related_order.order_type==\\'PurchaseOrder\\'\\\">\\n{{invoice_line.related_order.delivery_autocode}}<md-tooltip>{{invoice_line.related_order.delivery_autocode}}\\n</md-tooltip></nd-a></td><td class=\\\"border-right border-top h-40 text-center w-75\\\"><input \\nng-if=\\\"!vm.invoice.isCorrective() || vm.invoice.autocode\\\" ng-change=\\\"vm.refreshTotalPrice(invoice_line)\\\" \\nng-disabled=\\\"vm.isInvoiceLineDisabled()\\\" ng-model=\\\"invoice_line.quantity\\\" required step=\\\"1\\\" type=\\\"number\\\"> <input \\nng-if=\\\"vm.invoice.isCorrective() && !vm.invoice.autocode && invoice_line.remaining_amount_to_correct_from_original >= 0\\\" \\nng-change=\\\"vm.refreshTotalPrice(invoice_line)\\\" ng-disabled=\\\"vm.isInvoiceLineDisabled()\\\" \\nng-model=\\\"invoice_line.quantity\\\" required step=\\\"1\\\" max=\\\"0\\\" \\nmin=\\\"{{-invoice_line.remaining_amount_to_correct_from_original}}\\\" type=\\\"number\\\"> <input \\nng-if=\\\"vm.invoice.isCorrective() && !vm.invoice.autocode && invoice_line.remaining_amount_to_correct_from_original < 0\\\" \\nng-change=\\\"vm.refreshTotalPrice(invoice_line)\\\" ng-disabled=\\\"vm.isInvoiceLineDisabled()\\\" \\nng-model=\\\"invoice_line.quantity\\\" required step=\\\"1\\\" min=\\\"0\\\" \\nmax=\\\"{{-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\\\" 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\\\"><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.subtotal || 0) | price}} {{vm.invoice.currency | currencyCharacter}}</span></div><div class=\\\"h4 mb-8\\\" \\nlayout=\\\"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 ? \\'-\\' : \\'\\') + ((vm.invoice.subtotal_discount || 0) | price) }} {{vm.invoice.currency | currencyCharacter}}\\n</span></div><div class=\\\"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.total_excl_tax || 0) | price}} {{vm.invoice.currency | currencyCharacter}}</span></div><div \\nclass=\\\"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>{{vm.getTaxTotalAmount(value) | price}} {{vm.invoice.currency | currencyCharacter}}\\n</span></div></div><md-divider class=\\\"mb-8\\\"></md-divider><div class=\\\"h1\\\" layout=\\\"row\\\"><span flex \\ntranslate=\\\"INVOICE.TOTAL\\\"></span> <span>\\n{{(vm.invoice.total_incl_tax || 0) | price}} {{vm.invoice.currency | currencyCharacter}}</span></div></div>\\n</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/account/views/roles/roles.html\",\"<div id=\\\"roles\\\" class=\\\"page-layout simple\\\" layout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"row\\\" \\nlayout-align=\\\"space-between start\\\"><span class=\\\"h2\\\" translate=\\\"ROLES.ROLES_AND_PERMISSIONS\\\"></span><div layout=\\\"row\\\" \\nlayout-align=\\\"end start\\\" has-feature-or-addon=\\\"account.roles.create\\\" flex=\\\"1\\\"><md-button class=\\\"stroked mv-0\\\" \\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 stroked mv-0\\\" \\nng-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><md-button class=\\\"md-primary md-raised mv-0\\\" ng-disabled=\\\"vm.fetching || vm.saving\\\" \\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></div></div><div class=\\\"content ml-8 mr-8 mb-8\\\" layout=\\\"column\\\" flex>\\n<md-card><md-card-content layout=\\\"column\\\" class=\\\"no-padding\\\" flex><div class=\\\"border-bottom ph-15 pv-5\\\">\\n<md-input-container md-no-float class=\\\"nd-search-input w-200\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nid=\\\"permissions-search\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" \\nclass=\\\"secondary-text\\\" ng-model-options=\\\"{debounce:500}\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nclass=\\\"md-padding\\\" ng-if=\\\"vm.fetching\\\"><md-progress-circular></md-progress-circular></div><div \\nui-grid=\\\"vm.gridOptions\\\" ui-grid-pinning ui-grid-pagination ui-grid-resize-columns class=\\\"roles-grid\\\" \\nng-if=\\\"!vm.fetching\\\" flex></div></md-card-content></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/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/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/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/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/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-menu-item has-permission=\\\"sale.sales_log.delete\\\" class=\\\"border-top\\\" \\nng-if=\\\"vm.order.autocode && !vm.order.is_negative && !vm.order.is_negated\\\"><md-button class=\\\"md-warn\\\" \\nng-click=\\\"vm.order.deletePosOrderPre(vm.delete)\\\">{{\\'GENERAL.DELETE\\' | translate}}</md-button></md-menu-item>\\n<md-menu-item has-permission=\\\"sale.sales_log.delete_draft\\\" class=\\\"border-top\\\" \\nng-if=\\\"!vm.order.autocode && !vm.order.is_negative && !vm.order.is_negated\\\"><md-button class=\\\"md-warn\\\" \\nng-click=\\\"vm.order.deletePosOrderPre(vm.delete)\\\">{{\\'GENERAL.DELETE\\' | translate}}</md-button></md-menu-item><md-divider\\n ng-if=\\\"vm.showAdminActions()\\\"></md-divider><md-menu-item ng-if=\\\"vm.showAdminActions()\\\"><md-button \\nclass=\\\"md-button md-warn\\\" ng-click=\\\"vm.importOrderFromSite()\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nclass=\\\"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><nd-pos-order-additional-information-card order=\\\"vm.order\\\" \\nwarehouses=\\\"vm.warehouses\\\" readonly=\\\"false\\\" update-debounce=\\\"vm.updateDebounce()\\\">\\n</nd-pos-order-additional-information-card></div></div></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.showBulkChangeWarehouseDialog()\\\" ng-disabled=\\\"vm.noneChecked()\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/store-outline.583690c9.svg\\\" class=\\\"s16\\\"></md-icon><md-tooltip>\\n{{\\'ORDERS.CHANGE_WAREHOUSE\\' | translate}}</md-tooltip></md-button><md-button class=\\\"md-icon-button\\\" \\nng-if=\\\"vm.isOrdersState()\\\" ng-click=\\\"vm.printDeliveriesPdf()\\\" \\nng-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/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-padding\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-button class=\\\"md-icon-button\\\" ng-if=\\\"vm.posOrder\\\" ng-click=\\\"vm.cancel()\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><span class=\\\"h2\\\" translate=\\\"NAVIGATION.SCAN_AND_GO\\\"></span> <span \\nclass=\\\"h2 secondary-text ml-10 pl-10 border-left\\\" ng-if=\\\"vm.posOrder && vm.posOrder.autocode\\\"><a \\nui-sref=\\\"app.ecommerce.orders.order({id: vm.posOrder.id})\\\">{{vm.posOrder.autocode}}</a></span></div><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" ng-if=\\\"vm.posOrder && vm.currentFulfillmentId\\\"><span \\nclass=\\\"secondary-text mr-8 scan-and-go-navigation-position\\\" ng-if=\\\"vm.getNavigationPositionText()\\\">\\n{{vm.getNavigationPositionText()}}</span><md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.goToPreviousOrder()\\\" \\nng-disabled=\\\"!vm.canNavigateToPrevious()\\\"><md-tooltip>{{\\'SCAN_AND_GO.PREVIOUS_ORDER\\' | translate}}</md-tooltip><md-icon\\n ng-if=\\\"vm.navigationDirection !== \\'previous\\' || (!vm.loadingNeighbours && !vm.loadingOrder)\\\" \\nmd-font-icon=\\\"icon-chevron-left\\\"></md-icon><md-progress-circular \\nng-if=\\\"vm.navigationDirection === \\'previous\\' && (vm.loadingNeighbours || vm.loadingOrder)\\\" md-diameter=\\\"20\\\" \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular></md-button><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"vm.goToNextOrder()\\\" ng-disabled=\\\"!vm.canNavigateToNext()\\\"><md-tooltip>\\n{{\\'SCAN_AND_GO.NEXT_ORDER\\' | translate}}</md-tooltip><md-icon \\nng-if=\\\"vm.navigationDirection !== \\'next\\' || (!vm.loadingNeighbours && !vm.loadingOrder)\\\" \\nmd-font-icon=\\\"icon-chevron-right\\\"></md-icon><md-progress-circular \\nng-if=\\\"vm.navigationDirection === \\'next\\' && (vm.loadingNeighbours || vm.loadingOrder)\\\" md-diameter=\\\"20\\\" \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular></md-button></div></div><div flex layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\" layout-fill layout-gt-xs=\\\"row\\\" ng-if=\\\"!vm.posOrder\\\"><div flex layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><md-card class=\\\"m-0 form-card\\\" flex><md-card-title><md-card-title-text><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"h3\\\" translate=\\\"NAVIGATION.SCAN_AND_GO\\\"></span></div></md-card-title-text>\\n</md-card-title><md-card-content><div class=\\\"pb-16\\\"><span class=\\\"step-text secondary-text\\\" \\ntranslate=\\\"ORDERS.STOCK_WAREHOUSE_TEXT\\\"></span><div class=\\\"mt-8\\\" flex=\\\"100\\\" layout=\\\"row\\\"><md-input-container \\nclass=\\\"nd-search-input nd-filter-input no-select\\\" flex md-no-float><md-select flex ng-disabled=\\\"vm.scanning\\\" \\nng-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><span \\nclass=\\\"step-text secondary-text\\\" translate=\\\"IMPORTER.OR\\\">o</span><md-button class=\\\"md-primary\\\" \\nng-disabled=\\\"vm.startPreparingLoading\\\" ng-click=\\\"vm.startPreparingOrders()\\\"><md-progress-circular \\nng-if=\\\"vm.startPreparingLoading\\\" md-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\" class=\\\"mh-8\\\"></md-progress-circular><span \\ntranslate=\\\"SCAN_AND_GO.START_PREPARING_FIRST_ORDER\\\"></span></md-button></div></md-card-content></md-card></div></div>\\n<div class=\\\"animate-fade-in-out\\\" ng-if=\\\"vm.bannerMessage\\\"><div class=\\\"did-you-know red mb-10\\\" layout=\\\"column\\\" \\nlayout-gt-md=\\\"row\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\\\" class=\\\"red-fg\\\">\\n</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><nd-pos-order-additional-information-card class=\\\"full-width\\\" order=\\\"vm.posOrder\\\" \\nreadonly=\\\"true\\\" no-margin=\\\"true\\\"></nd-pos-order-additional-information-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.vouchers\\\" md-nav-sref=\\\"app.ecommerce.sites.site.vouchers\\\" \\nname=\\\"vouchers\\\" \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP && vm.site.sync_gift_card_enabled\\\">\\n{{\\\"SITE.VOUCHERS_AND_GIFT_CARDS\\\" | translate}}</md-nav-item><md-nav-item \\nhas-permission=\\\"app.ecommerce.sites.site.routing_rules\\\" md-nav-sref=\\\"app.ecommerce.sites.site.routing_rules\\\" \\nname=\\\"routing_rules\\\" ng-if=\\\"vm.showAdminActions()\\\">{{\\\"ROUTING_RULES.ROUTING_RULES\\\" | translate}}</md-nav-item>\\n<md-nav-item has-permission=\\\"app.ecommerce.sites.site.operations\\\" md-nav-sref=\\\"app.ecommerce.sites.site.operations\\\" \\nname=\\\"operations\\\">{{\\\"SITE.OPERATIONS\\\" | 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/apps/apps.html\",\"<div id=\\\"apps\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><div layout=\\\"column\\\"><h2 translate=\\\"APPS.APPS_AND_INTEGRATIONS\\\" class=\\\"h2 mb-16\\\">\\n</h2><h3 hide-xs hide-sm translate=\\\"APPS.APPS_INFORMATION_TEXT\\\" class=\\\"h3 secondary-text mt-0\\\"></h3></div><md-button \\nclass=\\\"md-primary md-raised\\\" has-permission=\\\"app.integration_apps.handler_events\\\" \\nui-sref=\\\"app.integration_apps.handler_events\\\"><span translate=\\\"HANDLER_EVENTS.VIEW_HANDLER_EVENTS\\\"></span></md-button>\\n</div></div><div class=\\\"pl-8 pr-8\\\" layout=\\\"row\\\" layout-wrap><nd-integration-card \\nng-repeat=\\\"app in vm.integrationApps | orderBy: \\'position\\'\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\" flex-gt-lg=\\\"25\\\" \\napp=\\\"app\\\"></nd-integration-card></div></div>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/handler-events/handler-events.html\",\"<div id=\\\"handler-events\\\" 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><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=\\\"HANDLER_EVENTS.GO_BACK\\\">\\n<md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><div class=\\\"h2\\\" \\ntranslate=\\\"HANDLER_EVENTS.HANDLER_EVENTS_TITLE\\\"></div></div></div></div></div><div class=\\\"content\\\" layout=\\\"column\\\" \\nflex><div class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\" flex><div class=\\\"center\\\" layout=\\\"column\\\" flex><div \\nclass=\\\"content-card\\\" layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\nclass=\\\"w-10\\\"></span><nd-filter-selector class=\\\"ml-10\\\" filter-storage-label=\\\"handler-events-filters\\\" \\non-changed=\\\"vm.reloadEvents()\\\"><nd-filter name=\\\"DATE_RANGE\\\" label=\\\"HANDLER_EVENTS.DATE_RANGE\\\" icon=\\\"icon-calendar\\\">\\n<nd-date-range-filter model=\\\"vm.status.filters.dateRange\\\" select-placeholder=\\\"HANDLER_EVENTS.SELECT_DATE_RANGE\\\" \\nicon=\\\"icon-calendar\\\" show-template=\\\"true\\\" auto-confirm=\\\"false\\\"></nd-date-range-filter></nd-filter><nd-filter \\nname=\\\"OPERATION_TYPE\\\" label=\\\"HANDLER_EVENTS.OPERATION_TYPE\\\" icon=\\\"icon-swap-horizontal\\\"><nd-paginated-dropdown \\nitems=\\\"vm.operationTypes\\\" selected-items=\\\"vm.status.filters.operation_type\\\" \\nselect-placeholder=\\\"HANDLER_EVENTS.OPERATION_TYPE\\\" search=\\\"true\\\" multiple=\\\"true\\\" icon=\\\"icon-swap-horizontal\\\">\\n</nd-paginated-dropdown></nd-filter><nd-filter name=\\\"STATUSES\\\" label=\\\"HANDLER_EVENTS.STATUS\\\" icon=\\\"icon-check-circle\\\">\\n<nd-paginated-dropdown items=\\\"vm.statuses\\\" selected-items=\\\"vm.status.filters.statuses\\\" \\nselect-placeholder=\\\"HANDLER_EVENTS.STATUS\\\" search=\\\"true\\\" multiple=\\\"true\\\" icon=\\\"icon-check-circle\\\">\\n</nd-paginated-dropdown></nd-filter></nd-filter-selector><span flex></span></div><md-content \\nclass=\\\"content no-padding\\\" flex layout=\\\"column\\\"><nd-handler-events-list status=\\\"vm.status\\\" list-config=\\\"vm.listConfig\\\" \\nlayout-fill></nd-handler-events-list></md-content></div></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\\\" \\nhas-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/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/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/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 flex\\\">{{\\'CONFIGURATION.\\' + option.title | translate}}</span><nd-new-feature-badge \\nng-if=\\\"option.newFeatureBadgeId\\\" remove-margin=\\\"true\\\" id=\\\"{{option.newFeatureBadgeId}}\\\"></nd-new-feature-badge>\\n<md-tooltip>{{\\'CONFIGURATION.\\' + option.title | translate}}</md-tooltip><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-button></div></div></md-sidenav><div\\n flex layout=\\\"column\\\" ms-scroll><div class=\\\"header\\\" 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 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/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/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=\\\"column\\\"><nd-top-bar>\\n<leading><md-button class=\\\"md-icon-button\\\" aria-label=\\\"Back\\\" ng-click=\\\"vm.back()\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button></leading><bar-title><nd-screen-title \\nheader-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 stroked\\'\\\" ng-if=\\\"vm.hasCompanySendcloud() && vm.packingOrder.hasParcels()\\\"><md-button \\nmain-action ng-click=\\\"vm.handleDownloadLabels()\\\"><span translate=\\\"PICKING_AND_PACKING.VIEW_LABELS\\\"></span></md-button>\\n<md-button action ng-click=\\\"vm.handleDownloadLabelsWithDeliveries()\\\"><span \\ntranslate=\\\"PICKING_AND_PACKING.VIEW_LABELS_AND_DELIVERIES\\\"></span></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.LABEL_AND_PACK\\\">\\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=\\\"PACKING.PACK\\\"></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 stroked\\\" ng-disabled=\\\"vm.finishing || vm.loading\\\" has-permission=\\\"inventory.packings.ship\\\" \\nng-click=\\\"vm.openShippingDialog()\\\"><span translate=\\\"PACKING.SHIP\\\"></span></md-button><md-button \\nng-if=\\\"vm.packingOrder.isPendingToShip()\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"vm.finishing || vm.loading || vm.creating\\\" has-permission=\\\"inventory.packings.pack_products\\\" \\nng-click=\\\"vm.packNext()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.creating\\\" \\nmd-diameter=\\\"20px\\\" class=\\\"mr-8\\\"></md-progress-circular><span translate=\\\"PACKING.PACK_NEXT\\\"></span></div></md-button>\\n</actions></nd-top-bar><div class=\\\"content ml-8 mr-8 mb-8\\\" flex layout=\\\"column\\\"><md-nav-bar layout=\\\"row\\\" \\nstyle=\\\"margin-left: 4px\\\" class=\\\"mb-5\\\" 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 page-layout simple no-padding\\\" layout=\\\"column\\\" layout-fill><form \\nname=\\\"pickingForm\\\" layout-fill flex layout=\\\"column\\\"><div class=\\\"header md-background-bg md-hue-2\\\" layout=\\\"column\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" flex class=\\\"mr-10\\\"><md-button class=\\\"md-icon-button\\\" \\naria-label=\\\"Go to pickings list\\\" translate ng-click=\\\"vm.goBack()\\\" translate-attr-aria-label=\\\"PICKING.PICKING\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\" class=\\\"black-fg\\\"></md-icon></md-button><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex><div class=\\\"h2\\\" translate=\\\"PICKING.PICKING\\\"></div><div class=\\\"h2 secondary-text ml-10 pl-10 pr-10\\\">\\n{{vm.pickingOrder.autocode}}</div><span class=\\\"ml-16 status status-badge\\\" ng-class=\\\"vm.getStatusColorClass()\\\">\\n{{vm.getStatusLabel()}}</span></div><span flex></span><md-button class=\\\"md-warn stroked\\\" \\nng-disabled=\\\"vm.pickingOrder.has_packing_orders || vm.finishing\\\" has-permission=\\\"inventory.pickings.delete\\\" \\nng-click=\\\"vm.deletePickingOrder()\\\"><span translate=\\\"GENERAL.CANCEL\\\"></span></md-button><nd-menu-button \\nmd-class=\\\"\\'md-primary md-raised\\'\\\" ng-if=\\\"vm.isPickingOrderPicking()\\\"><md-button main-action \\nng-click=\\\"vm.executeConfirm($event)\\\"><span translate=\\\"{{vm.getConfirmActionLabelKey()}}\\\"></span></md-button><div \\naction layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"md-button\\\" \\nng-click=\\\"vm.setConfirmAction(\\'CONFIRM_AND_GO_BACK_TO_PICKING\\', $event)\\\" \\nng-class=\\\"{\\'md-primary\\': vm.confirmAction === vm.CONFIRM_ACTIONS.CONFIRM_AND_GO_BACK_TO_PICKING}\\\"><span \\ntranslate=\\\"PICKING.CONFIRM_AND_GO_BACK_TO_PICKING\\\"></span></div><div action layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"md-button\\\" ng-click=\\\"vm.setConfirmAction(\\'CONFIRM_AND_GO_TO_PACKING\\', $event)\\\" \\nng-class=\\\"{\\'md-primary\\': vm.confirmAction === vm.CONFIRM_ACTIONS.CONFIRM_AND_GO_TO_PACKING}\\\"><span \\ntranslate=\\\"PICKING.CONFIRM_AND_GO_TO_PACKING\\\"></span></div><div action layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"md-button\\\" ng-click=\\\"vm.setConfirmAction(\\'CONFIRM_AND_GO_TO_SCAN_AND_GO\\', $event)\\\" \\nng-class=\\\"{\\'md-primary\\': vm.confirmAction === vm.CONFIRM_ACTIONS.CONFIRM_AND_GO_TO_SCAN_AND_GO}\\\"><span \\ntranslate=\\\"PICKING.CONFIRM_AND_GO_TO_SCAN_AND_GO\\\"></span></div><div action layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"md-button\\\" ng-click=\\\"vm.setConfirmAction(\\'CONFIRM_AND_START_PACKING\\', $event)\\\" \\nng-class=\\\"{\\'md-primary\\': vm.confirmAction === vm.CONFIRM_ACTIONS.CONFIRM_AND_START_PACKING}\\\"><span \\ntranslate=\\\"PICKING.CONFIRM_AND_START_PACKING\\\"></span></div><div action layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"md-button\\\" ng-click=\\\"vm.setConfirmAction(\\'CONFIRM_AND_PACK\\', $event)\\\" \\nng-class=\\\"{\\'md-primary\\': vm.confirmAction === vm.CONFIRM_ACTIONS.CONFIRM_AND_PACK}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span translate=\\\"PICKING.CONFIRM_AND_MARK_ALL_ORDERS_AS\\\" class=\\\"mr-8\\\"></span><div \\nclass=\\\"status-badge md-blue-100-bg\\\" translate=\\\"PACKING.PACKED\\\"></div></div></div><div action layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"md-button\\\" ng-click=\\\"vm.setConfirmAction(\\'CONFIRM_AND_SHIP\\', $event)\\\" \\nng-class=\\\"{\\'md-primary\\': vm.confirmAction === vm.CONFIRM_ACTIONS.CONFIRM_AND_SHIP}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span translate=\\\"PICKING.CONFIRM_AND_MARK_ALL_ORDERS_AS\\\" class=\\\"mr-8\\\"></span><div \\nclass=\\\"status-badge md-green-100-bg\\\" translate=\\\"PACKING.SHIPPED\\\"></div></div></div></nd-menu-button></div>\\n<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\\\" flex><md-card class=\\\"mt-0\\\"><md-card-content class=\\\"p-0\\\"><div \\nlayout=\\\"column\\\"><table class=\\\"simple\\\" ms-responsive-table><thead><tr><th translate=\\\"PICKING.WAREHOUSE\\\"></th><th \\ntranslate=\\\"PICKING.CREATED_AT\\\"></th><th translate=\\\"PICKING.AMOUNT\\\"></th><th translate=\\\"PICKING.CREATED_BY\\\"></th><th \\ntranslate=\\\"PICKING.PICKED_BY\\\"></th><th translate=\\\"PICKING.START_AT\\\"></th><th translate=\\\"PICKING.ENDED_AT\\\"></th></tr>\\n</thead><tbody><tr><td><div class=\\\"ml-0\\\">{{vm.pickingOrder.warehouse.name}}</div></td><td><div>\\n{{vm.pickingOrder.created_at | date:\\'dd/MM/yyyy\\'}}</div><div class=\\\"m-0\\\"><small>\\n{{vm.pickingOrder.created_at | date:\\'HH:mm a\\'}}</small></div></td><td><div>{{vm.gridOptions.totalItems}}</div></td><td>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-user-picture user=\\\"vm.userCreatePicking\\\"></nd-user-picture><span \\nclass=\\\"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\\\"><md-select multiple=\\\"true\\\" ng-disabled=\\\"vm.isPickingOrderPicked()\\\" \\nng-model=\\\"vm.pickingOrder.picking_activity.picked_by\\\" ng-change=\\\"vm.updatePickedBy($event)\\\" \\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=\\\"{{vm.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\\\">\\n</nd-user-picture><span class=\\\"username ph-5\\\" hide show-gt-sm ng-if=\\\"user\\\">{{user.first_name}} {{user.last_name}}\\n</span></div></md-option></md-select></div></td><td><div class=\\\"mt-5 ml-4\\\">\\n{{vm.pickingOrder.picking_activity.started_at | date:\\'dd/MM/yyyy\\'}}</div><div class=\\\"m-0 ml-4\\\"><small>\\n{{vm.pickingOrder.picking_activity.started_at | date:\\'HH:mm a\\'}}</small></div></td><td><div class=\\\"mt-5 ml-4\\\">\\n{{vm.pickingOrder.picking_activity.finished_at | date:\\'dd/MM/yyyy\\'}}</div><div class=\\\"m-0 ml-4\\\"><small>\\n{{vm.pickingOrder.picking_activity.finished_at | date:\\'HH:mm a\\'}}</small></div></td></tr></tbody></table></div>\\n</md-card-content></md-card><md-card flex><md-card-title class=\\\"card-toolbar\\\"><md-card-title-text><div layout=\\\"row\\\" \\nlayout-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><nd-new-feature-badge \\nid=\\\"PICKING_SELECTIVE_PRINT\\\" remove-margin=\\\"true\\\"></nd-new-feature-badge></div></md-button></div></md-card-title-text>\\n</md-card-title><md-card-content class=\\\"no-padding full-height\\\"><div class=\\\"full-width h-0\\\"><md-progress-linear \\nmd-mode=\\\"indeterminate\\\" class=\\\"loader md-primary\\\" ng-if=\\\"vm.loading\\\"></md-progress-linear></div><md-content \\nclass=\\\"content no-padding uid-grid-container transparent-bg full-height\\\" 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 class=\\\"page-layout carded left-sidenav\\\" id=\\\"picking-packing\\\" 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\\\"><span class=\\\"h2\\\" translate=\\\"PICKING_AND_PACKING.PICKING_AND_PACKING\\\"></span>\\n</div><div class=\\\"content\\\" layout=\\\"row\\\"><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 class=\\\"nav-item-badge\\\" \\ndisabled=\\\"disabled\\\" has-permission-and-feature=\\\"{{item.permission}}\\\" md-nav-click=\\\"vm.handleNavClick(item.value)\\\" \\nname=\\\"{{item.value}}\\\" ng-repeat=\\\"item in vm.navItems\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\ntranslate=\\\"{{\\'PICKING_AND_PACKING.\\' + item.title}}\\\"></span><div class=\\\"custom-badge to-prepare\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-class=\\\"[item.value, vm.currentNavItem!==\\'to-prepare\\' ? \\'opacity-light\\' : \\'\\']\\\" \\nng-if=\\\"item.title!==\\'SHIPPED\\'\\\"><span>{{item.count}}</span></div></div></md-nav-item></md-nav-bar></div><div \\nclass=\\\"content-card\\\" layout=\\\"row\\\"><md-sidenav class=\\\"sidenav border-right md-padding pr-5\\\" md-component-id=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper><nd-filter-selector \\nfilter-storage-label=\\\"{{vm.filterStorageLabel}}\\\" filter-fields-layout=\\\"column\\\"><nd-filter class=\\\"mb-15\\\" \\nicon=\\\"icon-store\\\" name=\\\"FILTER_BY_SOURCE_WAREHOUSE\\\"><nd-paginated-dropdown class=\\\"full-width\\\" flex icon=\\\"icon-store\\\" \\non-changed=\\\"vm.filterChanged()\\\" search=\\\"true\\\" select-placeholder=\\\"FILTERS.FILTER_BY_SOURCE_WAREHOUSE\\\" \\nselected-items=\\\"vm.globalStatus.sourceWarehouses\\\" transform-callback=\\\"vm.transformCallback(item)\\\" \\nurl=\\\"vm.warehouseUrl\\\"><item-template><div>{{$parent.item.name}}</div></item-template></nd-paginated-dropdown>\\n</nd-filter><nd-filter class=\\\"mb-15\\\" icon=\\\"icon-store\\\" name=\\\"FILTER_BY_TARGET_WAREHOUSE\\\"><nd-paginated-dropdown \\nicon=\\\"icon-store\\\" on-changed=\\\"vm.filterChanged()\\\" search=\\\"true\\\" \\nselect-placeholder=\\\"FILTERS.FILTER_BY_TARGET_WAREHOUSE\\\" selected-items=\\\"vm.globalStatus.targetWarehouses\\\" \\ntransform-callback=\\\"vm.transformCallback(item)\\\" url=\\\"vm.warehouseUrl\\\"><item-template><div>{{$parent.item.name}}</div>\\n</item-template></nd-paginated-dropdown></nd-filter><nd-filter name=\\\"FILTER_BY_PAYMENT_STATUS\\\" class=\\\"mb-15\\\" \\nicon=\\\"icon-credit-card\\\"><div style=\\\"position: relative\\\"><md-icon md-font-icon=\\\"icon-credit-card\\\" 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 pl-40\\\" ng-class=\\\"{\\'pl-32\\': vm.globalStatus.paymentStatuses}\\\">\\n<md-select ng-model=\\\"vm.globalStatus.paymentStatuses\\\" multiple=\\\"multiple\\\" \\nplaceholder=\\\"{{\\'FILTERS.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></div>\\n</nd-filter><nd-filter name=\\\"FILTER_BY_WARNING\\\" class=\\\"mb-15\\\" icon=\\\"icon-alert\\\"><div style=\\\"position: relative\\\">\\n<md-icon md-font-icon=\\\"icon-alert\\\" 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 pl-40\\\" ng-class=\\\"{\\'pl-32\\': vm.globalStatus.warning}\\\"><md-select \\nng-model=\\\"vm.globalStatus.warning\\\" placeholder=\\\"{{\\'FILTERS.FILTER_BY_WARNING\\' | translate}}\\\" \\nng-change=\\\"vm.filterChanged()\\\"><md-option ng-repeat=\\\"opt in vm.warningOptions\\\" ng-value=\\\"opt.value\\\">\\n{{opt.labelKey | translate}}</md-option></md-select></md-input-container></div></nd-filter><nd-filter \\nname=\\\"FILTER_BY_INCIDENCE\\\" class=\\\"mb-15\\\" icon=\\\"icon-flag-variant\\\"><div style=\\\"position: relative\\\"><md-icon \\nmd-font-icon=\\\"icon-flag-variant\\\" \\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 pl-40\\\" ng-class=\\\"{\\'pl-32\\': vm.globalStatus.incidence}\\\"><md-select \\nng-model=\\\"vm.globalStatus.incidence\\\" placeholder=\\\"{{\\'FILTERS.FILTER_BY_INCIDENCE\\' | translate}}\\\" \\nng-change=\\\"vm.filterChanged()\\\"><md-option ng-repeat=\\\"opt in vm.incidenceOptions\\\" ng-value=\\\"opt.value\\\">\\n{{opt.labelKey | translate}}</md-option></md-select></md-input-container></div></nd-filter><nd-filter class=\\\"mb-15\\\" \\nicon=\\\"icon-package-variant-closed\\\" name=\\\"FILTER_BY_STOCK_AVAILABILITY\\\"><div style=\\\"position: relative\\\"><md-icon \\nmd-font-icon=\\\"icon-package-variant-closed\\\" \\nstyle=\\\"position: absolute; left: 8px; top: 50%; transform: translateY(-50%); z-index: 1\\\"></md-icon><md-input-container \\nclass=\\\"nd-search-input nd-filter-input pl-40\\\" md-no-float ng-class=\\\"{\\'pl-32\\': vm.globalStatus.stockAvailability}\\\">\\n<md-select ng-change=\\\"vm.filterChanged()\\\" ng-model=\\\"vm.globalStatus.stockAvailability\\\" \\nplaceholder=\\\"{{\\'PICKING_AND_PACKING.FILTER_BY_STOCK_AVAILABILITY\\' | translate}}\\\"><md-option \\nng-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 class=\\\"mb-15\\\" icon=\\\"icon-package-variant-closed\\\" \\nname=\\\"FILTER_BY_UNITS\\\"><div style=\\\"position: relative\\\"><md-icon md-font-icon=\\\"icon-package-variant-closed\\\" \\nstyle=\\\"position: absolute; left: 8px; top: 50%; transform: translateY(-50%); z-index: 1\\\"></md-icon><md-input-container \\nclass=\\\"nd-search-input nd-filter-input pl-40\\\" md-no-float ng-class=\\\"{\\'pl-32\\': vm.globalStatus.unitsFilter}\\\"><md-select \\nng-change=\\\"vm.filterChanged()\\\" ng-model=\\\"vm.globalStatus.unitsFilter\\\" \\nplaceholder=\\\"{{\\'PICKING_AND_PACKING.FILTER_BY_UNITS\\' | translate}}\\\"><md-option \\nng-repeat=\\\"opt in vm.unitsFilterOptions\\\" ng-value=\\\"opt.value\\\">{{opt.labelKey | translate}}</md-option></md-select>\\n</md-input-container></div></nd-filter><nd-filter class=\\\"mb-15\\\" icon=\\\"icon-file-document\\\" name=\\\"FILTER_BY_ORDER_TYPE\\\">\\n<md-input-container class=\\\"nd-search-input nd-filter-input\\\" flex md-no-float style=\\\"padding-left: 8px !important\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s18 secondary-text\\\" md-font-icon=\\\"icon-file-document\\\" \\nng-if=\\\"!vm.globalStatus.orderTypes || vm.globalStatus.orderTypes.length === 0\\\"></md-icon><md-select flex class=\\\"m-0\\\" \\nmultiple=\\\"multiple\\\" ng-change=\\\"vm.filterChanged()\\\" ng-model=\\\"vm.globalStatus.orderTypes\\\" \\nplaceholder=\\\"{{\\'FILTERS.FILTER_BY_ORDER_TYPE\\' | translate}}\\\"><md-option ng-value=\\\"\\'PosOrderFulfillment_Store\\'\\\">\\n{{\\'FILTERS.POS_ORDER_STORE\\' | translate}}</md-option><md-option ng-value=\\\"\\'SaleOrderDelivery\\'\\\">\\n{{\\'PICKING.SALE_ORDER_DELIVERY\\' | translate}}</md-option><md-option ng-value=\\\"\\'TransferOrderDelivery\\'\\\">\\n{{\\'PICKING.TRANSFER_ORDER_DELIVERY\\' | translate}}</md-option><md-option ng-repeat=\\\"site in vm.sitesList\\\" \\nng-value=\\\"\\'PosOrderFulfillment_Ecommerce_\\' + site.id\\\">{{site.name}}</md-option></md-select></div></md-input-container>\\n</nd-filter></nd-filter-selector></md-sidenav><div flex layout=\\\"column\\\"><div class=\\\"toolbar\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" \\nhide-gt-lg hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\">\\n</md-icon></md-button><md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-md \\nhide-sm hide-xs ng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\">\\n</md-icon></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 w-200\\\" md-no-float \\nstyle=\\\"margin-right: 8px !important\\\"><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.reloadTable()\\\" \\nng-model=\\\"vm.globalStatus.search\\\" ng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><nd-picking-packing-actions \\nany-selection=\\\"vm.controlSelected()\\\" can-create-packing-order=\\\"vm.canCreatePackingOrder()\\\" creating=\\\"vm.creating\\\" flex \\nlayout=\\\"column\\\" layout-align=\\\"end end\\\" nav-item=\\\"vm.currentNavItem\\\"></nd-picking-packing-actions></div><md-content \\nclass=\\\"content no-padding\\\" flex layout=\\\"column\\\"><nd-picking-packing-to-prepare-list \\nconfiguration-data=\\\"vm.configurationData\\\" creating=\\\"vm.creating\\\" layout-fill \\nng-if=\\\"vm.currentNavItem === \\'to-prepare\\'\\\" status=\\\"vm.status\\\"></nd-picking-packing-to-prepare-list>\\n<nd-picking-packing-picking-list layout-fill ng-if=\\\"vm.currentNavItem === \\'picking\\'\\\" status=\\\"vm.status\\\">\\n</nd-picking-packing-picking-list><nd-picking-packing-picked-list configuration-data=\\\"vm.configurationData\\\" \\ncreating=\\\"vm.creating\\\" layout-fill ng-if=\\\"vm.currentNavItem === \\'picked\\'\\\" status=\\\"vm.status\\\">\\n</nd-picking-packing-picked-list><nd-picking-packing-packing-list layout-fill ng-if=\\\"vm.currentNavItem === \\'packing\\'\\\" \\nstatus=\\\"vm.status\\\"></nd-picking-packing-packing-list><nd-picking-packing-packed-list layout-fill \\nng-if=\\\"vm.currentNavItem === \\'packed\\'\\\" status=\\\"vm.status\\\"></nd-picking-packing-packed-list>\\n<nd-picking-packing-shipped-list layout-fill ng-if=\\\"vm.currentNavItem === \\'shipped\\'\\\" status=\\\"vm.status\\\">\\n</nd-picking-packing-shipped-list></md-content></div></div></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/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/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/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/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-item \\nmd-nav-sref=\\\"app.inventory.warehouses.warehouse.contract\\\" has-permission=\\\"app.inventory.warehouses.warehouse.contract\\\" \\nname=\\\"contract\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><div>{{\\\"WAREHOUSE.REGISTRATION_FORM\\\" | translate}}\\n</div><nd-new-feature-badge class=\\\"ml-8 new-feature\\\" id=\\\"PUBLIC_REGISTRATION_FORM_TAB\\\" remove-margin=\\\"true\\\">\\n</nd-new-feature-badge></div></md-nav-item></md-nav-bar><md-content ui-view=\\\"subcontent\\\" class=\\\"transparent-bg\\\" \\nlayout=\\\"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 class=\\\"page-layout carded left-sidenav\\\" id=\\\"reorder\\\" layout=\\\"row\\\"><div class=\\\"center\\\" flex layout=\\\"column\\\"><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h2\\\" translate=\\\"REPLENISHMENT.REORDER\\\">\\n</span></div><div class=\\\"preset-filters-div\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"vm.isProductView()\\\">\\n<md-button ng-class=\\\"{\\'active\\': vm.activePresetFilter === null}\\\" ng-click=\\\"vm.applyAvailabilityStatusFilter(null)\\\">\\n<span class=\\\"availability-name\\\" translate=\\\"REPLENISHMENT.ALL\\\"></span></md-button><md-button \\nng-class=\\\"{\\'active\\': vm.activePresetFilter === vm.PLANNING_AVAILABILITY_STATUS.OUT_OF_STOCK}\\\" \\nng-click=\\\"vm.applyAvailabilityStatusFilter(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-class=\\\"{\\'active\\': vm.activePresetFilter === vm.PLANNING_AVAILABILITY_STATUS.URGENT_ORDER}\\\" \\nng-click=\\\"vm.applyAvailabilityStatusFilter(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-class=\\\"{\\'active\\': vm.activePresetFilter === vm.PLANNING_AVAILABILITY_STATUS.NON_URGENT_ORDER}\\\" \\nng-click=\\\"vm.applyAvailabilityStatusFilter(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-class=\\\"{\\'active\\': vm.activePresetFilter === vm.PLANNING_AVAILABILITY_STATUS.IN_STOCK}\\\" \\nng-click=\\\"vm.applyAvailabilityStatusFilter(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 class=\\\"content-card\\\" \\nflex layout=\\\"row\\\"><md-sidenav class=\\\"sidenav border-right md-padding pr-5\\\" md-component-id=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper><div layout=\\\"row\\\" \\nclass=\\\"mb-15\\\" ng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.providers.visible\\\"><md-input-container \\nclass=\\\"nd-search-input nd-filter-input\\\" flex md-no-float><md-icon md-font-icon=\\\"icon-store\\\"></md-icon><md-select flex \\nmultiple=\\\"multiple\\\" ng-change=\\\"vm.filterChanged()\\\" ng-model=\\\"vm.statusByProduct.filters.providers\\\" \\nplaceholder=\\\"{{\\'LOW_STOCK.PROVIDER\\' | translate}}\\\"><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 layout=\\\"row\\\" class=\\\"mb-15\\\" \\nng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.availabilityStatuses.visible\\\"><md-input-container \\nclass=\\\"nd-search-input nd-filter-input\\\" flex md-no-float><md-icon class=\\\"ng-scope md-default-theme\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/playlist_add_check.9ce53b3a.svg\\\"></md-icon><md-select flex \\nmultiple=\\\"multiple\\\" ng-change=\\\"vm.filterChanged()\\\" ng-model=\\\"vm.statusByProduct.filters.availabilityStatuses\\\" \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.AVAILABILITY_STATUS\\' | translate}}\\\"><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 layout=\\\"row\\\" class=\\\"mb-15\\\" \\nng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.abcCategories.visible\\\"><md-input-container \\nclass=\\\"nd-search-input nd-filter-input\\\" flex md-no-float><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/abc.3172f407.svg\\\"></md-icon><md-select flex multiple=\\\"multiple\\\" \\nng-change=\\\"vm.filterChanged()\\\" ng-model=\\\"vm.statusByProduct.filters.abcCategories\\\" \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.ABC_CATEGORY\\' | translate}}\\\"><md-option class=\\\"status-badge-replenishments\\\" \\nng-repeat=\\\"abcCategory in vm.abcCategories | orderBy: \\'position\\'\\\" ng-value=\\\"abcCategory\\\"><div \\nclass=\\\"abc-box type-{{abcCategory}}\\\">{{abcCategory}}</div></md-option></md-select></md-input-container><md-button \\nclass=\\\"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 layout=\\\"row\\\" class=\\\"mb-15\\\" \\nng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.brands.visible\\\"><md-input-container \\nclass=\\\"nd-search-input nd-filter-input\\\" flex md-no-float><md-icon class=\\\"s24\\\" md-font-icon=\\\"icon-tag-outline\\\">\\n</md-icon><md-select flex multiple=\\\"multiple\\\" ng-change=\\\"vm.filterChanged()\\\" \\nng-model=\\\"vm.statusByProduct.filters.brands\\\" placeholder=\\\"{{\\'INVENTORY_DASHBOARD.BRAND\\' | translate}}\\\"><md-option \\nclass=\\\"status-badge-replenishments\\\" ng-repeat=\\\"brand in vm.brands | orderBy: \\'position\\'\\\" 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 layout=\\\"row\\\" class=\\\"mb-15\\\" \\nng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.categories.visible\\\"><md-input-container \\nclass=\\\"nd-search-input nd-filter-input\\\" flex md-no-float><md-icon class=\\\"s24\\\" \\nmd-font-icon=\\\"icon-folder-multiple-outline\\\"></md-icon><md-select flex multiple=\\\"multiple\\\" \\nng-change=\\\"vm.filterChanged()\\\" ng-model=\\\"vm.statusByProduct.filters.categories\\\" \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.CATEGORY\\' | translate}}\\\"><md-option class=\\\"status-badge-replenishments\\\" \\nng-repeat=\\\"category in vm.categories | orderBy: \\'position\\'\\\" ng-value=\\\"category.id\\\"><span>{{category.name}}</span>\\n</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 layout=\\\"row\\\" class=\\\"mb-15\\\" \\nng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.subcategories.visible\\\"><md-input-container \\nclass=\\\"nd-search-input nd-filter-input\\\" flex md-no-float><md-icon class=\\\"s24\\\" md-font-icon=\\\"icon-folder-outline\\\">\\n</md-icon><md-select flex multiple=\\\"multiple\\\" ng-change=\\\"vm.filterChanged()\\\" \\nng-model=\\\"vm.statusByProduct.filters.subcategories\\\" placeholder=\\\"{{\\'INVENTORY_DASHBOARD.SUBCATEGORY\\' | translate}}\\\">\\n<md-option class=\\\"status-badge-replenishments\\\" ng-repeat=\\\"subcategory in vm.subcategories | orderBy: \\'position\\'\\\" \\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 layout=\\\"row\\\" class=\\\"mb-15\\\" \\nng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.seasons.visible\\\"><md-input-container \\nclass=\\\"nd-search-input nd-filter-input\\\" flex md-no-float><md-icon class=\\\"s24\\\" md-font-icon=\\\"icon-weather-sunny\\\">\\n</md-icon><md-select flex multiple=\\\"multiple\\\" ng-change=\\\"vm.filterChanged()\\\" \\nng-model=\\\"vm.statusByProduct.filters.seasons\\\" placeholder=\\\"{{\\'INVENTORY_DASHBOARD.SEASON\\' | translate}}\\\"><md-option \\nclass=\\\"status-badge-replenishments\\\" ng-repeat=\\\"season in vm.seasons | orderBy: \\'position\\'\\\" 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 layout=\\\"row\\\" class=\\\"mb-15\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.collections.visible\\\"><md-input-container \\nclass=\\\"nd-search-input nd-filter-input\\\" flex md-no-float><md-icon class=\\\"s24\\\" md-font-icon=\\\"icon-weather-sunny\\\">\\n</md-icon><md-select flex multiple=\\\"multiple\\\" ng-change=\\\"vm.filterChanged()\\\" \\nng-model=\\\"vm.statusByProduct.filters.collections\\\" placeholder=\\\"{{\\'SALE.COLLECTION\\' | translate}}\\\"><md-option \\nclass=\\\"status-badge-replenishments\\\" ng-repeat=\\\"collection in vm.collections | orderBy: \\'position\\'\\\" \\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 ml-0\\\" ng-click=\\\"$mdMenu.open($event)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-menu-origin \\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-hide=\\\"filter.visible\\\" ng-repeat=\\\"(property, filter) in vm.statusByProduct.dynamicFilters\\\"><md-button \\nng-click=\\\"vm.toggleFilterVisibility(property, filter)\\\"><md-icon md-font-icon md-menu-align-target \\nmd-svg-icon=\\\"{{filter.svgIcon}}\\\" ng-if=\\\"filter.svgIcon\\\"></md-icon><md-icon md-font-icon=\\\"{{filter.icon}}\\\" \\nmd-menu-align-target ng-if=\\\"!filter.svgIcon\\\"></md-icon>{{filter.title | translate}}</md-button></md-menu-item>\\n</md-menu-content></md-menu></md-sidenav><div flex layout=\\\"column\\\"><div class=\\\"toolbar\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" \\nhide-gt-lg hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\">\\n</md-icon></md-button><md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-md \\nhide-sm hide-xs ng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\">\\n</md-icon></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 w-200\\\" md-no-float><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" id=\\\"product-search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks ng-change=\\\"vm.filterChanged()\\\" \\nng-model=\\\"vm.selectedStatus.search\\\" ng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><span class=\\\"secondary-text ml-10\\\" \\nng-if=\\\"vm.keptSelectionArray.length\\\">{{\\'PRODUCTS.N_PRODUCTS_SELECTED\\' | translate: {n: vm.keptSelectionArray.length} }}\\n</span><div flex ng-if=\\\"vm.isProviderView()\\\"></div><span flex></span><md-button aria-label=\\\"Expand \\\" \\nclass=\\\"md-icon-button mr-16\\\" ng-click=\\\"vm.expandAll()\\\" ng-if=\\\"vm.isProductView()\\\"><md-tooltip md-direction=\\\"bottom\\\">\\n{{\\'GENERAL.EXPAND_ALL\\' | translate}}</md-tooltip><md-icon class=\\\"s24\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/arrow-expand-vertical.923beec7.svg\\\"></md-icon></md-button><md-button \\naria-label=\\\"Collapse\\\" class=\\\"md-icon-button\\\" ng-click=\\\"vm.collapseAll()\\\" ng-if=\\\"vm.isProductView()\\\"><md-tooltip \\nmd-direction=\\\"bottom\\\">{{\\'GENERAL.COLLAPSE_ALL\\' | translate}}</md-tooltip><md-icon class=\\\"s24\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/arrow-collapse-vertical.05b2cad3.svg\\\"></md-icon></md-button><nd-tabs \\nselected=\\\"vm.view\\\" \\ntabs=\\\"[\\n              {name: 1, label: \\'REORDER.VIEW_BY_PRODUCT\\'},\\n              {name: 2, label: \\'REORDER.VIEW_BY_PROVIDER\\'}\\n            ]\\\">\\n</nd-tabs><md-menu class=\\\"mr-5\\\" ng-if=\\\"vm.isProductView()\\\"><md-button aria-label=\\\"more\\\" class=\\\"md-icon-button\\\" \\ndata-test-id=\\\"open-menu-button\\\" ng-click=\\\"$mdMenu.open()\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon>\\n</md-button><md-menu-content width=\\\"3\\\"><md-menu-item><md-button ng-click=\\\"vm.downloadCSV()\\\" 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 ng-class=\\\"{\\'ml-8\\': vm.exporting}\\\" translate=\\\"CUSTOMERS.EXPORT_CSV\\\">\\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 class=\\\"loader md-primary\\\" md-mode=\\\"indeterminate\\\" ng-if=\\\"vm.loading\\\"></md-progress-linear></div>\\n<md-content class=\\\"content uid-grid-container no-padding\\\" flex><div class=\\\"grid\\\" ng-if=\\\"vm.isProductView()\\\" \\nstyle=\\\"height: 100%\\\" ui-grid=\\\"vm.gridOptionsByProduct\\\" ui-grid-auto-resize ui-grid-cellnav ui-grid-edit \\nui-grid-exporter ui-grid-exporter ui-grid-grouping ui-grid-move-columns ui-grid-pagination ui-grid-pinning \\nui-grid-resize-columns ui-grid-row-edit ui-grid-save-state ui-grid-selection></div><div class=\\\"grid\\\" \\nng-if=\\\"vm.isProviderView()\\\" style=\\\"height: 100%\\\" ui-grid=\\\"vm.gridOptionsByProvider\\\" ui-grid-auto-resize \\nui-grid-cellnav ui-grid-edit ui-grid-exporter ui-grid-exporter ui-grid-move-columns ui-grid-pagination ui-grid-pinning \\nui-grid-resize-columns ui-grid-row-edit ui-grid-save-state ui-grid-selection></div></md-content></div></div></div>\\n</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 class=\\\"page-layout carded left-sidenav\\\" id=\\\"replenishment\\\" layout=\\\"row\\\"><div class=\\\"center\\\" flex layout=\\\"column\\\">\\n<div class=\\\"header no-margin\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h2\\\" ng-if=\\\"!vm.isBundle\\\" \\ntranslate=\\\"REPLENISHMENT.REPLENISHMENT\\\"></span><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.openAnalysisInformationDialog()\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\"></md-icon></md-button>\\n</div><nd-barcode-listener callback=\\\"vm.barcodeListenerCallback(barcode)\\\"></nd-barcode-listener><div \\nclass=\\\"preset-filters-div\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"vm.isProductView()\\\"><md-button \\nng-class=\\\"{\\'active\\': vm.activePresetFilter === null}\\\" ng-click=\\\"vm.applyAvailabilityStatusFilter(null)\\\"><span \\nclass=\\\"availability-name\\\" translate=\\\"REPLENISHMENT.ALL\\\"></span></md-button><md-button \\nng-class=\\\"{\\'active\\': vm.activePresetFilter === vm.PLANNING_AVAILABILITY_STATUS.OUT_OF_STOCK}\\\" \\nng-click=\\\"vm.applyAvailabilityStatusFilter(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-class=\\\"{\\'active\\': vm.activePresetFilter === vm.PLANNING_AVAILABILITY_STATUS.URGENT_ORDER}\\\" \\nng-click=\\\"vm.applyAvailabilityStatusFilter(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-class=\\\"{\\'active\\': vm.activePresetFilter === vm.PLANNING_AVAILABILITY_STATUS.IN_STOCK}\\\" \\nng-click=\\\"vm.applyAvailabilityStatusFilter(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 class=\\\"content-card\\\" \\nflex layout=\\\"row\\\"><md-sidenav class=\\\"sidenav border-right md-padding pr-5\\\" md-component-id=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper><nd-filter-selector \\nng-if=\\\"vm.isProductView()\\\" on-changed=\\\"vm.filterChanged()\\\" filter-fields-layout=\\\"column\\\"><nd-filter \\nicon=\\\"icon-package-variant-closed\\\" label=\\\"REPLENISHMENT.STOCK\\\" name=\\\"REPLENISHMENT.STOCK\\\" class=\\\"mb-15\\\"><nd-input flex \\nicon=\\\"icon-package-variant-closed\\\" min=\\\"0\\\" model=\\\"vm.statusByProduct.filters.warehouseStock\\\" \\nselect-placeholder=\\\"REPLENISHMENT.STOCK\\\" step=\\\"1\\\" type=\\\"number\\\"></nd-input></nd-filter><nd-filter \\nicon=\\\"icon-package-variant-closed\\\" label=\\\"REPLENISHMENT.STOCK_TO_ORDER\\\" name=\\\"REPLENISHMENT.STOCK_TO_ORDER\\\" \\nclass=\\\"mb-15\\\"><nd-input icon=\\\"icon-package-variant-closed\\\" min=\\\"0\\\" model=\\\"vm.statusByProduct.filters.stockToOrder\\\" \\nselect-placeholder=\\\"REPLENISHMENT.STOCK_TO_ORDER\\\" step=\\\"1\\\" type=\\\"number\\\"></nd-input></nd-filter><nd-filter \\nicon=\\\"icon-store\\\" label=\\\"FILTERS.FILTER_BY_WAREHOUSE\\\" name=\\\"FILTER_BY_WAREHOUSE\\\" class=\\\"mb-15\\\"><nd-paginated-dropdown \\nicon=\\\"assets/images/custom-material-design-icons/store-outline.583690c9.svg\\\" multiple=\\\"true\\\" search=\\\"true\\\" \\nselect-placeholder=\\\"FILTERS.FILTER_BY_WAREHOUSE\\\" selected-items=\\\"vm.statusByProduct.filters.warehouses\\\" \\nurl=\\\"vm.warehouseUrl\\\"></nd-paginated-dropdown></nd-filter><nd-filter icon=\\\"icon-store\\\" \\nlabel=\\\"INVENTORY_DASHBOARD.AVAILABILITY_STATUS\\\" name=\\\"FILTER_AVAILABILITY_STATUS\\\" class=\\\"mb-15\\\"><nd-paginated-dropdown \\nicon=\\\"assets/images/custom-material-design-icons/playlist_add_check.9ce53b3a.svg\\\" items=\\\"vm.availabilityStatuses\\\" \\nmultiple=\\\"true\\\" search=\\\"true\\\" select-placeholder=\\\"INVENTORY_DASHBOARD.AVAILABILITY_STATUS\\\" \\nselected-items=\\\"vm.statusByProduct.filters.availabilityStatuses\\\"><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 \\nicon=\\\"assets/images/custom-material-design-icons/abc.3172f407.svg\\\" label=\\\"INVENTORY_DASHBOARD.ABC_CATEGORY\\\" \\nname=\\\"FILTER_ABC_CATEGORY\\\" class=\\\"mb-15\\\"><nd-paginated-dropdown \\nicon=\\\"assets/images/custom-material-design-icons/abc.3172f407.svg\\\" items=\\\"vm.abcCategories\\\" multiple=\\\"true\\\" search=\\\"true\\\" \\nselect-placeholder=\\\"INVENTORY_DASHBOARD.ABC_CATEGORY\\\" selected-items=\\\"vm.statusByProduct.filters.abcCategories\\\">\\n<item-template><div class=\\\"abc-box type-{{$parent.item}}\\\">{{$parent.item}}</div></item-template>\\n</nd-paginated-dropdown></nd-filter><nd-filter icon=\\\"icon-tag-outline\\\" label=\\\"INVENTORY_DASHBOARD.BRAND\\\" \\nname=\\\"FILTER_BRAND\\\" class=\\\"mb-15\\\"><nd-paginated-dropdown icon=\\\"icon-tag-outline\\\" multiple=\\\"true\\\" search=\\\"true\\\" \\nselect-placeholder=\\\"INVENTORY_DASHBOARD.BRAND\\\" selected-items=\\\"vm.statusByProduct.filters.brands\\\" url=\\\"vm.brandsUrl\\\">\\n</nd-paginated-dropdown></nd-filter><nd-filter icon=\\\"icon-folder-multiple-outline\\\" \\nlabel=\\\"INVENTORY_DASHBOARD.CATEGORY\\\" name=\\\"FILTER_CATEGORY\\\" class=\\\"mb-15\\\"><nd-paginated-dropdown \\nicon=\\\"icon-folder-multiple-outline\\\" multiple=\\\"true\\\" search=\\\"true\\\" select-placeholder=\\\"INVENTORY_DASHBOARD.CATEGORY\\\" \\nselected-items=\\\"vm.statusByProduct.filters.categories\\\" url=\\\"vm.categoriesUrl\\\"></nd-paginated-dropdown></nd-filter>\\n<nd-filter icon=\\\"icon-folder-outline\\\" label=\\\"INVENTORY_DASHBOARD.SUBCATEGORY\\\" name=\\\"FILTER_SUBCATEGORY\\\" class=\\\"mb-15\\\">\\n<nd-paginated-dropdown icon=\\\"icon-folder-outline\\\" multiple=\\\"true\\\" search=\\\"true\\\" \\nselect-placeholder=\\\"INVENTORY_DASHBOARD.SUBCATEGORY\\\" selected-items=\\\"vm.statusByProduct.filters.subcategories\\\" \\nurl=\\\"vm.brandsUrl\\\"></nd-paginated-dropdown></nd-filter><nd-filter icon=\\\"icon-weather-sunny\\\" \\nlabel=\\\"INVENTORY_DASHBOARD.SEASON\\\" name=\\\"FILTER_SEASON\\\" class=\\\"mb-15\\\"><nd-paginated-dropdown icon=\\\"icon-weather-sunny\\\" \\nmultiple=\\\"true\\\" search=\\\"true\\\" select-placeholder=\\\"INVENTORY_DASHBOARD.SEASON\\\" \\nselected-items=\\\"vm.statusByProduct.filters.seasons\\\" url=\\\"vm.seasonsUrl\\\"></nd-paginated-dropdown></nd-filter><nd-filter \\nicon=\\\"icon-weather-sunny\\\" label=\\\"SALE.COLLECTION\\\" name=\\\"FILTER_COLLECTION\\\" class=\\\"mb-15\\\"><nd-paginated-dropdown \\nicon=\\\"icon-weather-sunny\\\" multiple=\\\"true\\\" search=\\\"true\\\" select-placeholder=\\\"SALE.COLLECTION\\\" \\nselected-items=\\\"vm.statusByProduct.filters.collections\\\" url=\\\"vm.collectionsUrl\\\"></nd-paginated-dropdown></nd-filter>\\n</nd-filter-selector></md-sidenav><div flex layout=\\\"column\\\"><div class=\\\"toolbar no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"w-10\\\"></span><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.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 w-200 ml-10\\\" 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.selectedStatus.search\\\" ng-model-options=\\\"{debounce:500}\\\" \\nplaceholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><span flex>\\n</span><div flex ng-if=\\\"vm.isWarehouseView()\\\"></div><span class=\\\"secondary-text ml-10\\\" \\nng-if=\\\"vm.keptSelectionArray.length\\\">{{\\'PRODUCTS.N_PRODUCTS_SELECTED\\' | translate: {n: vm.keptSelectionArray.length} }}\\n</span><md-button aria-label=\\\"Expand \\\" class=\\\"md-icon-button mr-16\\\" ng-click=\\\"vm.expandAll()\\\" \\nng-if=\\\"vm.isProductView()\\\"><md-tooltip md-direction=\\\"bottom\\\">{{\\'GENERAL.EXPAND_ALL\\' | translate}}</md-tooltip><md-icon \\nclass=\\\"s24\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/arrow-expand-vertical.923beec7.svg\\\"></md-icon></md-button>\\n<md-button aria-label=\\\"Collapse\\\" class=\\\"md-icon-button\\\" ng-click=\\\"vm.collapseAll()\\\" ng-if=\\\"vm.isProductView()\\\">\\n<md-tooltip md-direction=\\\"bottom\\\">{{\\'GENERAL.COLLAPSE_ALL\\' | translate}}</md-tooltip><md-icon class=\\\"s24\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/arrow-collapse-vertical.05b2cad3.svg\\\"></md-icon></md-button><nd-tabs \\nselected=\\\"vm.view\\\" \\ntabs=\\\"[\\n              {name: 1, label: \\'REPLENISHMENT.VIEW_BY_PRODUCT\\'},\\n              {name: 2, label: \\'REPLENISHMENT.VIEW_BY_WAREHOUSE\\'}\\n            ]\\\">\\n</nd-tabs><md-menu class=\\\"mr-5\\\"><md-button aria-label=\\\"more\\\" class=\\\"md-icon-button\\\" data-test-id=\\\"open-menu-button\\\" \\nng-click=\\\"$mdMenu.open()\\\"><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.downloadCSV()\\\" 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 ng-class=\\\"{\\'ml-8\\': vm.exporting}\\\" translate=\\\"CUSTOMERS.EXPORT_CSV\\\">Export CSV</span></div>\\n</md-button></md-menu-item></md-menu-content></md-menu></div><div class=\\\"full-width h-0\\\"><md-progress-linear \\nclass=\\\"loader md-primary\\\" md-mode=\\\"indeterminate\\\" ng-if=\\\"vm.loading\\\"></md-progress-linear></div><md-content \\nclass=\\\"content uid-grid-container no-padding\\\" flex><div class=\\\"grid\\\" ng-if=\\\"vm.isProductView()\\\" style=\\\"height: 100%\\\" \\nui-grid=\\\"vm.gridOptionsByProduct\\\" ui-grid-auto-resize ui-grid-cellnav ui-grid-edit ui-grid-exporter ui-grid-exporter \\nui-grid-grouping ui-grid-move-columns ui-grid-pagination ui-grid-pinning ui-grid-resize-columns ui-grid-row-edit \\nui-grid-save-state ui-grid-selection></div><div class=\\\"grid\\\" ng-if=\\\"vm.isWarehouseView()\\\" style=\\\"height: 100%\\\" \\nui-grid=\\\"vm.gridOptionsByWarehouse\\\" ui-grid-auto-resize ui-grid-cellnav ui-grid-edit ui-grid-exporter ui-grid-exporter \\nui-grid-move-columns ui-grid-pagination ui-grid-pinning ui-grid-resize-columns ui-grid-row-edit ui-grid-save-state>\\n</div></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/public-registration/views/contract-management/contract-management.html\",\"<div id=\\\"contract-management\\\" layout=\\\"column\\\"><div layout=\\\"column\\\" layout-gt-md=\\\"row\\\" layout-gap=\\\"16px\\\"><md-card \\nflex=\\\"100\\\" flex-gt-md=\\\"50\\\"><md-card-title layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-card-title-text><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\">{{ \\'PUBLIC_REGISTRATION.CONTRACTS\\' | translate }}</span> \\n<span flex></span><md-button class=\\\"md-primary md-raised h-40 m-0\\\" ng-click=\\\"vm.openCreateDialog()\\\">\\n{{ \\'PUBLIC_REGISTRATION.ADD_CONTRACT\\' | translate }}</md-button></div></md-card-title-text></md-card-title>\\n<md-card-content class=\\\"no-padding\\\"><div class=\\\"secondary-text mb-8\\\" ng-if=\\\"vm.error\\\">{{ vm.error | translate }}</div>\\n<md-progress-linear ng-if=\\\"vm.isContractActionLoading\\\" md-mode=\\\"indeterminate\\\" class=\\\"md-primary mb-8\\\">\\n</md-progress-linear><div ui-grid=\\\"vm.contractsGridOptions\\\" ui-grid-pagination ui-grid-resize-columns \\nui-grid-auto-resize class=\\\"grid\\\" style=\\\"height: 420px\\\"></div></md-card-content></md-card><md-card flex=\\\"100\\\" \\nflex-gt-md=\\\"50\\\"><md-card-title><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\">\\n{{ \\'PUBLIC_REGISTRATION.LINKED_LOCATIONS\\' | translate }}</span> <span flex></span><md-button \\nclass=\\\"md-primary md-raised h-40 m-0\\\" ng-click=\\\"vm.openAssignDialog()\\\"><md-icon md-font-icon=\\\"icon-link-variant\\\" \\nclass=\\\"mr-4\\\"></md-icon>{{ \\'PUBLIC_REGISTRATION.LINK_STORE\\' | translate }}</md-button></div></md-card-title-text>\\n</md-card-title><md-card-content class=\\\"no-padding\\\"><div ng-if=\\\"!vm.assignedLocations.length\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\" class=\\\"py-32 no-linked-locations-placeholder\\\"><md-icon md-font-icon=\\\"icon-store-off\\\" \\nclass=\\\"s-48 mb-16 secondary-text\\\"></md-icon><p class=\\\"secondary-text m-0 text-center\\\">\\n{{ \\'PUBLIC_REGISTRATION.NO_LINKED_LOCATIONS\\' | translate }}</p></div><div ui-grid=\\\"vm.assignedLocationsGridOptions\\\" \\nui-grid-pagination ui-grid-resize-columns ui-grid-auto-resize class=\\\"grid\\\" style=\\\"height: 420px\\\" \\nng-if=\\\"vm.assignedLocations.length\\\"></div></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/public-registration/views/location-registration/location-registration.html\",\"<div id=\\\"location-registration\\\" layout=\\\"column\\\"><md-card ng-if=\\\"vm.settings\\\"><md-card-title><md-card-title-text><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\">{{ \\'PUBLIC_REGISTRATION.REGISTRATION_FORM\\' | translate }}\\n</span><nd-new-feature-badge class=\\\"ml-8\\\" id=\\\"PUBLIC_REGISTRATION_CUSTOMER_LINKS\\\" remove-margin=\\\"true\\\">\\n</nd-new-feature-badge></div></md-card-title-text></md-card-title><md-card-content><p \\nclass=\\\"secondary-text mt-0 mb-16\\\">{{ \\'PUBLIC_REGISTRATION.REGISTRATION_FORM_DESCRIPTION\\' | translate }}</p>\\n<nd-information-panel variation=\\\"info\\\" ng-if=\\\"!vm.hasActiveContractVersion()\\\"><information-title><span>\\n{{ \\'PUBLIC_REGISTRATION.NO_LINKED_CONTRACT_TITLE\\' | translate }}</span></information-title><information-content><span>\\n{{ \\'PUBLIC_REGISTRATION.NO_LINKED_CONTRACT_MESSAGE\\' | translate }}</span></information-content><action><md-button \\nclass=\\\"md-primary md-raised m-0\\\" ng-click=\\\"vm.goToContractsConfiguration()\\\">\\n{{ \\'PUBLIC_REGISTRATION.GO_TO_CONTRACTS\\' | translate }}</md-button></action></nd-information-panel><div \\nlayout=\\\"column\\\" layout-gt-md=\\\"row\\\" layout-gap=\\\"24px\\\"><div flex=\\\"100\\\" flex-gt-md=\\\"65\\\" \\nng-if=\\\"vm.hasActiveContractVersion()\\\"><div class=\\\"mb-16\\\"><md-switch ng-model=\\\"vm.settings.registration_enabled\\\" \\nng-change=\\\"vm.toggleRegistrationEnabled()\\\" ng-disabled=\\\"vm.isSaving\\\" class=\\\"mt-0 mb-0\\\">\\n{{ \\'PUBLIC_REGISTRATION.REGISTRATION_ENABLED\\' | translate }}</md-switch></div><div class=\\\"did-you-know mb-16\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start start\\\"><md-icon md-font-icon=\\\"icon-link-variant\\\" class=\\\"blue-fg mr-8 mt-4\\\"></md-icon>\\n<div flex layout=\\\"column\\\"><span class=\\\"did-you-know-title\\\">{{ \\'PUBLIC_REGISTRATION.SHARE_CUSTOMER_LINK\\' | translate }}\\n</span><div class=\\\"did-you-know-message mt-8\\\" style=\\\"word-break: break-all\\\"><a ng-href=\\\"{{ vm.settings.public_url }}\\\" \\ntarget=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">{{ vm.settings.public_url }}</a></div></div></div></div><div \\nclass=\\\"did-you-know mb-16\\\"><div layout=\\\"row\\\" layout-align=\\\"start start\\\"><md-icon md-font-icon=\\\"icon-tablet-ipad\\\" \\nclass=\\\"blue-fg mr-8 mt-4\\\"></md-icon><div flex layout=\\\"column\\\"><span class=\\\"did-you-know-title\\\">\\n{{ \\'PUBLIC_REGISTRATION.INTERNAL_DEVICE_LINK\\' | translate }}</span><div class=\\\"did-you-know-message mt-8\\\" \\nstyle=\\\"word-break: break-all\\\"><a ng-href=\\\"{{ vm.settings.tablet_url }}\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">\\n{{ vm.settings.tablet_url }}</a></div></div></div></div></div><div flex=\\\"100\\\" flex-gt-md=\\\"35\\\" layout=\\\"column\\\" \\nlayout-align=\\\"start center\\\" class=\\\"location-registration-qr-column\\\" ng-if=\\\"vm.hasActiveContractVersion()\\\"><div \\nclass=\\\"secondary-text mb-8\\\">{{ \\'PUBLIC_REGISTRATION.UID\\' | translate }}: {{ vm.settings.registration_uid }}</div><img \\nng-if=\\\"vm.settings.qr_base64\\\" ng-src=\\\"{{ vm.settings.qr_base64 }}\\\" alt=\\\"Registration QR\\\" \\nclass=\\\"location-registration-qr-image\\\"></div></div></md-card-content></md-card><md-card ng-if=\\\"vm.error\\\">\\n<md-card-content><span class=\\\"secondary-text\\\">{{ vm.error | translate }}</span></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/public-registration/views/public-registration/public-registration.html\",\"<div id=\\\"public-registration\\\" layout=\\\"row\\\" layout-align=\\\"center start\\\"><md-card flex=\\\"100\\\" style=\\\"max-width: 760px\\\">\\n<md-card-title><md-card-title-text><div class=\\\"public-registration-header\\\"><div \\nclass=\\\"public-registration-logo-wrapper\\\" ng-if=\\\"vm.formConfig.company_logo_url\\\"><img \\nclass=\\\"public-registration-company-logo\\\" ng-src=\\\"{{ vm.formConfig.company_logo_url }}\\\" \\nalt=\\\"{{ vm.formConfig.company_name || (\\'PUBLIC_REGISTRATION.TITLE\\' | translate) }}\\\"></div><span \\nclass=\\\"h3 public-registration-title\\\">\\n{{ (vm.formConfig.company_name || (\\'PUBLIC_REGISTRATION.TITLE\\' | translate)) + \\' · \\' + (\\'PUBLIC_REGISTRATION.CUSTOMER_REGISTRATION\\' | translate) }}\\n</span></div></md-card-title-text><md-card-title-media><md-menu id=\\\"language-menu\\\" \\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.languages[vm.currentLanguage].flag}}.png\\\"></div></md-button>\\n<md-menu-content width=\\\"3\\\" id=\\\"language-menu-content\\\"><md-menu-item ng-repeat=\\\"(iso, lang) in vm.languages\\\"><md-button \\nng-click=\\\"vm.changeLanguage(lang.code)\\\" aria-label=\\\"{{lang.title}}\\\"><span layout=\\\"row\\\" layout-align=\\\"start center\\\"><img\\n class=\\\"flag\\\" ng-src=\\\"assets/images/flags/{{lang.flag}}.png\\\"> <span>{{lang.title}}</span></span></md-button>\\n</md-menu-item></md-menu-content></md-menu></md-card-title-media></md-card-title><md-card-content><form \\nname=\\\"publicRegistrationForm\\\" class=\\\"md-inline-form\\\" novalidate ng-submit=\\\"vm.submit(publicRegistrationForm)\\\" \\nng-if=\\\"vm.isReady && !vm.showSuccessCard\\\"><md-input-container class=\\\"md-block\\\"><label>\\n{{ \\'PUBLIC_REGISTRATION.EMAIL\\' | translate }}</label><input type=\\\"email\\\" ng-model=\\\"vm.formData.email\\\" required>\\n</md-input-container><md-input-container class=\\\"md-block\\\"><label>{{ \\'PUBLIC_REGISTRATION.FIRST_NAME\\' | translate }}\\n</label><input type=\\\"text\\\" ng-model=\\\"vm.formData.first_name\\\" required></md-input-container><md-input-container \\nclass=\\\"md-block\\\"><label>{{ \\'PUBLIC_REGISTRATION.LAST_NAME\\' | translate }}</label><input type=\\\"text\\\" \\nng-model=\\\"vm.formData.last_name\\\" required></md-input-container><md-input-container class=\\\"md-block\\\"><label>\\n{{ \\'PUBLIC_REGISTRATION.PHONE\\' | translate }}</label><input type=\\\"text\\\" ng-model=\\\"vm.formData.phone\\\">\\n</md-input-container><md-input-container class=\\\"md-block\\\"><label>{{ \\'PUBLIC_REGISTRATION.POSTAL_CODE\\' | translate }}\\n</label><input type=\\\"text\\\" ng-model=\\\"vm.formData.postal_code\\\"></md-input-container><div \\nclass=\\\"public-registration-honeypot\\\" aria-hidden=\\\"true\\\"><input type=\\\"text\\\" ng-model=\\\"vm.formData.website\\\" \\ntabindex=\\\"-1\\\" autocomplete=\\\"off\\\"></div><div class=\\\"mb-8\\\"><a href=\\\"\\\" class=\\\"md-primary-fg\\\" \\nng-click=\\\"vm.toggleContract(); $event.preventDefault()\\\">{{ \\'PUBLIC_REGISTRATION.READ_PRIVACY_CONTRACT\\' | translate }}\\n</a></div><div class=\\\"p-16 mb-12 border-radius-4 public-registration-contract-content\\\" ng-if=\\\"vm.showContract\\\"><div \\nng-bind-html=\\\"vm.formConfig.contract_html\\\"></div></div><div class=\\\"public-registration-consents\\\"><md-checkbox \\nng-model=\\\"vm.formData.contract_accepted\\\" required>{{ \\'PUBLIC_REGISTRATION.PRIVACY_CONTRACT_ACCEPTED\\' | translate }} *\\n</md-checkbox><div class=\\\"secondary-text mb-8\\\" \\nng-if=\\\"publicRegistrationForm.$submitted && !vm.formData.contract_accepted\\\">\\n{{ \\'PUBLIC_REGISTRATION.CONTRACT_ACCEPTED_REQUIRED\\' | translate }}</div><md-checkbox \\nng-model=\\\"vm.formData.marketing_accepted\\\">{{ \\'PUBLIC_REGISTRATION.MARKETING_ACCEPTED\\' | translate }}</md-checkbox>\\n</div><div class=\\\"mt-16 mb-16\\\"><div class=\\\"mb-8\\\">{{ \\'PUBLIC_REGISTRATION.SIGN_HERE\\' | translate }} *</div><canvas \\nid=\\\"public-registration-signature-canvas\\\" width=\\\"720\\\" height=\\\"180\\\" \\nstyle=\\\"width: 100%; border: 1px solid rgba(0,0,0,0.24); border-radius: 4px; touch-action: none\\\"></canvas><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\" class=\\\"mt-8\\\"><span class=\\\"secondary-text\\\" \\nng-if=\\\"publicRegistrationForm.$submitted && !vm.formData.signature_data\\\">\\n{{ \\'PUBLIC_REGISTRATION.SIGNATURE_REQUIRED\\' | translate }} </span><span flex></span><md-button type=\\\"button\\\" \\nng-click=\\\"vm.clearSignature()\\\">{{ \\'PUBLIC_REGISTRATION.CLEAR_SIGNATURE\\' | translate }}</md-button></div></div><div \\nid=\\\"public-registration-turnstile\\\" class=\\\"public-registration-turnstile-invisible\\\" \\nng-if=\\\"vm.formConfig.turnstile_site_key\\\"></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\" class=\\\"mt-16\\\"><md-button \\ntype=\\\"submit\\\" class=\\\"md-raised md-primary\\\" \\nng-disabled=\\\"publicRegistrationForm.$invalid || !vm.formData.contract_accepted || !vm.formData.signature_data\\\">\\n{{ \\'PUBLIC_REGISTRATION.SUBMIT\\' | translate }}</md-button></div><div class=\\\"mt-12\\\"><span class=\\\"secondary-text\\\" \\nng-if=\\\"vm.error\\\">{{ vm.error | translate }}</span></div></form><div ng-if=\\\"vm.showSuccessCard\\\" class=\\\"pv-24\\\"><md-card \\nclass=\\\"md-padding public-registration-success-card\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mb-12\\\">\\n<md-progress-circular md-mode=\\\"indeterminate\\\" md-diameter=\\\"28\\\"></md-progress-circular></div><div \\nclass=\\\"h3 mb-8 text-center\\\">{{ \\'PUBLIC_REGISTRATION.SUCCESS_TITLE\\' | translate }}</div><div \\nclass=\\\"secondary-text text-center\\\">{{ \\'PUBLIC_REGISTRATION.SUCCESS\\' | translate }}</div></md-card></div><div \\nng-if=\\\"!vm.isReady && vm.error\\\" class=\\\"secondary-text\\\">{{ vm.error | translate }}</div></md-card-content></md-card>\\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><nd-new-feature-badge id=\\\"GIFT_CARD_TOGGLE_VALIDITY\\\" 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><div class=\\\"full-width h-0\\\"><md-progress-linear \\nclass=\\\"loader md-primary\\\" md-mode=\\\"indeterminate\\\" ng-if=\\\"vm.loading\\\"></md-progress-linear></div><md-content \\nclass=\\\"content no-padding uid-grid-container\\\" 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-exporter class=\\\"grid\\\" style=\\\"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\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"cursor-pointer text-truncate\\\" \\nng-click=\\\"vm.nameClicked(popv)\\\">{{ ::popv.product_name }}</span></div></div><div><small>{{ popv.product_code }} - <a \\nclass=\\\"md-primary m-0\\\" href=\\\"#\\\" ng-click=\\\"vm.changeVariants(sale, popv)\\\" ng-disabled=\\\"popv.promotion\\\"><md-tooltip \\nmd-delay=\\\"1000\\\">{{\\'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.showSaleStoreCommentDialog(popv, $event)\\\" \\nng-if=\\\"vm.showSaleStoreCommentIcon(popv)\\\"><md-tooltip>{{\\'SALES.STORE_SALE_COMMENT_TOOLTIP\\' | translate}}</md-tooltip>\\n<md-icon md-font-icon=\\\"icon-comment-alert-outline\\\"></md-icon></md-button><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 \\nnd-ignore-barcode-inputs ng-blur=\\\"vm.discountChanged(sale, popv)\\\" \\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=\\\"text\\\"> <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.twoDecimals(popv.total || 0) | price}}\\\" type=\\\"number\\\"><div class=\\\"text-right cursor-pointer\\\" \\nlayout=\\\"column\\\" ng-click=\\\"vm.priceClicked(popv)\\\" ng-if=\\\"!popv.editingPrice\\\"><span>\\n{{ vm.twoDecimals(popv.total || 0) | price}}{{::vm.currencyCharacter}} </span><span class=\\\"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-menu \\nmd-position-mode=\\\"target-right target\\\"><md-button class=\\\"md-icon-button\\\" data-test-id=\\\"sale-button-line-actions\\\" \\nng-click=\\\"$mdMenu.open($event)\\\"><md-tooltip>{{\\'GENERAL.ACTIONS\\' | translate}}</md-tooltip><md-icon \\nmd-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button><md-menu-content class=\\\"md-menu-bar-menu md-dense\\\" width=\\\"4\\\">\\n<md-menu-item class=\\\"md-indent md-in-menu-bar\\\"><md-icon class=\\\"line-actions-menu-icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/view-stock.5f2d642c.svg\\\"></md-icon><md-button \\nng-click=\\\"vm.viewStock(popv, $event)\\\">{{\\'PRODUCT.STOCK\\' | translate}}</md-button></md-menu-item><md-menu-item \\nclass=\\\"md-indent md-in-menu-bar\\\" ng-if=\\\"!popv.seller && !popv.addingSeller && vm.showAssignSeller()\\\"><md-icon \\nclass=\\\"line-actions-menu-icon\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/account_link_circle.b79d4eb8.svg\\\">\\n</md-icon><md-button ng-click=\\\"vm.openSearchVendorDialog(popv)\\\">{{\\'SALES.ASSIGN_SELLER\\' | translate}}</md-button>\\n</md-menu-item><md-menu-item class=\\\"md-indent md-in-menu-bar\\\" ng-if=\\\"vm.showSplitLineButton(popv)\\\"><md-icon \\nclass=\\\"line-actions-menu-icon\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/arrow-left-bottom.03d6e652.svg\\\"></md-icon>\\n<md-button ng-click=\\\"vm.splitLine(sale, popv, $event)\\\">{{\\'SALES.SPLIT_INTO_NEW_LINE\\' | translate}}</md-button>\\n</md-menu-item><md-divider></md-divider><md-menu-item class=\\\"md-indent md-in-menu-bar\\\"><md-icon \\nmd-font-icon=\\\"icon-chevron-down\\\"></md-icon><md-button ng-click=\\\"vm.deletePosOrderProductVariant(sale, $index)\\\">\\n{{\\'SALES.REMOVE_ONE_UNIT\\' | translate}}</md-button></md-menu-item><md-menu-item \\nclass=\\\"md-indent md-in-menu-bar line-actions-menu-item-warn\\\"><md-icon class=\\\"line-actions-menu-icon-warn\\\" \\nmd-font-icon=\\\"icon-trash\\\"></md-icon><md-button class=\\\"md-warn\\\" \\nng-click=\\\"vm.deletePosOrderProductVariantFull(sale, $index)\\\">{{\\'SALES.REMOVE_FULL_PRODUCT\\' | translate}}</md-button>\\n</md-menu-item></md-menu-content></md-menu></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 class=\\\"button-content-centered\\\"><md-icon md-font-icon=\\\"icon-credit-card\\\" \\nng-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 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 class=\\\"button-content-centered\\\"><md-icon md-font-icon=\\\"icon-cash-multiple\\\">\\n</md-icon><span translate=\\\"SALES.PAY_CASH\\\">PAY BY CASH</span></div></md-button><md-button \\nclass=\\\"md-accent apply-balance-discount-button large\\\" flex hide-gt-md 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: vm.getMaxApplicableBalanceDiscount(sale), currency: vm.currencyCharacter}\\\"></span></div>\\n</md-button><md-button class=\\\"stroked md-warn large\\\" flex hide-gt-md ng-click=\\\"vm.applyOrRemoveBalanceDiscount(sale)\\\" \\nng-if=\\\"sale.balance_discount && sale.balance_discount > 0\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-percent\\\"></md-icon><span flex translate=\\\"SALES.REMOVE_BALANCE_DISCOUNT\\\"></span></div></md-button>\\n<md-button class=\\\"stroked large\\\" flex hide-gt-md ng-click=\\\"vm.applyCustomerDiscount(sale)\\\" \\nng-disabled=\\\"sale.customer_discount_applied\\\" ng-if=\\\"sale.customerAutocomplete.selectedItem.discount\\\"><div \\nng-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 class=\\\"button-content-centered\\\"><md-icon \\nmd-font-icon=\\\"icon-wallet-membership\\\"></md-icon><span translate=\\\"SALES.GENERATE_VOUCHER\\\">GENERATE VOUCHER</span></div>\\n</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 \\nclass=\\\"button-content-centered\\\"><md-icon \\nmd-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 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 class=\\\"button-content-centered\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/cash-refund.c7128c01.svg\\\"></md-icon><span \\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 class=\\\"button-content-centered\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/printer-pos-off-outline.7efcb550.svg\\\"></md-icon><span \\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 \\nclass=\\\"button-content-centered\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/printer-pos-outline.9f86b6d1.svg\\\"></md-icon><span \\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 class=\\\"button-content-centered\\\"><md-icon md-font-icon=\\\"icon-gift mr-5\\\"></md-icon><span \\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 \\nclass=\\\"button-content-centered\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/email-outline.a482d002.svg\\\">\\n</md-icon><span class=\\\"text-truncate\\\" translate=\\\"SALES.PAY_AND_EMAIL_TICKET\\\">Eco Ticket</span></div></md-button>\\n<md-button class=\\\"eco-button full-width large\\\" flex \\nng-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 class=\\\"button-content-centered\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/eco-gift-ticket.1759990e.svg\\\"></md-icon><span class=\\\"text-truncate\\\" \\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 class=\\\"button-content-centered\\\"><md-icon \\nmd-font-icon=\\\"icon-wallet-membership\\\"></md-icon><span translate=\\\"SALES.GENERATE_VOUCHER\\\">GENERATE VOUCHER</span></div>\\n</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 class=\\\"button-content-centered\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/cash-refund.c7128c01.svg\\\"></md-icon><span \\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 class=\\\"button-content-centered\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/credit-card-refund.61a4aba3.svg\\\"></md-icon><span \\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: vm.getMaxApplicableBalanceDiscount(sale), currency: vm.currencyCharacter}\\\"></span></div>\\n</md-button><md-button class=\\\"stroked md-warn m-0\\\" flex ng-click=\\\"vm.applyOrRemoveBalanceDiscount(sale)\\\" \\nng-if=\\\"sale.balance_discount && sale.balance_discount > 0\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-percent\\\"></md-icon><span flex translate=\\\"SALES.REMOVE_BALANCE_DISCOUNT\\\"></span></div></md-button>\\n</div></div><div class=\\\"scrollable\\\" flex flex-order-gt-sm=\\\"2\\\" flex-order-sm=\\\"1\\\" flex-order-xs=\\\"1\\\" ms-scroll \\nng-if=\\\"!vm.selectedRegister.is_closed\\\" ng-show=\\\"sale.currentView == vm.PAY_VIEW\\\"><div \\nng-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></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> <span flex>\\n</span><div layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nhas-permission=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerces.b2b_ecommerce.update\\\"><md-button\\n ng-click=\\\"vm.cancelChanges()\\\" class=\\\"m-0 stroked\\\" ng-disabled=\\\"vm.saveingB2bEcommerce\\\">\\n{{\\'GENERAL.CANCEL\\' | translate }}</md-button><md-button class=\\\"m-0 ml-8 md-primary md-raised\\\" \\nng-click=\\\"vm.saveB2bEcommerce()\\\" ng-disabled=\\\"!form.$valid || vm.saveingB2bEcommerce\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saveingB2bEcommerce\\\" md-diameter=\\\"24px\\\" class=\\\"mr-5\\\">\\n</md-progress-circular>{{\\'GENERAL.SAVE\\' | translate }}</div></md-button></div></div><div \\nclass=\\\"content ml-8 mb-8 mr-8\\\"><form name=\\\"form\\\" class=\\\"md-inline-form\\\" novalidate ng-submit=\\\"vm.saveB2bEcommerce()\\\">\\n<md-card class=\\\"mb-16\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"B2B_ECOMMERCE.DETAILS\\\">Details\\n</span></md-card-title-text></md-card-title><md-card-content><div layout=\\\"row\\\" layout-wrap><div class=\\\"pr-10\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block\\\"><label translate=\\\"B2B_ECOMMERCE.SLUG\\\"></label><md-icon \\nmd-font-icon=\\\"icon-web\\\" class=\\\"icon\\\"></md-icon><input type=\\\"text\\\" name=\\\"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></md-card-content></md-card><md-card \\nclass=\\\"mb-16\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"B2B_ECOMMERCE.MENU\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content><div layout=\\\"row\\\" layout-wrap><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"100\\\"><md-checkbox flex \\nng-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=\\\"50\\\"><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=\\\"50\\\" \\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=\\\"50\\\" \\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=\\\"50\\\" \\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></md-card-content></md-card><md-card class=\\\"mb-16\\\"><md-card-title>\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"B2B_ECOMMERCE.FILTERS\\\"></span></md-card-title-text></md-card-title>\\n<md-card-content><div layout=\\\"row\\\" layout-wrap><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"25\\\"><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></md-card-content></md-card><md-card \\nclass=\\\"mb-16\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"B2B_ECOMMERCE.PRODUCTS\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content><div layout=\\\"row\\\" layout-wrap><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"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></md-card-content>\\n</md-card><md-card class=\\\"mb-16\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"B2B_ECOMMERCE.STOCK\\\">\\n</span></md-card-title-text></md-card-title><md-card-content><div layout=\\\"column\\\"><div layout=\\\"row\\\" flex=\\\"100\\\" \\nlayout-wrap><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.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 no-errors-spacer\\\"><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 layout=\\\"row\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" style=\\\"gap: 4px\\\"><md-input-container \\nclass=\\\"md-block no-errors-spacer\\\" flex=\\\"25\\\"><label translate=\\\"B2B_ECOMMERCE.GLOBAL_LEAD_TIME\\\"></label><input \\nng-model=\\\"vm.b2bEcommerce.global_lead_time\\\" type=\\\"number\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n</md-input-container><md-input-container class=\\\"md-block no-errors-spacer\\\" flex=\\\"75\\\"><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></md-card-content></md-card><md-card class=\\\"mb-16\\\"><md-card-title>\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"B2B_ECOMMERCE.SALES\\\"></span></md-card-title-text></md-card-title>\\n<md-card-content><div layout=\\\"row\\\" layout-wrap><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container \\nclass=\\\"md-block mt-0\\\"><md-checkbox flex class=\\\"no-margin\\\" ng-model=\\\"vm.b2bEcommerce.minimum_order_enabled\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\"><div \\nlayout=\\\"column\\\">{{\\'B2B_ECOMMERCE.MINIMUM_ORDER\\' | translate }} <span class=\\\"secondary-text\\\">\\n{{\\'B2B_ECOMMERCE.MINIMUM_ORDER_INFO\\' | translate }}</span></div></md-checkbox></md-input-container></div><div \\nclass=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" ng-if=\\\"vm.b2bEcommerce.minimum_order_enabled\\\"><md-input-container \\nclass=\\\"md-block m-0\\\"><label>\\n{{\\'B2B_ECOMMERCE.MINIMUM_ORDER_AMOUNT\\' | translate: {currency: vm.getPricingTierCurrency()} }}</label><input \\ntype=\\\"number\\\" min=\\\"0\\\" step=\\\"0.01\\\" name=\\\"minimum_order_amount\\\" ng-model=\\\"vm.b2bEcommerce.minimum_order_amount\\\" \\nng-required=\\\"vm.b2bEcommerce.minimum_order_enabled\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\"><div \\nng-messages=\\\"form.minimum_order_amount.$error\\\" ng-show=\\\"form.minimum_order_amount.$touched\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"B2B_ECOMMERCE.FIELD_REQUIRED\\\"></span></div></div></md-input-container></div>\\n</div></md-card-content></md-card><md-card class=\\\"mb-16\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"B2B_ECOMMERCE.CONTACT_FIELDS\\\"></span></md-card-title-text></md-card-title><md-card-content><div \\nlayout=\\\"row\\\" layout-wrap><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container \\nclass=\\\"md-block no-errors-spacer\\\"><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 \\nclass=\\\"md-block no-errors-spacer\\\"><label>{{\\'B2B_ECOMMERCE.FOOTER_MAIL\\' | translate}}</label><md-icon \\nmd-font-icon=\\\"icon-email\\\" class=\\\"icon\\\"></md-icon><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 \\nclass=\\\"md-block no-errors-spacer\\\"><label>Instagram</label><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/instagram.e5f5d20a.svg\\\" class=\\\"icon\\\"></md-icon><input type=\\\"url\\\" \\nname=\\\"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 no-errors-spacer\\\"><label>Facebook</label><md-icon \\nmd-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/facebook.fedb3809.svg\\\" class=\\\"icon\\\"></md-icon><input \\ntype=\\\"url\\\" name=\\\"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 no-errors-spacer\\\"><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 no-errors-spacer\\\"><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></md-card-content>\\n</md-card><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 || vm.saveingB2bEcommerce\\\" type=\\\"submit\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saveingB2bEcommerce\\\" md-diameter=\\\"24px\\\" \\nclass=\\\"mr-5\\\"></md-progress-circular>{{\\'GENERAL.SAVE\\' | translate }}</div></md-button></div></form></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/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-item><md-button \\naction ng-click=\\\"vm.createCancellationInvoice()\\\" translate=\\\"INVOICE.CREATE_CANCELLATION_INVOICE\\\"></md-button>\\n</md-menu-item></md-menu-content></md-menu></md-menu-item><md-divider \\nng-if=\\\"!vm.invoice.is_closed || vm.isValidKubiBaiInvoice()\\\"></md-divider><md-menu-item \\nhas-permission=\\\"accounting.invoices.delete\\\" ng-if=\\\"!vm.invoice.is_closed\\\"><md-button class=\\\"md-warn\\\" \\nng-click=\\\"vm.delete()\\\" ng-disabled=\\\"!vm.canBeDeleted()\\\"><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/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/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/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\\\" custom-fields=\\\"vm.customFields\\\" \\ncallback=\\\"vm.download(fileType, dateRange, customFields)\\\" 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\\\" custom-fields=\\\"vm.customFields\\\" \\ncallback=\\\"vm.download(fileType, dateRange, customFields)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.TICKETS_DESCRIPTION\\'\\\"></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><div flex=\\\"50\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-store\\\" class=\\\"icon mr-10\\\"></md-icon><md-autocomplete flex \\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></div>\\n<md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><label>\\n{{\\'CONTACTS.COUNTRY\\' | translate }}</label><md-icon md-font-icon=\\\"icon-flag-variant\\\" class=\\\"icon\\\"></md-icon><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><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"CONTACTS.INVOICE_EMAIL\\\"></label><md-icon md-font-icon=\\\"icon-email\\\" class=\\\"icon\\\"></md-icon><input \\nng-model=\\\"vm.contact.invoice_email\\\" type=\\\"email\\\" data-test-id=\\\"addcontact-billing-invoice-email\\\" \\nhas-permission-else-disable=\\\"contacts.contact.billing.update\\\"> <small class=\\\"secondary-text\\\">\\n{{\\'CONTACTS.INVOICE_EMAIL_HINT\\' | translate}}</small></md-input-container></div></form></md-card-content></md-card>\\n</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><md-card class=\\\"w-100p mt-16\\\" ng-if=\\\"vm.latestPrivacyContractSignature\\\"><md-card-title>\\n<md-card-title-text><span class=\\\"h3\\\">{{ \\'CONTACTS.LATEST_PRIVACY_CONTRACT_SIGNATURE\\' | translate }}</span>\\n</md-card-title-text></md-card-title><md-card-content><div><strong>\\n{{ \\'CONTACTS.SIGNED_CONTRACT_VERSION\\' | translate }}:</strong>\\n #{{ vm.latestPrivacyContractSignature.contract_version_id }} · {{ vm.latestPrivacyContractSignature.contract_language }} v{{ vm.latestPrivacyContractSignature.contract_version_number }}\\n</div><div class=\\\"mt-8\\\"><strong>{{ \\'CONTACTS.SIGNED_AT\\' | translate }}:</strong>\\n {{ vm.latestPrivacyContractSignature.accepted_at | date:\\'dd/MM/yyyy HH:mm\\' }}</div></md-card-content></md-card></div>\\n</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.mutable_fields.payment_status == vm.INVOICE_PAYMENT_STATUSES.PAYMENT_STATUS_PENDING\\\" \\nclass=\\\"text-boxed red\\\" translate=\\\"INVOICE.PENDING\\\"></span> <span \\nng-if=\\\"invoice.mutable_fields.payment_status == vm.INVOICE_PAYMENT_STATUSES.PAYMENT_STATUS_PAID\\\" \\nclass=\\\"text-boxed green\\\" translate=\\\"INVOICE.PAID\\\"></span></td></tr></tbody></table></div><div \\nclass=\\\"simple-table-container\\\" flex=\\\"50\\\"><table class=\\\"dataTable row-border hover\\\" flex><thead><tr class=\\\"red-50-bg\\\">\\n<th colspan=\\\"3\\\"><span class=\\\"text-left text-bold red-900-fg\\\" translate=\\\"CONTACTS.RETURN_INVOICES\\\"></span></th><th><span\\n class=\\\"text-right red-900-fg\\\">{{vm.totalReturnInvoices | price}} {{session.company.currency}}</span></th></tr><tr><th \\nclass=\\\"text-left\\\" translate=\\\"INVOICES.SERIAL_NUMBER_TYPE\\\"></th><th class=\\\"text-left\\\" translate=\\\"INVOICES.BILLING_DATE\\\">\\n</th><th class=\\\"text-right\\\" translate=\\\"INVOICES.TOTAL_INCL_TAX\\\"></th><th class=\\\"text-right\\\" \\ntranslate=\\\"INVOICES.PAYMENT\\\"></th></tr></thead><tbody><tr ng-repeat=\\\"invoice in vm.returnInvoices\\\"><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></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/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/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/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=\\\"20\\\"><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=\\\"20\\\"><ms-widget-front layout=\\\"column\\\"><span \\nclass=\\\"title\\\">{{\\'SITES.LAST_PRODUCT_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\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" \\nflex-gt-md=\\\"20\\\"><ms-widget-front layout=\\\"column\\\"><span class=\\\"title\\\">{{\\'SITES.LAST_STOCK_SYNC\\' |translate}}</span><div \\nclass=\\\"value\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\"><div layout=\\\"column\\\" class=\\\"full-width\\\" \\nlayout-align=\\\"end start\\\" flex><div class=\\\"hint-value\\\">{{vm.siteCopy.last_stock_sync | date:\\'d-M-yyyy\\'}}</div>\\n{{vm.siteCopy.last_stock_sync | date:\\'H:mm:ss\\'}}</div></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=\\\"20\\\"><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=\\\"20\\\"><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=\\\"20\\\" \\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=\\\"20\\\" \\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=\\\"20\\\" \\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/operations.html\",\"<div id=\\\"site-operations\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\" flex><div class=\\\"center\\\" \\nlayout=\\\"column\\\" flex><div class=\\\"content-card\\\" layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"w-10\\\"></span><nd-filter-selector class=\\\"ml-10\\\" \\nfilter-storage-label=\\\"site-operations-filters\\\" on-changed=\\\"vm.reloadOperations()\\\"><nd-filter name=\\\"DATE_RANGE\\\" \\nlabel=\\\"SITE.DATE_RANGE\\\" icon=\\\"icon-calendar\\\"><nd-date-range-filter model=\\\"vm.status.filters.dateRange\\\" \\nselect-placeholder=\\\"SITE.SELECT_DATE_RANGE\\\" icon=\\\"icon-calendar\\\" show-template=\\\"true\\\" auto-confirm=\\\"false\\\">\\n</nd-date-range-filter></nd-filter><nd-filter name=\\\"OPERATION_TYPE\\\" label=\\\"SITE.OPERATION_TYPE\\\" \\nicon=\\\"icon-swap-horizontal\\\"><nd-paginated-dropdown items=\\\"vm.operationTypes\\\" \\nselected-items=\\\"vm.status.filters.operation_type\\\" select-placeholder=\\\"SITE.OPERATION_TYPE\\\" search=\\\"true\\\" \\nmultiple=\\\"true\\\" icon=\\\"icon-swap-horizontal\\\"></nd-paginated-dropdown></nd-filter><nd-filter name=\\\"STATUSES\\\" \\nlabel=\\\"SITE.OPERATION_STATUS\\\" icon=\\\"icon-check-circle\\\"><nd-paginated-dropdown items=\\\"vm.statuses\\\" \\nselected-items=\\\"vm.status.filters.statuses\\\" select-placeholder=\\\"SITE.OPERATION_STATUS\\\" search=\\\"true\\\" multiple=\\\"true\\\" \\nicon=\\\"icon-check-circle\\\"></nd-paginated-dropdown></nd-filter></nd-filter-selector><span flex></span></div><md-content \\nclass=\\\"content no-padding\\\" flex layout=\\\"column\\\"><nd-handler-events-list status=\\\"vm.status\\\" list-config=\\\"vm.listConfig\\\" \\nlayout-fill></nd-handler-events-list></md-content></div></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/ecommerce/views/site/tabs/vouchers.html\",\"<md-card id=\\\"site-vouchers\\\" class=\\\"content-card\\\" layout=\\\"row\\\" layout-fill flex><div layout=\\\"column\\\" flex><div \\nlayout=\\\"row\\\" flex><md-content class=\\\"content no-padding\\\" flex><nd-vouchers-list ng-if=\\\"vm.isVouchersEnabled\\\" \\nsite-id=\\\"vm.site.id\\\"></nd-vouchers-list></md-content></div></div></md-card>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/handler-events/event-detail/event-detail.html\",\"<nd-event-detail loading=\\\"vm.loading\\\" error=\\\"vm.error\\\" event=\\\"vm.event\\\" go-back=\\\"vm.goBack()\\\" \\nformatted-status=\\\"vm.formattedStatus\\\" has-error=\\\"vm.hasError\\\" translations=\\\"vm.translations\\\"><nd-event-detail-fields>\\n<div layout=\\\"column\\\"><div layout=\\\"row\\\" layout-wrap><md-input-container flex=\\\"50\\\" flex-xs=\\\"100\\\"><label>\\n{{\\'HANDLER_EVENTS.EVENT_ID\\' | translate}}</label><input type=\\\"text\\\" ng-model=\\\"vm.event.id\\\" ng-disabled=\\\"true\\\" \\nstyle=\\\"font-family: monospace\\\"></md-input-container><md-input-container flex=\\\"50\\\" flex-xs=\\\"100\\\"><label>\\n{{\\'HANDLER_EVENTS.OPERATION_TYPE\\' | translate}}</label><input type=\\\"text\\\" ng-model=\\\"vm.formattedOperationType\\\" \\nng-disabled=\\\"true\\\"></md-input-container></div><div layout=\\\"row\\\" layout-wrap><md-input-container flex=\\\"50\\\" \\nflex-xs=\\\"100\\\"><label>{{\\'HANDLER_EVENTS.START_PROCESSING_AT\\' | translate}}</label><input type=\\\"text\\\" \\nng-model=\\\"vm.formattedStartProcessingAt\\\" ng-disabled=\\\"true\\\"></md-input-container><md-input-container flex=\\\"50\\\" \\nflex-xs=\\\"100\\\"><label>{{\\'HANDLER_EVENTS.PROCESSED_AT\\' | translate}}</label><input type=\\\"text\\\" \\nng-model=\\\"vm.formattedProcessedAt\\\" ng-disabled=\\\"true\\\"></md-input-container></div><div layout=\\\"row\\\" layout-wrap>\\n<md-input-container flex=\\\"50\\\" flex-xs=\\\"100\\\"><label>{{\\'HANDLER_EVENTS.STATUS\\' | translate}}</label><input type=\\\"text\\\" \\nng-model=\\\"vm.formattedStatus\\\" ng-disabled=\\\"true\\\"></md-input-container><md-input-container flex=\\\"50\\\" flex-xs=\\\"100\\\">\\n<label>{{\\'HANDLER_EVENTS.RETRIES\\' | translate}}</label><input type=\\\"text\\\" ng-model=\\\"vm.formattedRetries\\\" \\nng-disabled=\\\"true\\\"></md-input-container></div></div></nd-event-detail-fields><nd-event-detail-extra><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"mt-16\\\" ng-if=\\\"vm.canShowMarkAsPendingButton()\\\"><md-button \\nclass=\\\"md-raised md-primary\\\" ng-click=\\\"vm.markAsPending()\\\" ng-disabled=\\\"vm.markAsPendingLoading\\\">\\n{{\\'HANDLER_EVENTS.MARK_AS_PENDING\\' | translate}}</md-button></div></nd-event-detail-extra></nd-event-detail>\");\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/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/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\\\" ng-if=\\\"!vm.isCategory\\\"><md-icon \\nclass=\\\"icon icon-clipboard-outline name font-size-24\\\"></md-icon><label translate=\\\"CONFIGURATION.VARIANT_CATEGORY\\\">\\nVariant category</label><md-select flex class=\\\"md-block\\\" ng-model=\\\"vm.selectedId\\\" ng-class=\\\"{\\'required\\': !vm.fixed}\\\" \\nng-disabled=\\\"vm.fixed\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose()\\\" required><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\\\" ng-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><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><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.getVerifactuSerialNumberTypes() | 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.getVerifactuSerialNumberTypes() | 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.getVerifactuSerialNumberTypes() | 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.getVerifactuSerialNumberTypes() | 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></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/developers.html\",\"<div id=\\\"developers\\\" layout=\\\"column\\\"><md-card><md-card-title><md-card-title-text><div class=\\\"h3\\\" \\ntranslate=\\\"DEVELOPERS.TOKEN_TITLE\\\"></div></md-card-title-text></md-card-title><md-card-content><div \\nclass=\\\"secondary-text mb-8\\\" translate=\\\"DEVELOPERS.TOKEN_DESCRIPTION\\\"></div><nd-information-panel variation=\\\"warning\\\">\\n<information-content>{{ \\\"DEVELOPERS.TOKEN_WARNING\\\" | translate }}</information-content></nd-information-panel>\\n<md-input-container class=\\\"md-block mb-0\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><input flex type=\\\"text\\\" \\nng-model=\\\"vm.hiddenToken\\\" readonly=\\\"readonly\\\"><md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.copyToken()\\\" \\nng-disabled=\\\"!vm.token\\\" aria-label=\\\"Copy token\\\"><md-icon md-font-icon=\\\"icon-content-copy\\\"></md-icon></md-button></div>\\n</md-input-container></md-card-content></md-card><md-card><md-card-title><md-card-title-text><div class=\\\"h3\\\" \\ntranslate=\\\"DEVELOPERS.DOCS_TITLE\\\"></div></md-card-title-text></md-card-title><md-card-content><div layout=\\\"column\\\" \\nlayout-gt-sm=\\\"row\\\"><md-card class=\\\"card-in-card\\\"><md-card-header><md-card-avatar><img class=\\\"md-user-avatar\\\" \\nsrc=\\\"/assets/images/swagger-logo.5c0198af.svg\\\"></md-card-avatar><md-card-header-text><span class=\\\"h3\\\" \\ntranslate=\\\"DEVELOPERS.SWAGGER\\\"></span> <span class=\\\"md-subhead\\\">{{\\'DEVELOPERS.SWAGGER_SUBTITLE\\' | translate}}</span>\\n</md-card-header-text></md-card-header><md-card-content><div class=\\\"mb-8\\\" translate=\\\"DEVELOPERS.SWAGGER_DESCRIPTION\\\">\\n</div></md-card-content><md-card-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-href=\\\"{{vm.swaggerUrl}}\\\" \\nclass=\\\"md-primary\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">{{\\'DEVELOPERS.GO_TO_SWAGGER\\' | translate}}</md-button>\\n</md-card-actions></md-card><md-card class=\\\"card-in-card\\\"><md-card-header><md-card-avatar><img class=\\\"md-user-avatar\\\" \\nsrc=\\\"/assets/images/redoc-logo.26a9db31.svg\\\"></md-card-avatar><md-card-header-text><span class=\\\"h3\\\" \\ntranslate=\\\"DEVELOPERS.REDOC\\\"></span> <span class=\\\"md-subhead\\\">{{\\'DEVELOPERS.REDOC_SUBTITLE\\' | translate}}</span>\\n</md-card-header-text></md-card-header><md-card-content><div class=\\\"mb-8\\\" translate=\\\"DEVELOPERS.REDOC_DESCRIPTION\\\">\\n</div></md-card-content><md-card-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-href=\\\"{{vm.redocUrl}}\\\" \\nclass=\\\"md-primary\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">{{\\'DEVELOPERS.GO_TO_REDOC\\' | translate}}</md-button>\\n</md-card-actions></md-card></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\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"mb-16\\\"><span class=\\\"h3\\\" translate=\\\"CONFIGURATION.BALANCE_ACCUMULATION_RULES_TITLE\\\">\\n</span></div><md-switch ng-model=\\\"vm.configurationData.default_contact_balance_ratio_active\\\" ng_disabled=\\\"vm.saving\\\" \\nclass=\\\"mt-0\\\" ng-change=\\\"vm.saveLoyaltyConfiguration()\\\">{{\\'CONFIGURATION.ACTIVATE_BALANCE_ACCUMULATION\\' | translate}}\\n</md-switch><div layout=\\\"column\\\" class=\\\"mb-16\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mb-8\\\"><div \\nlayout=\\\"column\\\" class=\\\"mr-8\\\"><span>{{\\'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 \\nclass=\\\"did-you-know-title\\\">{{\\'GENERAL.EXAMPLE\\' | translate}} </span><span \\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 \\nclass=\\\"did-you-know-title\\\">{{\\'GENERAL.EXAMPLE\\' | translate}} </span><span \\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 class=\\\"loyalty-card\\\"><md-card-content class=\\\"md-padding\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"mb-16\\\"><span class=\\\"h3\\\" translate=\\\"CONFIGURATION.BALANCE_SPEND_RULES_TITLE\\\"></span>\\n<nd-new-feature-badge id=\\\"INVENTORY_LOYALTY_BALANCE_SPEND_RULES\\\"></nd-new-feature-badge></div><div layout=\\\"column\\\"><div\\n layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mb-8\\\"><div layout=\\\"column\\\" class=\\\"mr-8\\\"><span>\\n{{\\'CONFIGURATION.MINIMUM_BALANCE_SPEND_AMOUNT\\' | translate}}</span></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"balance-ratio-container\\\"><input type=\\\"number\\\" min=\\\"0\\\" name=\\\"minimum-balance-spend-amount\\\" \\nng-model=\\\"vm.configurationData.minimum_balance_spend_amount\\\" ng-disabled=\\\"vm.saving\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.loyalty.update\\\" ng-blur=\\\"vm.saveLoyaltyConfiguration()\\\" \\nstep=\\\"0.01\\\" class=\\\"text-right nd-input w-70\\\"> {{::vm.currencyCharacter}}</div></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"mb-8\\\"><div layout=\\\"column\\\" class=\\\"mr-8\\\"><span>\\n{{\\'CONFIGURATION.BALANCE_SPEND_MULTIPLE\\' | translate}}</span></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"balance-ratio-container\\\"><input type=\\\"number\\\" min=\\\"0\\\" name=\\\"balance-spend-multiple\\\" \\nng-model=\\\"vm.configurationData.balance_spend_multiple\\\" ng-disabled=\\\"vm.saving\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.loyalty.update\\\" ng-blur=\\\"vm.saveLoyaltyConfiguration()\\\" \\nstep=\\\"0.01\\\" class=\\\"text-right nd-input w-70\\\"> {{::vm.currencyCharacter}}</div></div></div></md-card-content></md-card>\\n<md-card class=\\\"loyalty-categories-card\\\"><md-card-title><md-card-title-text layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<span class=\\\"h3\\\" translate=\\\"CONFIGURATION.LOYALTY_BY_CATEGORIES\\\"></span><nd-new-feature-badge \\nid=\\\"INVENTORY_LOYALTY_BY_CATEGORIES\\\"></nd-new-feature-badge></md-card-title-text></md-card-title><md-card-content><div \\nlayout=\\\"row\\\" layout-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/picking-packing.html\",\"<div id=\\\"company-balance-config\\\" layout=\\\"column\\\"><div layout=\\\"column\\\" layout-gt-xs=\\\"row\\\"><div flex=\\\"66\\\" \\nlayout=\\\"column\\\"><md-card class=\\\"pt-10\\\"><md-card-content class=\\\"md-padding\\\"><md-switch \\nng-model=\\\"vm.configurationData.allow_orders_with_incidence\\\" ng_disabled=\\\"vm.saving\\\" class=\\\"mt-0\\\" \\nstyle=\\\"margin-bottom: 0px\\\" ng-change=\\\"vm.savePickingPackingConfiguration()\\\">\\n{{\\'CONFIGURATION.ALLOW_TO_PICK_ORDERS_WITH_INCIDENCE\\' | translate}}</md-switch><div class=\\\"secondary-text mb-16\\\" \\nstyle=\\\"margin-left: 44px\\\">{{\\'CONFIGURATION.PICKING_PACKING_ALLOW_ORDERS_WITH_INCIDENCE_HELP\\' | translate}}</div>\\n<md-switch ng-model=\\\"vm.configurationData.allow_orders_with_pending_fulfillment\\\" ng_disabled=\\\"vm.saving\\\" class=\\\"mt-0\\\" \\nstyle=\\\"margin-bottom: 0px\\\" ng-change=\\\"vm.savePickingPackingConfiguration()\\\">\\n{{\\'CONFIGURATION.ALLOW_TO_PICK_ORDERS_WITH_PENDING_FULFILLMENT\\' | translate}}</md-switch><div \\nclass=\\\"secondary-text mb-16\\\" style=\\\"margin-left: 44px\\\">\\n{{\\'CONFIGURATION.PICKING_PACKING_ALLOW_ORDERS_WITH_PENDING_FULFILLMENT_HELP\\' | translate}}</div><md-switch \\nng-model=\\\"vm.configurationData.allow_orders_with_warning\\\" ng_disabled=\\\"vm.saving\\\" class=\\\"mt-0\\\" \\nstyle=\\\"margin-bottom: 0px\\\" ng-change=\\\"vm.savePickingPackingConfiguration()\\\">\\n{{\\'CONFIGURATION.ALLOW_TO_PICK_ORDERS_WITH_WARNING\\' | translate}}</md-switch><div class=\\\"secondary-text mb-16\\\" \\nstyle=\\\"margin-left: 44px\\\">{{\\'CONFIGURATION.PICKING_PACKING_ALLOW_ORDERS_WITH_WARNING_HELP\\' | translate}}</div>\\n<md-switch ng-model=\\\"vm.configurationData.allow_unpaid_orders\\\" ng_disabled=\\\"vm.saving\\\" class=\\\"mt-0\\\" \\nstyle=\\\"margin-bottom: 0px\\\" ng-change=\\\"vm.savePickingPackingConfiguration()\\\">\\n{{\\'CONFIGURATION.ALLOW_TO_PICK_UNPAID_ORDERS\\' | translate}}</md-switch><div class=\\\"secondary-text mb-16\\\" \\nstyle=\\\"margin-left: 44px\\\">{{\\'CONFIGURATION.PICKING_PACKING_ALLOW_UNPAID_ORDERS_HELP\\' | translate}}</div><md-switch \\nng-model=\\\"vm.configurationData.display_sku_at_shipping_label\\\" ng_disabled=\\\"vm.saving\\\" class=\\\"mt-0\\\" \\nstyle=\\\"margin-bottom: 0px\\\" ng-change=\\\"vm.savePickingPackingConfiguration()\\\">\\n{{\\'CONFIGURATION.DISPLAY_SKU_AT_SHIPPING_LABEL\\' | translate}}</md-switch><div class=\\\"secondary-text\\\" \\nstyle=\\\"margin-left: 44px\\\">{{\\'CONFIGURATION.PICKING_PACKING_DISPLAY_SKU_HELP\\' | translate}}</div></md-card-content>\\n</md-card></div></div></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/support.html\",\"<div id=\\\"support-configuration\\\" layout=\\\"column\\\"><md-card><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"SUPPORT_CONFIGURATION.AGENT_LOGIN\\\"></span></md-card-title-text></md-card-title><md-card-content><div \\nlayout=\\\"column\\\"><span translate=\\\"SUPPORT_CONFIGURATION.DISCLAIMER\\\" class=\\\"mb-16\\\"></span> <span \\ntranslate=\\\"SUPPORT_CONFIGURATION.YOU_HAVE_NOT_GRANTED_ACCESS\\\" ng-if=\\\"!vm.temporaryAccountAccess\\\"></span>\\n<nd-information-panel variation=\\\"info\\\" ng-if=\\\"vm.temporaryAccountAccess\\\"><information-title><span \\ntranslate=\\\"SUPPORT_CONFIGURATION.ACCESS_GRANTED\\\"></span></information-title><information-content><span \\nng-bind-html=\\\"\\'SUPPORT_CONFIGURATION.ACCESS_GRANTED_MSG\\' | translate: {\\n                fullname: vm.temporaryAccountAccess.getGrantedFullName(),\\n                startDate: vm.temporaryAccountAccess.formatGrantedAt(),\\n                endDate: vm.temporaryAccountAccess.formatExpiresAt()\\n                }\\\">\\n</span></information-content><action><md-button has-permission=\\\"inventory.configuration.support.revoke_access\\\" \\nclass=\\\"md-primary md-raised\\\" ng-disabled=\\\"vm.saving\\\" ng-click=\\\"vm.revokeAccess()\\\"><span \\ntranslate=\\\"SUPPORT_CONFIGURATION.REVOKE_ACCESS\\\"></span></md-button></action></nd-information-panel><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"!vm.temporaryAccountAccess\\\"><md-input-container class=\\\"no-errors-spacer w-300\\\" \\nng-disabled=\\\"vm.saving\\\" has-permission=\\\"inventory.configuration.support.grant_access\\\"><label \\ntranslate=\\\"SUPPORT_CONFIGURATION.ACCESS_DURATION\\\"></label><md-select ng-model=\\\"vm.expiresAt\\\"><md-option \\nng-repeat=\\\"accessOption in vm.accessOptions\\\" ng-value=\\\"accessOption.value\\\">{{accessOption.label | translate}} <span \\nclass=\\\"secondary-text\\\">({{accessOption.value.toLocaleString()}})</span></md-option></md-select></md-input-container>\\n<div has-permission=\\\"inventory.configuration.support.grant_access\\\"><md-button class=\\\"md-raised md-primary\\\" \\nng-click=\\\"vm.grantAccess()\\\" ng-disabled=\\\"!vm.expiresAt || vm.saving\\\"><span \\ntranslate=\\\"SUPPORT_CONFIGURATION.GRANT_ACCESS\\\"></span></md-button></div></div></div></md-card-content></md-card></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\\\"><div layout=\\\"row\\\"><span class=\\\"title\\\">\\n{{\\'PRODUCT.RECEIVED\\' | translate}}</span><md-icon md-font-icon=\\\"icon-information-outline\\\" \\nclass=\\\"secondary-text ml-8 m-0\\\"><md-tooltip md-direction=\\\"top\\\">{{\\'PRODUCT.RECEIVED_TOOLTIP\\' | translate}}</md-tooltip>\\n</md-icon></div><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\\\"><div layout=\\\"row\\\"><span class=\\\"title\\\">{{\\'PRODUCT.STOCK_AVAILABLE\\' | translate}}</span>\\n<md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"secondary-text ml-8 m-0\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'PRODUCT.STOCK_AVAILABLE_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><div class=\\\"value\\\" flex=\\\"100\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start end\\\">{{vm.product.stock}}</div></ms-widget-front></ms-widget><ms-widget \\nclass=\\\"nd-widget\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\"><ms-widget-front layout=\\\"column\\\"><div \\nlayout=\\\"row\\\"><span class=\\\"title\\\">{{\\'PRODUCT.STOCK_IN_TRANSFER\\' | translate}}</span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"secondary-text 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\\\"><div layout=\\\"row\\\"><span class=\\\"title\\\">{{\\'PRODUCT.RETAIL_SALES\\' | translate}}</span>\\n<md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"secondary-text ml-8 m-0\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'PRODUCT.RETAIL_SALES_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><div class=\\\"value\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">{{vm.product.retail_sales}}</div></ms-widget-front></ms-widget><ms-widget class=\\\"nd-widget\\\" \\nlayout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\" has-permission=\\\"app.wholesale.sales\\\"><ms-widget-front \\nlayout=\\\"column\\\"><div layout=\\\"row\\\"><span class=\\\"title\\\">{{\\'PRODUCT.WHOLESALES\\' | translate}}</span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"secondary-text ml-8 m-0\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'PRODUCT.WHOLESALES_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><div class=\\\"value\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">{{vm.product.wholesale_sales}}</div></ms-widget-front></ms-widget></div><div layout=\\\"column\\\" \\nlayout-gt-sm=\\\"row\\\"><md-card flex=\\\"100\\\" flex-gt-sm=\\\"30\\\"><img ng-if=\\\"vm.product.cover\\\" ng-src=\\\"{{vm.product.cover}}\\\" \\nclass=\\\"md-card-image\\\" alt=\\\"Cover\\\"><md-card-content><div layout=\\\"column\\\"><div ng-if=\\\"vm.product.code\\\" layout=\\\"column\\\">\\n<small class=\\\"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/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.ADD_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\\\" 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/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/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 class=\\\"mb-16\\\" \\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\\\" \\nhas-feature-or-addon=\\\"app.inventory.pickings\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"WAREHOUSE.PICKING_PACKING_SETTINGS\\\"></span></md-card-title-text></md-card-title><md-card-content><form \\nname=\\\"pickingPackingForm\\\" layout=\\\"row\\\" layout-wrap><nd-paginated-dropdown flex=\\\"50\\\" additional-class=\\\"full-width\\\" \\nurl=\\\"vm.usersUrl\\\" selected-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/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/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/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/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 \\nng-if=\\\"vm.pulling && !vm.showingSignatureConfirmation\\\" class=\\\"md-accent mr-16\\\" md-diameter=\\\"40\\\"></md-progress-circular>\\n</div><div flex layout=\\\"column\\\"><div layout=\\\"row\\\"><h2 class=\\\"m-0\\\" \\nng-if=\\\"vm.pulling && !vm.isDevolution && !vm.showingSignatureConfirmation\\\" \\ntranslate=\\\"SALES.GATEWAY_PROCESSING_PAYMENT\\\"></h2><h2 class=\\\"m-0\\\" \\nng-if=\\\"vm.pulling && vm.isDevolution && !vm.showingSignatureConfirmation\\\" \\ntranslate=\\\"SALES.GATEWAY_PROCESSING_DEVOLUTION\\\"></h2><h2 class=\\\"m-0\\\" ng-if=\\\"vm.showingSignatureConfirmation\\\" \\ntranslate=\\\"SALES.SIGNATURE_VERIFICATION_TITLE\\\"></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 && !vm.showingSignatureConfirmation\\\"><h3 class=\\\"m-0\\\" \\ntranslate=\\\"SALES.GATEWAY_FOLLOW_TERMINAL_INSTRUCTIONS\\\"></h3></div><div layout=\\\"row\\\" \\nng-show=\\\"vm.showingSignatureConfirmation\\\"><h3 class=\\\"m-0\\\" translate=\\\"SALES.SIGNATURE_VERIFICATION_MESSAGE\\\"></h3></div>\\n<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 && !vm.showingSignatureConfirmation\\\">\\n<span flex></span><md-button ng-click=\\\"vm.close()\\\" class=\\\"md-primary\\\" ng-if=\\\"!vm.pulling\\\">\\n{{\\'SALES.CHANGE_PAYMENT_METHOD\\' | translate}}</md-button><md-button ng-click=\\\"vm.confirmCancel = true\\\" \\nng-disabled=\\\"vm.isDevolution\\\" ng-if=\\\"vm.pulling\\\" class=\\\"md-primary\\\">{{\\'GENERAL.CANCEL\\' | translate}}</md-button>\\n<md-button ng-click=\\\"vm.retry()\\\" class=\\\"md-primary\\\" ng-disabled=\\\"vm.pulling\\\">{{\\'GENERAL.RETRY\\' | translate}}\\n</md-button></div><div ng-if=\\\"vm.showingSignatureConfirmation\\\"><span flex></span><md-button \\nng-click=\\\"vm.denySignature()\\\" class=\\\"stroked\\\">{{\\'SALES.SIGNATURE_DENY\\' | translate}}</md-button><md-button \\nng-click=\\\"vm.acceptSignature()\\\" class=\\\"md-primary md-raised\\\">{{\\'SALES.SIGNATURE_ACCEPT\\' | translate}}</md-button></div>\\n<div ng-if=\\\"vm.confirmCancel && !vm.showingSignatureConfirmation\\\"><span translate=\\\"SALES.CANCEL_PAYMENT_MSG\\\"></span>\\n<md-button ng-click=\\\"vm.confirmCancel = false\\\" ng-disabled=\\\"vm.cancelling\\\" class=\\\"stroked\\\">{{\\'GENERAL.NO\\' | translate}}\\n</md-button><md-button ng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"vm.isDevolution || vm.cancelling\\\" ng-if=\\\"vm.pulling\\\" \\nclass=\\\"md-primary md-raised\\\">{{\\'SALES.CANCEL_PAYMENT_BUTTON\\' | translate}}</md-button></div></md-dialog-actions>\\n</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=\\\"{{ product.total | 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}\\\">{{ product.total | price}}{{::vm.currencyCharacter}}</h3><p\\n 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-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{{::posOrderProductVariant.getTotal(true, true, sale.is_v2) | price}} {{::vm.currencyCharacter}}</span></div><div \\nlayout=\\\"row\\\" ng-if=\\\"posOrderProductVariant.uid_stock_uid\\\" layout-align=\\\"start start\\\"><span \\nclass=\\\"ml-5 secondary-text long-text\\\">{{posOrderProductVariant.uid_stock_uid}}</span></div><ul class=\\\"m-0 pl-20\\\"><li \\nlayout=\\\"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{{ posOrderProductVariant.getTotal(true, true, sale.is_v2) | 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\\\"><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 && sale.isDevolution\\\" class=\\\"balance-discount\\\" translate=\\\"SALES.DISCOUNT_BY_BALANCE\\\" \\nflex></div><div ng-if=\\\"sale.balance_discount < 0 && !sale.isDevolution\\\" class=\\\"balance-discount\\\" \\ntranslate=\\\"SALES.PENDING_NEGATIVE_BALANCE\\\" flex></div><div class=\\\"text-right balance-discount\\\" flex>\\n{{-sale.balance_discount | price}} {{::vm.currencyCharacter}}</div></div></div><md-divider class=\\\"mv-8\\\"></md-divider>\\n</div><div ng-if=\\\"!sale.generateDevolutionCardClicked\\\"><div layout=\\\"row\\\" class=\\\"cursor-pointer\\\" \\nng-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-show=\\\"vm.showTotalTaxes(sale)\\\"><div class=\\\"h3\\\" flex translate=\\\"SALES.TOTAL_TAXES\\\">Total Taxes</div><div \\nclass=\\\"h3 text-right\\\" flex>{{sale.total_taxes | price}} {{::vm.currencyCharacter}}</div></div><md-divider class=\\\"mv-8\\\">\\n</md-divider><div layout=\\\"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 && sale.balance_discount != 0) ? \\'balance-discount\\' : \\'\\'\\\">\\n{{sale.total | price}} {{::vm.currencyCharacter}}</div></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><nd-button label=\\\"{{vm.translateSaveButton(vm.isNewSale)}}\\\" css-class=\\\"md-primary md-raised\\\" \\nloading=\\\"vm.saving\\\" disabled=\\\"!detailsForm.$dirty || detailsForm.$invalid\\\" \\npermission=\\\"wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\\" \\non-click=\\\"vm.actionSaveButton(vm.isNewSale)\\\"></nd-button></div></div></form></md-card-content></md-card><div \\nclass=\\\"did-you-know md-margin\\\" flex=\\\"30\\\"><div layout=\\\"column\\\" layout-align=\\\"start start\\\"><div layout=\\\"row\\\"><md-icon \\nclass=\\\"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/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/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/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.targetWarehouses\\\" 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-button class=\\\"md-raised\\\" flex ng-click=\\\"vm.openDateRangePicker()\\\">{{vm.getDateRangeLabel()}}</md-button><md-button \\nclass=\\\"md-icon-button\\\" ng-if=\\\"vm.createdDateRange.dateStart || vm.createdDateRange.dateEnd\\\" \\nng-click=\\\"vm.clearDateRangeFilters()\\\" aria-label=\\\"Clear date range\\\"><md-icon md-font-icon=\\\"icon-close\\\"></md-icon>\\n</md-button></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/invoices/dialogs/invoice-zip-errors/invoice-zip-errors-dialog.html\",\"<md-dialog layout=\\\"column\\\" class=\\\"invoice-zip-errors-dialog w-600\\\"><md-dialog-content><h2>\\n{{ \\'INVOICES.ZIP_ERRORS_TITLE\\' | translate }}</h2><span>\\n{{ \\'INVOICES.ZIP_ERRORS_WARNING\\' | translate: { count: vm.failedCount } }}</span><div><md-list \\nclass=\\\"invoice-errors-list\\\"><md-list-item class=\\\"md-2-line\\\" ng-repeat=\\\"error in vm.errors track by $index\\\"><div \\nclass=\\\"md-list-item-text\\\"><h3>{{ error.autocode }}</h3><p>{{ error.error_message }}</p></div></md-list-item></md-list>\\n</div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.close()\\\" \\nclass=\\\"md-primary stroked\\\">{{ \\'GENERAL.CLOSE\\' | translate }}</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/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/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-input-container \\nclass=\\\"custom-field-select-input-container full-width\\\" ng-if=\\\"field.type == FIELD_TYPE_SELECT\\\"><label \\ntranslate=\\\"{{field.title}}\\\"></label><md-select ng-model=\\\"field.selectChecked\\\" ng-if=\\\"field.type == FIELD_TYPE_SELECT\\\" \\nclass=\\\"mt-16\\\" flex><md-option ng-repeat=\\\"(key, value) in field.options\\\" ng-value=\\\"value\\\">{{key | translate}}\\n</md-option></md-select></md-input-container><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-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-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-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=\\\"CONTACTS.CLOSE_DIALOG\\\">\\n</span></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/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/orders/dialogs/bulk-change-warehouse/bulk-change-warehouse-dialog.html\",\"<md-dialog class=\\\"w-350\\\"><md-dialog-content ms-scroll class=\\\"md-padding pb-0\\\"><h2 class=\\\"md-title\\\">\\n{{\\'ORDERS.CHANGE_WAREHOUSE\\' | translate}}</h2><div>{{\\'ORDERS.SELECT_NEW_STOCK_WAREHOUSE\\' | translate}}</div>\\n<md-input-container class=\\\"md-icon-float md-block\\\"><label>{{\\'ORDER.STOCK_WAREHOUSE\\' | translate}}</label><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/store-outline.583690c9.svg\\\"></md-icon><md-select \\nng-model=\\\"vm.selectedWarehouse\\\" class=\\\"nd-input outlined white\\\"><md-option ng-repeat=\\\"warehouse in vm.warehouses\\\" \\nng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option></md-select></md-input-container></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\">\\n{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button ng-click=\\\"vm.accept()\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"!vm.selectedWarehouse\\\" aria-label=\\\"OK\\\">{{\\'GENERAL.OK\\' | translate}}</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/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><md-input-container class=\\\"md-icon-float\\\"><md-icon \\nmd-font-icon=\\\"icon-printer\\\"></md-icon><label translate=\\\"ORDERS.LABEL_PRINT_ORDER\\\"></label><md-select \\nng-model=\\\"vm.labelPrintOrder\\\" ng-change=\\\"vm.storeLabelPrintOrder()\\\" ng-disabled=\\\"vm.generating\\\"><md-option \\nng-repeat=\\\"orderOption in vm.labelPrintOrderOptions\\\" ng-value=\\\"orderOption.value\\\">{{orderOption.label | 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/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/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 &&\\n             (site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY || site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA)\\\">\\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 ng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\\\" \\ntranslate=\\\"SITE.REAUTHENTICATION_SHOPIFY_TITLE\\\"></span> <span \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA\\\" \\ntranslate=\\\"SITE.REAUTHENTICATION_MIRAVIA_TITLE\\\"></span></div><div class=\\\"secondary-text\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\\\" \\ntranslate=\\\"SITE.REAUTHENTICATION_SHOPIFY_MESSAGE\\\"></div><div class=\\\"secondary-text\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA\\\" \\ntranslate=\\\"SITE.REAUTHENTICATION_MIRAVIA_MESSAGE\\\"></div></div></div><div class=\\\"did-you-know green mb-20\\\" flex=\\\"100\\\" \\nng-if=\\\"isDateWithinLast10Minutes(site.authenticated_at) && site.reauthentication_required === false &&\\n          (site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY || site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA)\\\">\\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\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\\\">\\n{{\\'SITE.SHOPIFY_CONNECTED_SUCCESSFULLY\\' | translate}}</span> <span class=\\\"pl-5\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA\\\">\\n{{\\'SITE.MIRAVIA_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\\\">\\n{{ (site.enabled ? \\'SITE.CHANNEL_ENABLED\\' : \\'SITE.CHANNEL_DISABLED\\') | translate}}</md-switch></md-input-container>\\n<md-input-container class=\\\"md-icon-float md-block m-0 no-md-errors-spacer\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nng-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/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/ecommerce/views/site/tabs/operation-detail/operation-detail.html\",\"<nd-event-detail loading=\\\"vm.loading\\\" error=\\\"vm.error\\\" event=\\\"vm.operation\\\" go-back=\\\"vm.goBack()\\\" \\nformatted-status=\\\"vm.formattedStatus\\\" has-error=\\\"vm.hasError\\\" translations=\\\"vm.translations\\\"><nd-event-detail-fields>\\n<div layout=\\\"column\\\"><div layout=\\\"row\\\" layout-wrap><md-input-container flex=\\\"50\\\" flex-xs=\\\"100\\\"><label>\\n{{\\'SITE.OPERATION_ID\\' | translate}}</label><input type=\\\"text\\\" ng-model=\\\"vm.operation.id\\\" ng-disabled=\\\"true\\\" \\nstyle=\\\"font-family: monospace\\\"></md-input-container><md-input-container flex=\\\"50\\\" flex-xs=\\\"100\\\"><label>\\n{{\\'SITE.OPERATION_TYPE\\' | translate}}</label><input type=\\\"text\\\" ng-model=\\\"vm.formattedOperationType\\\" \\nng-disabled=\\\"true\\\"></md-input-container></div><div layout=\\\"row\\\" layout-wrap><md-input-container flex=\\\"50\\\" \\nflex-xs=\\\"100\\\"><label>{{\\'SITE.START_PROCESSING_AT\\' | translate}}</label><input type=\\\"text\\\" \\nng-model=\\\"vm.formattedStartProcessingAt\\\" ng-disabled=\\\"true\\\"></md-input-container><md-input-container flex=\\\"50\\\" \\nflex-xs=\\\"100\\\"><label>{{\\'SITE.PROCESSED_AT\\' | translate}}</label><input type=\\\"text\\\" ng-model=\\\"vm.formattedProcessedAt\\\" \\nng-disabled=\\\"true\\\"></md-input-container></div><div layout=\\\"row\\\" layout-wrap><md-input-container flex=\\\"50\\\" \\nflex-xs=\\\"100\\\"><label>{{\\'SITE.STATUS\\' | translate}}</label><input type=\\\"text\\\" ng-model=\\\"vm.formattedStatus\\\" \\nng-disabled=\\\"true\\\"></md-input-container><md-input-container flex=\\\"50\\\" flex-xs=\\\"100\\\"><label>\\n{{\\'SITE.RETRIES\\' | translate}}</label><input type=\\\"text\\\" ng-model=\\\"vm.formattedRetries\\\" ng-disabled=\\\"true\\\">\\n</md-input-container></div></div></nd-event-detail-fields><nd-event-detail-extra><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"mt-16\\\" ng-if=\\\"vm.canShowMarkAsPendingButton()\\\"><md-button \\nclass=\\\"md-raised md-primary\\\" ng-click=\\\"vm.markAsPending()\\\" ng-disabled=\\\"vm.markAsPendingLoading\\\">\\n{{\\'HANDLER_EVENTS.MARK_AS_PENDING\\' | translate}}</md-button></div></nd-event-detail-extra></nd-event-detail>\");\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><md-switch ng-model=\\\"vm.app.instance.approve_doc\\\" \\nclass=\\\"mt-0 mb-16\\\">{{ \\'APPS.HOLDED_APPROVE_DOC\\' | 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_invoices\\\" \\nclass=\\\"mt-0 mb-16\\\">{{ \\'APPS.SAGE_200_SYNC_SALES_INVOICES\\' | translate }}</md-switch><md-switch \\nng-model=\\\"vm.app.instance.sync_users\\\" class=\\\"mt-0 mb-16\\\">{{ \\'APPS.SAGE_200_SYNC_USERS\\' | translate }}</md-switch>\\n<md-switch ng-model=\\\"vm.app.instance.sync_cash_movements\\\" class=\\\"mt-0 mb-16\\\">\\n{{ \\'APPS.SAGE_200_SYNC_CASH_MOVEMENTS\\' | translate }}</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/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/verifactu/tabs/operation-detail/operation-detail.html\",\"<nd-event-detail loading=\\\"vm.loading\\\" error=\\\"vm.error\\\" event=\\\"vm.operation\\\" go-back=\\\"vm.goBack()\\\" \\nformatted-status=\\\"vm.formattedStatus\\\" has-error=\\\"vm.hasError\\\" translations=\\\"vm.translations\\\"><nd-event-detail-fields>\\n<div layout=\\\"column\\\"><div layout=\\\"row\\\" layout-wrap><md-input-container flex=\\\"33\\\" flex-xs=\\\"100\\\"><label>\\n{{\\'VERIFACTU.OPERATION_ID\\' | translate}}</label><input type=\\\"text\\\" ng-model=\\\"vm.operation.id\\\" ng-disabled=\\\"true\\\" \\nstyle=\\\"font-family: monospace\\\"></md-input-container><md-input-container flex=\\\"33\\\" flex-xs=\\\"100\\\" \\nstyle=\\\"position: relative\\\"><label>{{\\'VERIFACTU.INVOICE\\' | translate}}</label><input type=\\\"text\\\" \\nng-model=\\\"vm.operation.invoice.autocode\\\" ng-disabled=\\\"true\\\" \\nng-class=\\\"{\\'cursor-pointer\\': vm.operation.invoice.id, \\'blue-fg\\': vm.operation.invoice.id}\\\"><div \\nng-if=\\\"vm.operation.invoice.id\\\" ng-click=\\\"vm.goToInvoice(vm.operation.invoice.id)\\\" \\nstyle=\\\"position: absolute; top: 0; left: 0; right: 0; bottom: 0; cursor: pointer; z-index: 1\\\"></div>\\n</md-input-container><md-input-container flex=\\\"33\\\" flex-xs=\\\"100\\\"><label>{{\\'VERIFACTU.OPERATION_DATE\\' | translate}}\\n</label><input type=\\\"text\\\" ng-model=\\\"vm.formattedDate\\\" ng-disabled=\\\"true\\\"></md-input-container></div><div layout=\\\"row\\\" \\nlayout-wrap><md-input-container flex=\\\"50\\\" flex-xs=\\\"100\\\"><label>{{\\'VERIFACTU.OPERATION_TYPE\\' | translate}}</label><input\\n type=\\\"text\\\" ng-model=\\\"vm.formattedOperationType\\\" ng-disabled=\\\"true\\\"></md-input-container><md-input-container \\nflex=\\\"50\\\" flex-xs=\\\"100\\\"><label>{{\\'VERIFACTU.VERIFACTU_DOCUMENT_TYPE\\' | translate}}</label><input type=\\\"text\\\" \\nng-model=\\\"vm.formattedDocumentType\\\" ng-disabled=\\\"true\\\"></md-input-container></div><div layout=\\\"row\\\" layout-wrap>\\n<md-input-container flex=\\\"50\\\" flex-xs=\\\"100\\\"><label>{{\\'VERIFACTU.STATUS\\' | translate}}</label><input type=\\\"text\\\" \\nng-model=\\\"vm.formattedStatus\\\" ng-disabled=\\\"true\\\"></md-input-container><md-input-container flex=\\\"50\\\" flex-xs=\\\"100\\\">\\n<label>{{\\'VERIFACTU.RETRIES\\' | translate}}</label><input type=\\\"text\\\" ng-model=\\\"vm.formattedRetries\\\" ng-disabled=\\\"true\\\">\\n</md-input-container></div></div></nd-event-detail-fields><nd-event-detail-extra><div \\nng-if=\\\"vm.operation.verifactu_qr_image\\\" class=\\\"mb-16\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><a \\nhref=\\\"{{vm.operation.verifactu_qr_url}}\\\" target=\\\"_blank\\\" class=\\\"qr-link\\\" style=\\\"display: inline-block\\\"><img \\nclass=\\\"verifactu-qr-image\\\" ng-src=\\\"{{vm.operation.verifactu_qr_image}}\\\" alt=\\\"VeriFactu QR\\\"></a></div></div>\\n</nd-event-detail-extra></nd-event-detail>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/verifactu/tabs/operations/operations.html\",\"<div id=\\\"verifactu-operations\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\" flex><div class=\\\"center\\\" \\nlayout=\\\"column\\\" flex><div class=\\\"content-card\\\" layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"w-10\\\"></span><nd-filter-selector class=\\\"ml-10\\\" \\nfilter-storage-label=\\\"verifactu-operations-filters\\\" on-changed=\\\"vm.reloadOperations()\\\"><nd-filter name=\\\"DATE_RANGE\\\" \\nlabel=\\\"VERIFACTU.DATE_RANGE\\\" icon=\\\"icon-calendar\\\"><nd-date-range-filter model=\\\"vm.status.filters.dateRange\\\" \\nselect-placeholder=\\\"VERIFACTU.SELECT_DATE_RANGE\\\" icon=\\\"icon-calendar\\\" show-template=\\\"true\\\" auto-confirm=\\\"false\\\">\\n</nd-date-range-filter></nd-filter><nd-filter name=\\\"OPERATION_TYPE\\\" label=\\\"VERIFACTU.OPERATION_TYPE\\\" \\nicon=\\\"icon-swap-horizontal\\\"><nd-paginated-dropdown items=\\\"vm.operationTypes\\\" \\nselected-items=\\\"vm.status.filters.operation_type\\\" select-placeholder=\\\"VERIFACTU.OPERATION_TYPE\\\" search=\\\"true\\\" \\nmultiple=\\\"true\\\" icon=\\\"icon-swap-horizontal\\\"></nd-paginated-dropdown></nd-filter><nd-filter \\nname=\\\"VERIFACTU_DOCUMENT_TYPE\\\" label=\\\"VERIFACTU.VERIFACTU_DOCUMENT_TYPE\\\" icon=\\\"icon-file-document\\\">\\n<nd-paginated-dropdown items=\\\"vm.verifactuDocumentTypes\\\" selected-items=\\\"vm.status.filters.verifactu_document_type\\\" \\nselect-placeholder=\\\"VERIFACTU.VERIFACTU_DOCUMENT_TYPE\\\" search=\\\"true\\\" multiple=\\\"true\\\" icon=\\\"icon-file-document\\\">\\n</nd-paginated-dropdown></nd-filter><nd-filter name=\\\"STATUSES\\\" label=\\\"VERIFACTU.OPERATION_STATUS\\\" \\nicon=\\\"icon-check-circle\\\"><nd-paginated-dropdown items=\\\"vm.statuses\\\" selected-items=\\\"vm.status.filters.statuses\\\" \\nselect-placeholder=\\\"VERIFACTU.OPERATION_STATUS\\\" search=\\\"true\\\" multiple=\\\"true\\\" icon=\\\"icon-check-circle\\\">\\n</nd-paginated-dropdown></nd-filter></nd-filter-selector><span flex></span></div><md-content \\nclass=\\\"content no-padding\\\" flex layout=\\\"column\\\"><nd-handler-events-list status=\\\"vm.status\\\" list-config=\\\"vm.listConfig\\\" \\nlayout-fill></nd-handler-events-list></md-content></div></div></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/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-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/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/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/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/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/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/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/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/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-10\\\"><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><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.packingOrder.isPendingToPack() || vm.packingOrder.isInProgress() || (vm.packingOrder.isPendingToShip() && !vm.packingOrder.hasParcels())\\\">\\n<md-switch ng-model=\\\"vm.sendcloudOptions.printDeliveriesAutomatically\\\" ng-change=\\\"vm.storeShippingMethod()\\\" flex><span \\ntranslate=\\\"SCAN_AND_GO.PRINT_DELIVERIES\\\"></span></md-switch><md-icon md-font-icon=\\\"icon-information-outline\\\">\\n<md-tooltip>{{ \\'SCAN_AND_GO.PRINT_DELIVERIES_AND_LABELS\\' | translate}}</md-tooltip></md-icon></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-switch ng-model=\\\"vm.sendcloudOptions.printLabelsAutomatically\\\" \\nng-change=\\\"vm.storeShippingMethod()\\\" flex><span translate=\\\"SCAN_AND_GO.PRINT_LABELS_AUTOMATICALLY\\\"></span></md-switch>\\n<md-icon md-font-icon=\\\"icon-information-outline\\\"><md-tooltip>\\n{{ \\'SCAN_AND_GO.PRINT_LABELS_ONCE_ALL_SCANNED\\' | translate}}</md-tooltip></md-icon></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" \\nng-if=\\\"vm.packingOrder.isPendingToPack() || vm.packingOrder.isInProgress() || (vm.packingOrder.isPendingToShip() && !vm.packingOrder.hasParcels())\\\">\\n<md-switch ng-model=\\\"vm.sendcloudOptions.volumetricWeight\\\" ng-change=\\\"vm.storeShippingMethod()\\\" flex><span \\ntranslate=\\\"SCAN_AND_GO.USE_VOLUMETRIC_WEIGHT\\\"></span></md-switch><md-icon md-font-icon=\\\"icon-information-outline\\\">\\n<md-tooltip>{{ \\'SCAN_AND_GO.VOLUMETRIC_WEIGHT_HELP\\' | translate}}</md-tooltip></md-icon></div><div layout=\\\"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())\\\" \\nclass=\\\"full-width\\\" flex><div layout=\\\"row\\\" flex 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 class=\\\"mt-15 mb-15\\\"><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\\\" class=\\\"full-width pt-10\\\" \\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 stroked mt-15 full-width\\\" \\nng-disabled=\\\"vm.creatingShippingBox\\\" ng-click=\\\"vm.createShippingBox(true)\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<span layout=\\\"row\\\"><md-progress-circular ng-if=\\\"vm.creatingShippingBox\\\" md-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\">\\n</md-progress-circular><md-icon ng-if=\\\"!vm.creatingShippingBox\\\" md-font-icon=\\\"icon-plus\\\"></md-icon><span \\nclass=\\\"text-truncate\\\" translate=\\\"PICKING_AND_PACKING.ADD_NEW_PACKAGE\\\"></span></span></md-button></div></div><div \\nlayout=\\\"column\\\" \\nng-if=\\\"(vm.packingOrder.isPendingToShip() || vm.packingOrder.isShipped()) && vm.packingOrder.hasParcels()\\\" flex \\nng-repeat=\\\"parcel in vm.packingOrder.getParcelsList() | orderBy: \\'sendcloudData.externalParcelId\\' track by (parcel.sendcloudData.id || parcel.sendcloudData.externalParcelId || $index)\\\">\\n<div layout=\\\"column\\\" flex><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"mr-8\\\"></md-icon><div class=\\\"text-bold\\\" flex><span \\nng-if=\\\"!parcel.isProductBox\\\">{{\\'ORDER.PACKAGE\\' | translate}} {{$index + 1}}</span> <span ng-if=\\\"parcel.isProductBox\\\" \\ntranslate=\\\"SCAN_AND_GO.PRODUCT_SHIPPING_BOX\\\"></span></div><md-button \\nclass=\\\"text-bold md-primary no-margin hover-icon-button\\\" target=\\\"_blank\\\" ng-if=\\\"parcel.sendcloudData.externalParcelId\\\" \\nhref=\\\"{{parcel.sendcloudData.parcelUrl}}\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n{{parcel.sendcloudData.externalParcelId}}<md-icon md-font-icon=\\\"icon-open-in-new\\\" class=\\\"s16 hover-icon\\\"></md-icon>\\n</div></md-button><md-button class=\\\"md-icon-button no-margin\\\" ng-if=\\\"parcel.sendcloudData\\\" \\nng-click=\\\"vm.downloadLabels([parcel.sendcloudData.externalParcelId])\\\"><md-icon ng-if=\\\"!parcel.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><div style=\\\"visibility: hidden\\\"><div class=\\\"md-dialog-container\\\" \\nid=\\\"sendcloud-error-dialog-too-long-address\\\"><md-dialog><md-dialog-content class=\\\"pb-0 w-500\\\"><h2 class=\\\"md-title\\\">\\n{{ \\'SCAN_AND_GO.SENDCLOUD_LABEL_GENERATION_ERROR_TITLE\\' | translate}}</h2><span \\ntranslate=\\\"SCAN_AND_GO.SENDCLOUD_TOO_LONG_ADDRESS_ERROR_MESSAGE\\\"></span><ul><li \\nng-repeat=\\\"error in vm.dialogSendcloudErrors\\\" class=\\\"sendcloud-error-li\\\">{{error}}</li></ul></md-dialog-content>\\n<md-dialog-actions><div layoit=\\\"row\\\" layout=\\\"end center\\\"><md-button ng-click=\\\"vm.hideSendcloudErrorsDialog()\\\">\\n{{\\'GENERAL.CLOSE\\' | translate}}</md-button><md-button class=\\\"md-primary md-raised\\\" \\nhas-permission=\\\"contacts.contact.addresses.create,contacts.contact.addresses.update\\\" \\nng-click=\\\"vm.showCustomerPopup($event)\\\">{{\\'CONTACTS.EDIT_SHIPPING_ADDRESS\\' | translate}}</md-button></div>\\n</md-dialog-actions></md-dialog></div></div>\");\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/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.showSendcloudButton()\\\" \\nclass=\\\"m-0 ml-8 md-primary stroked\\\" ng-disabled=\\\"anySelection || creating\\\" ng-click=\\\"vm.openSendcloudLabelsDialog()\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center 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 \\ntranslate=\\\"PACKING.LABEL_AND_PACK\\\"></span></div></md-button><md-button ng-if=\\\"vm.showPackingButton()\\\" \\nclass=\\\"m-0 ml-8 md-primary\\\" ng-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\\\" \\nlock-status-filter=\\\"true\\\" enable-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\\\" \\nlock-status-filter=\\\"true\\\" enable-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\\\" \\nlock-status-filter=\\\"true\\\" enable-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\\\" \\nlock-status-filter=\\\"true\\\" enable-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\\\" \\nlock-status-filter=\\\"true\\\" enable-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\\\" \\nlock-status-filter=\\\"true\\\"></nd-grid>\");\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-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/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/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/dialogs/xml-error-dialog/xml-error-dialog.html\",\"<md-dialog id=\\\"xml-error-dialog\\\" class=\\\"w-500\\\"><md-dialog-content><h2>{{\\'SITE.XML_ERROR_DIALOG_TITLE\\' | translate}}\\n</h2><p translate=\\\"SITE.XML_ERROR_DIALOG_DESC\\\"></p><div class=\\\"md-dialog-content xml-error-dialog-content\\\" \\nng-bind-html=\\\"vm.xmlContent\\\"></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\">\\n<md-button class=\\\"md-primary\\\" translate=\\\"GENERAL.CLOSE\\\" ng-click=\\\"vm.close()\\\"></md-button><md-button \\nclass=\\\"md-raised md-primary\\\" translate=\\\"SITE.COPY_XML\\\" ng-click=\\\"vm.copyXml($event)\\\"></md-button></md-dialog-actions>\\n</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-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-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-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 \\nclass=\\\"no-padding\\\"><table class=\\\"simple sites-table\\\" flex><thead><tr><th class=\\\"site-column\\\">\\n{{\\'PRODUCT.CHANNEL\\' | translate}}</th><th class=\\\"external-id-column\\\">{{\\'SITE.EXTERNAL_ID\\' | translate}}</th><th \\nclass=\\\"last-sync-column\\\">{{\\'SITES.LAST_PRODUCT_SYNC\\' | translate}}</th><th class=\\\"last-sync-column\\\">\\n{{\\'SITES.LAST_STOCK_SYNC\\' | translate}}</th><th class=\\\"actions-column\\\" style=\\\"width: 100%\\\"></th></tr></thead><tbody><tr\\n \\nng-class=\\\"{\\'md-background-bg md-hue-2\\': siteProductsDict[site.id] && (siteProductsDict[site.id].synchronizing || siteProductsDict[site.id].waiting_to_synchronize || site.showConfig)}\\\" \\nclass=\\\"main-row\\\" ng-click=\\\"showAndHideConfig(site)\\\" ng-repeat-start=\\\"site in sites | orderBy: \\'id\\'\\\"><td><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-switch class=\\\"m-0\\\" ng-change=\\\"syncEnabledChanged(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\\\"><nd-a \\nstate=\\\"\\'app.ecommerce.sites.site.details\\'\\\" state-params=\\\"{id: site.id}\\\" ng-click=\\\"vm.closeDialog()\\\" class=\\\"nowrap\\\">\\n{{site.name}}</nd-a><small class=\\\"secondary-text nowrap\\\" ng-if=\\\"!site.enabled\\\" \\ntranslate=\\\"SITE.THE_CHANNEL_IS_DISABLED\\\"></small></div></div></div></td><td><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"siteProductsDict[site.id].external_id\\\"><span>\\n{{siteProductsDict[site.id].external_id}}</span><md-icon class=\\\"cursor-pointer ml-5 s16\\\" \\nmd-font-icon=\\\"icon-content-copy\\\" ng-click=\\\"copyToClipboard($event, siteProductsDict[site.id].external_id)\\\"></md-icon>\\n<span flex></span></div></td><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"column\\\" \\nng-class=\\\"{\\'secondary-text\\': !siteProductsDict[site.id].sync_enabled}\\\"><div \\nng-if=\\\"siteProductsDict[site.id] && siteProductsDict[site.id].last_sync\\\" layout=\\\"column\\\"><span>\\n{{siteProductsDict[site.id].last_sync | date: \\'d/M/yyyy\\'}}</span> <small class=\\\"secondary-text\\\">\\n{{siteProductsDict[site.id].last_sync | date: \\'H:mm:ss\\'}}</small></div><em class=\\\"secondary-text\\\" \\nng-if=\\\"showNeverSynchronizedText(site)\\\">{{\\'PRODUCT.NEVER_SYNCHRONIZED\\' | translate}}</em></div></div></td><td><div \\nlayout=\\\"column\\\" ng-class=\\\"{\\'secondary-text\\': !siteProductsDict[site.id].sync_enabled}\\\"><div \\nng-if=\\\"siteProductsDict[site.id] && siteProductsDict[site.id].last_stock_sync\\\" layout=\\\"column\\\"><span>\\n{{siteProductsDict[site.id].last_stock_sync | date: \\'d/M/yyyy\\'}}</span> <small class=\\\"secondary-text\\\">\\n{{siteProductsDict[site.id].last_stock_sync | date: \\'H:mm:ss\\'}}</small></div><em class=\\\"secondary-text\\\" \\nng-if=\\\"showNeverStockSynchronizedText(site)\\\">{{\\'PRODUCT.NEVER_SYNCHRONIZED\\' | translate}}</em></div></td><td><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" ng-if=\\\"siteProductsDict[site.id] && showSyncColumn(site)\\\"><span flex></span> \\n<span class=\\\"text-boxed yellow-bg black-fg\\\" ng-if=\\\"site.sync_stock_only\\\">{{\\'SITE.SYNC_STOCK_ONLY\\' | translate}}</span>\\n<md-icon class=\\\"w-40\\\" md-svg-src=\\\"/assets/images/custom-material-design-icons/eye-off-outline.7ce39b1f.svg\\\" \\nng-if=\\\"!siteProductsDict[site.id].active\\\"></md-icon><md-button class=\\\"md-icon-button md-warn\\\" \\nng-click=\\\"showErrors(site, $event)\\\" ng-disabled=\\\"siteProductBlocked(site)\\\" \\nng-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 stroked synchronize-button\\\" md-menu-align-target md-menu-origin \\nng-click=\\\"$event.stopPropagation();$mdMenu.open()\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><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><md-icon md-font-icon=\\\"icon-sync\\\" class=\\\"mr-8\\\" \\nng-if=\\\"!siteProductsDict[site.id].synchronizing && !siteProductsDict[site.id].waiting_to_synchronize\\\"></md-icon><span \\ntranslate=\\\"GENERAL.SYNC\\\"></span></div></md-button><md-menu-content width=\\\"4\\\"><md-menu-item \\nng-if=\\\"showSyncButton(site, \\'stock\\')\\\"><md-button class=\\\"md-button\\\" \\nng-click=\\\"syncSiteProduct(site, $event, ECOMMERCE_SYNC_OPTIONS.ECOMMERCE_SYNC_STOCK)\\\" \\nng-disabled=\\\"siteProductBlocked(site, \\'stock\\')\\\"><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=\\\"showSyncButton(site, \\'price\\')\\\"><md-button class=\\\"md-button\\\" \\nng-click=\\\"syncSiteProduct(site, $event, ECOMMERCE_SYNC_OPTIONS.ECOMMERCE_SYNC_PRICE)\\\" \\nng-disabled=\\\"siteProductBlocked(site, \\'price\\')\\\"><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 \\nng-if=\\\"showSyncButton(site, \\'product\\')\\\"><md-button class=\\\"md-button\\\" ng-click=\\\"syncSiteProduct(site, $event)\\\" \\nng-disabled=\\\"siteProductBlocked(site, \\'product\\')\\\"><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, \\'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-warn stroked animate-fade-in-out\\\" ng-click=\\\"deleteSiteProduct($event, site)\\\" \\nng-disabled=\\\"siteProductBlocked(site)\\\" ng-if=\\\"site.showConfig && showDeleteButton(site)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><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 \\nclass=\\\"md-primary md-raised animate-fade-in-out save-button\\\" ng-if=\\\"site.showConfig\\\" ng-click=\\\"saveSiteProduct(site)\\\" \\nng-disabled=\\\"siteProductBlocked(site)\\\" translate=\\\"GENERAL.SAVE\\\">Save</md-button><md-button \\nclass=\\\"md-icon-button toggle-button\\\"><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></td></tr><tr class=\\\"config-row md-background-bg md-hue-2\\\" \\nng-class=\\\"{\\'accordion-closed\\': !site.showConfig}\\\" ng-repeat-end><td class=\\\"show-config-td\\\" colspan=\\\"5\\\"><div \\nclass=\\\"accordion-body\\\" ng-class=\\\"{\\'accordion-open\\': site.showConfig}\\\"><div layout=\\\"column\\\" class=\\\"accordion-body-div\\\">\\n<div layout=\\\"column\\\" layout-gt-md=\\\"row\\\" layout-align=\\\"start stretch\\\" class=\\\"p-8\\\"><md-card flex=\\\"50\\\"><md-card-title>\\n<md-card-title-text><span class=\\\"h4\\\" translate=\\\"PRODUCT.OPTIONS\\\"></span></md-card-title-text></md-card-title>\\n<md-card-content class=\\\"full-height\\\"><div flex layout=\\\"column\\\"><md-checkbox ng-disabled=\\\"siteProductBlocked(site)\\\" \\nng-model=\\\"siteProductsDict[site.id].active\\\"><div layout=\\\"column\\\"><span ng-if=\\\"siteProductsDict[site.id]\\\">\\n{{\\'PRODUCT.PRODUCT_VISIBLE\\' | translate}}</span> <span ng-if=\\\"!siteProductsDict[site.id]\\\">\\n{{\\'PRODUCT.NEVER_SYNCHRONIZED\\' | translate}}</span> <small class=\\\"secondary-text\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\\\">\\n{{\\'SITE.ADVICE_NON_VISIBLE_PRODUCT_SALES_CHANNEL_DESC\\' | translate}}</small></div></md-checkbox><md-checkbox \\nng-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-disabled=\\\"siteProductBlocked(site)\\\" ng-if=\\\"showForceColorVariations\\\" \\nng-model=\\\"siteProductsDict[site.id].force_sync_color_as_variations\\\">{{\\'PRODUCT.FORCE_COLOR_AS_VARIANT\\' | translate }}\\n</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\\\">Slug</label><input \\nng-model=\\\"siteProductsDict[site.id].slug\\\" type=\\\"text\\\"> <small class=\\\"secondary-text\\\">\\n{{ \\'PRODUCT.SLUG_HELP\\' | translate }}</small></md-input-container><label class=\\\"secondary-text mv-15\\\" \\nng-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><label class=\\\"secondary-text mv-15\\\" \\nng-if=\\\"hasCustomLongDescription(site)\\\" translate=\\\"PRODUCT.DESCRIPTION_LONG\\\"></label><text-angular \\nng-model=\\\"siteProductsDict[site.id].product_description_long\\\" ng-if=\\\"hasCustomLongDescription(site)\\\" \\nplaceholder=\\\"{{product.description_long}}\\\" ta-toolbar=\\\"taToolbar\\\"></text-angular></div></md-card-content></md-card><div\\n flex=\\\"50\\\" layout-fill><md-card class=\\\"mb-15\\\" 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\\\" flex=\\\"100\\\" ng-if=\\\"site.allow_sync_productvariants_by_variant\\\"><md-card-title><md-card-title-text><span \\nclass=\\\"h4\\\" translate=\\\"PRODUCT.VARIANTS_TO_SYNCHRONIZE\\\"></span></md-card-title-text></md-card-title><md-card-content \\nlayout=\\\"row\\\"><md-select class=\\\"nd-input m-0 sync-variants-select\\\" flex multiple=\\\"multiple\\\" \\nng-model=\\\"siteProductsDict[site.id].sync_variants\\\"><md-optgroup label=\\\"{{product.color_category_name}}\\\"><md-option \\nng-repeat=\\\"color in variants.colors | orderBy: [\\'name\\']\\\" ng-value=\\\"color.id\\\">{{color.name}}</md-option></md-optgroup>\\n<md-optgroup label=\\\"{{product.size_category_name}}\\\"><md-option ng-repeat=\\\"size in variants.sizes | orderBy: [\\'name\\']\\\" \\nng-value=\\\"size.id\\\">{{size.name}}</md-option></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=\\\"mb-15\\\" flex=\\\"100\\\"><md-card-title><md-card-title-text><span \\nclass=\\\"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=\\\"siteProductsDict[site.id].searchWebCateogryText\\\" \\nmd-selected-item=\\\"siteProductsDict[site.id].selectedWebCategoryItem\\\" \\nmd-selected-item-change=\\\"siteCategorySelected(site)\\\" ng-disabed=\\\"siteProductBlocked(site)\\\" \\nplaceholder=\\\"{{\\'PRODUCT.AUTOCOMPLETE_SEARCH_CATEGORY\\' | translate}}\\\"><div class=\\\"autocomplete-site-category\\\" \\nlayout=\\\"column\\\"><span>{{item.name}}</span> <small class=\\\"secondary-text\\\">{{item.path}}</small></div></md-autocomplete>\\n<md-button class=\\\"md-button md-primary stroked\\\" ng-click=\\\"openAdvancedCategorySearch(site)\\\" \\nng-disabled=\\\"siteProductBlocked(site)\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-8\\\" \\nclass=\\\"md-primary\\\" md-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=\\\"siteProductsDict[site.id].selectedWebCategories\\\" readonly=\\\"true\\\"><md-chip-template>{{$chip.path}}\\n</md-chip-template></md-chips></div></md-card-content></md-card><md-card ng-if=\\\"dtOptionsBySite[site.id]\\\" flex=\\\"100\\\">\\n<md-card-title><md-card-title-text><div layout=\\\"row\\\"><span class=\\\"h4\\\" translate=\\\"SITE.EXTERNAL_VARIANT_IDS_MAPPING\\\">\\n</span><nd-new-feature-badge id=\\\"SITE_VARIANT_MAPPING\\\" class=\\\"ml-8\\\"></nd-new-feature-badge></div><p \\nclass=\\\"secondary-text mb-0\\\" translate=\\\"SITE.EXTERNAL_VARIANT_IDS_MAPPING_INFO\\\"></p></md-card-title-text>\\n</md-card-title><md-card-content class=\\\"pb-0\\\"><md-input-container class=\\\"full-width\\\"><label \\ntranslate=\\\"SITE.EXTERNAL_ID\\\"></label><input ng-model=\\\"siteProductsDict[site.id].external_id\\\" type=\\\"text\\\">\\n</md-input-container><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container class=\\\"nd-search-input\\\" \\nmd-no-float><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" \\nng-model=\\\"searchProductVariantBySite[site.id]\\\" ng-change=\\\"searchVariants(site.id)\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"text\\\"></md-input-container><span flex></span><md-button \\nclass=\\\"md-primary stroked\\\" ng-click=\\\"showInitExternalVariantsIdsDictDialog(site.id)\\\" \\nng-if=\\\"siteProductsDict[site.id].canInitializeExternalVariantIdsDict()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon class=\\\"mr-8\\\" md-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'SITE.ADD_EXTERNAL_VARIANT_IDS_MAPPING\\' | translate}}</div>\\n</md-button><md-button class=\\\"md-primary stroked\\\" ng-click=\\\"showInitExternalVariantsIdsDictDialog(site.id)\\\" \\nng-if=\\\"!siteProductsDict[site.id].canInitializeExternalVariantIdsDict()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-8\\\" md-font-icon=\\\"icon-sync\\\"></md-icon>\\n{{\\'SITE.UPDATE_EXTERNAL_VARIANT_IDS_MAPPING\\' | translate}}</div></md-button></div><table \\nclass=\\\"dataTable row-border hover external-variant-ids-table\\\" ng-if=\\\"dtOptionsBySite[site.id]\\\" datatable \\ndt-columns=\\\"dtColumnsBySite[site.id]\\\" dt-instance=\\\"dtInstancesBySite[site.id]\\\" dt-options=\\\"dtOptionsBySite[site.id]\\\">\\n</table></md-card-content></md-card></div></div></div></div></td></tr></tbody></table></md-card-content></md-card>\\n</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><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\" \\ntranslate=\\\"PRODUCT.SALE_INFORMATION\\\"></span><nd-new-feature-badge class=\\\"ml-8\\\" id=\\\"PRODUCT_SALE_INFORMATION_CARD\\\" \\nremove-margin=\\\"true\\\"></nd-new-feature-badge></div></md-card-title-text></md-card-title><md-card-content><div \\nlayout=\\\"column\\\" layout-wrap flex><div layout=\\\"row\\\" flex=\\\"50\\\"><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nng-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><md-input-container flex=\\\"100\\\" ng-if=\\\"isSaleStoreCommentVisible()\\\"><label \\ntranslate=\\\"PRODUCT.SALE_STORE_COMMENT\\\"></label><textarea ng-model=\\\"product.sale_store_comment\\\" rows=\\\"3\\\" \\nmd-maxlength=\\\"2048\\\"></textarea><div class=\\\"secondary-text\\\" translate=\\\"PRODUCT.SALE_STORE_COMMENT_HELP\\\"></div>\\n</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><div layout-align=\\\"start center\\\" flex=\\\"5\\\" layout=\\\"row\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5 yellow\\\"><md-tooltip>{{\\'PRODUCT.APPLY_DDP_TO_PRODUCT\\' | 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-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-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\\\" \\nng-model-options=\\\"{ debounce: vm.DEBOUNCE_INPUTS }\\\" 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\\\" \\nng-model-options=\\\"{ debounce: vm.DEBOUNCE_INPUTS }\\\" flex ng-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\\\" \\nng-model-options=\\\"{ debounce: vm.DEBOUNCE_INPUTS }\\\" flex 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\\\" ng-model-options=\\\"{ debounce: vm.DEBOUNCE_INPUTS }\\\" 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\\\" ng-model-options=\\\"{ debounce: vm.DEBOUNCE_INPUTS }\\\" \\nflex ng-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\\\" ng-model-options=\\\"{ debounce: vm.DEBOUNCE_INPUTS }\\\" \\nflex ng-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-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-change=\\\"vm.priceInclTaxChanged()\\\" \\nng-model-options=\\\"{ debounce: vm.DEBOUNCE_INPUTS }\\\" ng-disabled=\\\"vm.saving\\\" min=\\\"0\\\" class=\\\"text-right\\\">\\n</md-input-container></div><div 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/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-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/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-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/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 flex=\\\"100\\\"><md-input-container class=\\\"md-block mt-20\\\">\\n<label translate=\\\"PRODUCT.SALE_STORE_COMMENT\\\"></label><textarea ng-model=\\\"vm.selectedSaleStoreComment\\\" rows=\\\"3\\\" \\nmd-maxlength=\\\"2048\\\"></textarea></md-input-container></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/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/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/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/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/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/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)\\\" \\ntranslate=\\\"{{vm.getReceivedWithMainOptionText()}}\\\"></md-button><md-button action \\nng-click=\\\"vm.receiveWithEmptyDeliveryOption(false)\\\" translate=\\\"{{vm.getReceivedWithSecondaryOptionText()}}\\\">\\n</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/gift-cards/dialogs/toggle-validity/toggle-validity-dialog.html\",\"<md-dialog id=\\\"toggle-validity-dialog\\\" aria-label=\\\"{{ vm.title | translate }}\\\" class=\\\"w-400\\\"><form \\nname=\\\"toggleValidityForm\\\" ng-cloak><md-dialog-content><h2 class=\\\"mb-20\\\">{{ vm.title | translate }}</h2><p>\\n{{ vm.body | translate }}</p></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" \\nclass=\\\"stroked\\\" ng-disabled=\\\"vm.loading\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button><md-button \\nclass=\\\"md-raised md-primary\\\" ng-click=\\\"vm.confirm()\\\" ng-disabled=\\\"vm.loading\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular md-diameter=\\\"16px\\\" class=\\\"mr-5\\\" ng-show=\\\"vm.loading\\\">\\n</md-progress-circular><span translate=\\\"{{ vm.confirmLabel }}\\\"></span></div></md-button></md-dialog-actions></form>\\n</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><span ng-if=\\\"vm.cashToRemove >= 0\\\">\\n{{\\'REGISTER_CLOSURE.TO_REMOVE\\' | translate: {amount: vm.cashFund, currency: vm.currencyCharacter} }}</span> <span \\nng-if=\\\"vm.cashToRemove < 0\\\">\\n{{\\'REGISTER_CLOSURE.TO_ADD\\' | translate: {amount: vm.cashFund, currency: vm.currencyCharacter} }}</span></td><td \\nclass=\\\"text-right nowrap\\\">{{vm.cashToRemove | absoluteValue | 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(vm.posOrder.invoice.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\\\" \\nng-if=\\\"vm.posOrder.substitutive_invoices\\\" ng-repeat=\\\"substitutiveInvoice in 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\\\"> <a ng-click=\\\"vm.downloadInvoice(substitutiveInvoice.id)\\\" class=\\\"md-input cursor-pointer\\\">\\n{{substitutiveInvoice.getFileName()}}</a><md-icon md-font-icon=\\\"icon-open-in-new\\\" \\nhas-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)\\\"><span ng-if=\\\"devolution.pos_order_autocode\\\">\\n{{devolution.pos_order_autocode}} </span><span ng-if=\\\"!devolution.pos_order_autocode\\\" translate=\\\"ORDER.ORDER_DRAFT\\\">\\n</span> </a></span></span><span class=\\\"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.balance_discount != 0\\\" class=\\\"border-bottom total-breakdown-group\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"end center\\\"><div layout=\\\"row\\\" flex=\\\"70\\\"><div translate=\\\"SALES.TOTAL_WITHOUT_DISCOUNT\\\">\\n</div></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\\\" \\nng-if=\\\"vm.posOrder.balance_discount > 0\\\" translate=\\\"SALES.APPLIED_BALANCE\\\"></div><div class=\\\"balance-discount\\\" \\nng-if=\\\"vm.posOrder.balance_discount < 0 && vm.posOrder.is_devolution\\\" translate=\\\"SALES.DISCOUNT_BY_BALANCE\\\"></div><div \\nclass=\\\"balance-discount\\\" ng-if=\\\"vm.posOrder.balance_discount < 0 && !vm.posOrder.is_devolution\\\" \\ntranslate=\\\"SALES.PENDING_NEGATIVE_BALANCE\\\"></div></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\" flex=\\\"30\\\"><span \\nclass=\\\"text-right balance-discount\\\" flex>{{-vm.posOrder.balance_discount | price}} {{::vm.currencyCharacter}}</span>\\n</div></div></div><div layout=\\\"column\\\" class=\\\"border-bottom total-breakdown-group\\\"><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\\\" 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.autocode && !vm.posOrder.deleted && !vm.posOrder.is_negative\\\" ng-click=\\\"vm.showDeleteAction = true\\\">\\n<md-tooltip md-direction=\\\"top\\\">{{\\'GENERAL.DELETE\\' | translate}}</md-tooltip><md-icon md-font-icon=\\\"icon-trash\\\">\\n</md-icon></md-button><md-button class=\\\"md-icon-button\\\" aria-label=\\\"Delete\\\" \\nhas-permission=\\\"sale.sales_log.delete_draft\\\" \\nng-if=\\\"!vm.posOrder.autocode && !vm.posOrder.deleted && !vm.posOrder.is_negative\\\" \\nng-click=\\\"vm.showDeleteAction = true\\\"><md-tooltip md-direction=\\\"top\\\">{{\\'GENERAL.DELETE\\' | translate}}</md-tooltip>\\n<md-icon md-font-icon=\\\"icon-trash\\\"></md-icon></md-button><md-button class=\\\"md-icon-button\\\" aria-label=\\\"Print\\\" \\nng-if=\\\"!!vm.posOrder.autocode\\\" ng-click=\\\"vm.print(false)\\\" ng-disabled=\\\"vm.posOrder.register === null\\\"><md-tooltip \\nmd-direction=\\\"top\\\">{{\\'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/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/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/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\\\" maxlength=\\\"11\\\" \\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>\\n<md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"CONTACTS.INVOICE_EMAIL\\\"></label><md-icon md-font-icon=\\\"icon-email\\\" class=\\\"icon\\\"></md-icon><input \\nng-model=\\\"vm.contact.invoice_email\\\" type=\\\"email\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\"> <small class=\\\"secondary-text\\\">\\n{{\\'CONTACTS.INVOICE_EMAIL_HINT\\' | translate}}</small></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\\\" ng-model-options=\\\"{ debounce: vm.DEBOUNCE_INPUTS }\\\" \\nautocomplete=\\\"off\\\" type=\\\"number\\\" value=\\\"0\\\" class=\\\"text-right\\\" ng-change=\\\"vm.priceExclTaxChanged()\\\">\\n</md-input-container><span>{{vm.currency}}</span></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"33\\\">\\n<md-input-container flex class=\\\"no-errors-spacer\\\"><label translate=\\\"PRODUCT.PRICE_INCL_TAX\\\">Price Including Tax</label>\\n<input ng-model=\\\"vm.productVariantPrice.price_incl_tax\\\" ng-model-options=\\\"{ debounce: vm.DEBOUNCE_INPUTS }\\\" \\nautocomplete=\\\"off\\\" type=\\\"number\\\" 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\\\" \\nng-model-options=\\\"{ debounce: vm.DEBOUNCE_INPUTS }\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" value=\\\"0\\\" class=\\\"text-right\\\" \\nng-change=\\\"vm.offerPercentValueChanged()\\\"></md-input-container><span>%</span></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"pr-8\\\" flex=\\\"33\\\"><md-input-container flex class=\\\"no-errors-spacer\\\"><label \\ntranslate=\\\"PRODUCT.DISCOUNT_PRICE_EXCL_TAX\\\"></label><input ng-model=\\\"vm.productVariantPrice.discount_price_excl_tax\\\" \\nng-model-options=\\\"{ debounce: vm.DEBOUNCE_INPUTS }\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" value=\\\"0\\\" class=\\\"text-right\\\" \\nng-change=\\\"vm.offerPriceExclTaxChanged()\\\"></md-input-container><span>{{vm.currency}}</span></div><div layout=\\\"row\\\" \\nlayout-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\\\" \\nng-model-options=\\\"{ debounce: vm.DEBOUNCE_INPUTS }\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" 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 \\nclass=\\\"md-icon-float no-errors-spacer\\\"><label translate=\\\"PRODUCT.UNIT_COST\\\">Unit cost</label><input \\nng-model=\\\"vm.productVariant.ddp_price\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" step=\\\"0.00001\\\" value=\\\"0.00000\\\" \\nclass=\\\"text-right\\\"></md-input-container><span class=\\\"mt-25 font-size-16\\\">{{vm.currency}}</span></div>\\n<md-input-container flex class=\\\"md-block no-errors-spacer\\\"><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><div layout=\\\"row\\\" flex ng-show=\\\"vm.updateAllProducts\\\"><div \\nclass=\\\"did-you-know yellow animate-fade-in-out\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon=\\\"icon-alert\\\"></md-icon><span class=\\\"ml-8\\\"><span translate=\\\"PRODUCT.APPLY_DDP_TO_ALL_VARIANTS_WARNING\\\">\\n</span></span></div></div></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=\\\"!vm.purchaseOrder.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-menu-item ng-if=\\\"vm.purchaseOrder.catalog && !vm.purchaseOrder.catalog_in_process\\\"><md-button \\nng-click=\\\"vm.downloadCatalog()\\\" ng-disabled=\\\"vm.printing || vm.changed || vm.saving || vm.changingStatus\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/catalog.fdd681f4.svg\\\"></md-icon>{{\\'SALE.DOWNLOAD_CATALOG\\' | translate}}\\n</md-button></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/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/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 ng-if=\\\"vm.saleOrder.catalog && !vm.saleOrder.catalog_in_process\\\"><md-button \\nng-click=\\\"vm.downloadCatalog()\\\" ng-disabled=\\\"vm.printing || vm.changed || vm.saving || vm.changingStatus\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/catalog.fdd681f4.svg\\\"></md-icon>{{\\'SALE.DOWNLOAD_CATALOG\\' | translate}}\\n</md-button></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/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/"}