{"version":3,"sources":["scripts/app.js"],"names":["angular","module","ndStocktakingHistoricHeaderController","$scope","STOCKTAKING_CHANGE_TYPES","STOCKTAKING_PRODUCT_NOT_FOUND_REASONS","controller","directive","restrict","scope","stocktakingChange","controllerAs","templateUrl","ndStocktakingHistoricItemController","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","ndPurchaseOrderDeliveryActionsController","PURCHASE_ORDER_STATUSES_REVERSE","PULLING_FREQUENCE","startPulling","timeout","purchaseOrderDeliveries","purchaseOrderDelivery","purchase_order_id","purchase_order","result","HTTP_404_NOT_FOUND","hide","$broadcast","purchase_order_status","pending_to_change_status","changing_status","calculatePurchaseDdpCostPrice","purchaseOrderDeliveriesStatus","calculate_purchase_ddp_cost_price","success","action","hideDelay","highlightAction","location","reload","focusOnOpen","locals","body","taxes","importToLabelsGenerator","fetching","results","fn","transfer","purchaseOrderDeliveriesTransfer","save","transfer_order","new_cost_product_prices","length","costProductPrices","catch","error","wrapped","reject","importProductsDialog","isUid","document","deliveryId","dialog","alert","htmlContent","email","user","openDialogSetTaxToAllPurchaseOrderProducts","multiple","purchase","openDialogSetDiscountToAllPurchaseOrderProducts","purchaseId","printDelivery","defEmail","contact","params","customDdpPrices","orderDelivery","isSaleOrderDelivery","isTransferOrderDelivery","isPurchaseOrderDelivery","orderBy","startPullingEvent","$on","event","args","ndSaleOrderActionsController","$http","MAX_PRODUCTS_PER_PDF","SALE_ORDER_STATUSES","PollingService","DownloadFileService","saleOrders","saleOrder","partialDelivery","allocate","ev","targetEvent","saleId","updatePrices","createProforma","accounting","invoices","sale_order_id","HTTP_201_CREATED","printOrder","customer_instance","send","recordsTotal","SALE_ORDER","sendEmail","emailTo","print","prices","pricing_tier","origin_codes","images","brand","hs_code","composition","attributes","content","file","Blob","data","fileURL","URL","createObjectURL","window","open","a","createElement","href","download","click","printCatalog","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","interval","start","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","push","provider_price","session","taxSearchText","getShowTaxesEvent","showTaxes","editable","showPriceTaxes","disableTaxes","ndPurchaseActionsController","$mdMenu","receiveAndConfirm","sendReloadAllEvent","purchaseOrderStatus","purchaseOrder","purchase_order_deliveries_id","purchaseOrderDeliveryId","orderDeliveryId","errorMessage","order_status","partiallyReceive","contact_instance","PURCHASE_ORDER","purchaseOrders","pricingTier","originCodes","show_prices","showPrice","produce","importSaleOrdersDialog","order_ids","duplicate","config","$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider","state","abstract","views","content@app","resolve","bodyClass","subcontent@app.inventory.configuration","AccountData","apiResolver","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","ReplenishmentsByWarehouseController","$timeout","$mdSidenav","$parent","currentNavItem","performingAnalysis","performAnalysis","HTTP_202_ACCEPTED","LowStockPurchasesByProviderController","UiGridService","PULLING_DELAY_MS","loading","saveStatus","gridApi","saveState","localStorage","setItem","JSON","stringify","getColumnStatusVisibility","field","defaultValue","avoidState","columns","column","visible","setGridColumns","key","orderCellHtml","extend","displayName","headerTooltip","permission","cellClass","enablePinning","pinnedLeft","enableHiding","leadTime","cellTemplate","rotation","stockoutLosses","minWidth","stock","stockValue","stockToOrder","stockToOrderValue","totalDraft","enableSorting","pinnedRight","editableCellTemplate","enableCellEdit","enableCellEditOnFocus","enableColumnMenu","gridOptions","columnDefs","getGridPostBody","d","page","pageSize","ordering","columns_names","Object","values","map","filter","Boolean","columns_fields","exporting","uiGridInitialized","filters","warehouses","providers","seasons","brands","categories","subcategories","DEFAULT_PAGE_SIZE","getGridPage","createPurchaseDraft","providerId","replenishmentWarehouseId","provider_id","updateTotalDraft","HTTP_400_BAD_REQUEST","message","downloadCSV","fetch","URLSearchParams","method","headers","Authorization","token","Content-Type","signal","json","getGridOptions","onRegisterApi","core","on","columnVisibilityChanged","changedColumn","colDef","pagination","paginationChanged","newPage","sortChanged","grid","sortColumns","getSortString","colResizable","columnSizeChanged","deltaChange","gridMenuCustomItems","$event","useExternalPagination","AbortController","performAnalysisIfEmpty","pullingIfEmpty","undefined","abort","totalItems","orderQuantities","item_external_id","location_external_id","replenishment_stock_to_order","handleWindowResize","$apply","providersIdsWithWarehousesIdsDict","provider_external_id","provider_ids_with_warehouses_ids_dict","LowStockPurchasesByProductController","ERROR_CODES","setProductVariantGridColumns","image","width","maxWidth","sku","code","barcode","size","color","category","subcategory","season","availabilityStatus","abcCategory","stock_in_transit","stock_on_hand","globalStock","totalUnitsSold","averageDailySales","rop","expectedDemand","expectedSales","stockTurnDraft","ddp","demand_value","page_size","order_by","abcCategories","abc_categories","availabilityStatuses","availability_statuses","updateTotalOnOrder","located_product_variants","product_variant_id","warehouse_id","purchaseProductVariant","productVariantId","targetWarehouseId","replenishmentStockToOrder","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","paginationCurrentPage","ImportEditWizardDialogController","IMPORTER_STATUS","setStep","template","wizard","step","selectOption","history","dtInstance","nextStep","prevStep","pop","showBackOption","getTemplateUrl","showImportationDialog","importerType","SalePrintDialogController","printType","printPrices","printImages","showBrand","showHsCode","showComposition","showAttributes","changePrintType","savedPrintType","ImportSaleProductsDialogController","fileLoaded","ngFlow","flow","ngFlowOptions","chunkSize","maxChunkRetries","simultaneousUploads","allowDuplicateUploads","testChunks","progressCallbacksInterval","sale_order_products","filename","fileAdded","files","uploadFile","opts","saleOrderProductsImport","query","uploadMethod","upload","uploadFileSuccess","DeliverySaleController","INVOICE_TYPES","VideosData","ChangelogsData","ndServerController","processing","run","startEventName","performance","server","endEventName","getIconName","average","regularBound","badBound","getSvgIcon","getVeredictTitle","getCustomClass","withBackground","cancelPerformanceEventListener","triggerEventName","ndBenchmarkController","Performance","benchmark","ratio","ndBandwidthController","avgBandwidth","getColor","uploadSpeed","minUpload","downloadSpeed","minDownload","_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","OpenRegisterDialogController","hotkeys","saveOpening","form","$valid","opening","registers","ERROR_04008_REGISTER_ALREADY_OPENED","selectFilter","add","combo","allowIn","SelectRegisterDialogController","select","CloseRegisterDialogController","registerActivity","paymentMethods","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","NewRegisterDialogController","RegisterData","SerialNumberType","SERIAL_NUMBER_TYPES","contractedPlanLimit","postSave","toastMessage","setPaymentMethodAlreadyLinkedValidity","ERROR_04039_PAYMENT_METHOD_LINKED_TO_ANOTHER_WAREHOUSE","paymentMethodErrorData","warehouse","registerForm","$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","CashCounterDialogController","bills","bill","coins","coin","SalesGoalFormDialogController","salesGoal","SalesGoal","warehousesDict","saveSalesGoal","salesGoals","removeSalesGoal","closeDialog","getCurrency","w","dialogTitle","SalesGoalDetailDialogController","showSalesGoalFormDialog","editSalesGoal","ToggleValidityDialogController","giftCard","targetValidity","confirmLabel","StockLocationSearchDialogController","fetchStockLocations","stockLocations","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","stockLocation","unshift","removeStockLocation","setTimeout","container","addEventListener","$watch","newVal","oldVal","StockLocationDialogController","isSaving","stockLocationForm","deleteLocation","DeleteWarehouseDialogController","ndTransferOrderDeliveryActionsController","TRANSFER_ORDER_STATUSES_REVERSE","manageReceiveOption","condition","createEmpty","changeDeliveryStatus","create_empty","extraParams","transferOrderDelivery","extra_parameters","transferOrderDeliveriesStatus","transferOrderDeliveries","deliveryStatusChanged","transfer_order_status","created_by_username","prepared_by_username","received_by","received_by_username","shipped_by_username","toasMessage","transferOrderId","receivedActionStoredValue","transferId","isDelivery","isReplenishment","is_replenishment","transferOrders","receiveWithEmptyDeliveryOption","isMainOption","createEmptyDeliveryOnReceive","getReceivedWithMainOptionText","getReceivedWithSecondaryOptionText","ImportTransferProductsDialogController","transfer_order_products","transferOrderProductsImport","transferOrderDeliveryProductsImport","ndTransferOrderActionsController","transferOrderStatus","prepareAndShip","partiallyPrepare","screenIsBig","TransferPrintDialogController","printOriginCodes","thermalPrinter","transferOrdersPrint","path","LoadingBarDialogController","ndStocktakingOrderProductUidController","UidStock","StocktakingOrderProductVariantLot","totalAmount","MIN_GRID_HEIGHT","gridHeight","pageNumber","getGridDetailPage","deleteOrderProductWrapper","hasPermissions","product_code","isDefined","deleteOrderProduct","copyFieldInClipboard","textarea","css","opacity","val","append","successful","execCommand","err","remove","updateNewAmount","lotId","stocktakingOrderProductVariantLots","new_amount","targetVariant","i","order_product_variants","stocktaking_order_product_variant","targetLot","j","stocktaking_order_product_variant_lots","total_product_amount","updateTotalAmount","total_stocktaking_order_products_amount","showErrorToast","addLot","isEditable","uidStock","manageLots","sourceWarehouse","product_variants","received","hideNotes","hideMovementReason","disableWarehouseSelector","disableVariantSelector","createMovement","lot","stocktaking_id","stocktaking_order","order_product_id","expiration_date","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","StocktakingSummaryDialogController","stocktakingSummaryData","resetStock","getStocktakingInformation","stocktaking","brand_name","brand_instance","category_name","category_instance","season_name","season_instance","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","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","ndProductPlanningConfigurationController","ProductPlanningConfiguration","maxTypes","replenishment_planning_configuration","purchase_planning_configuration","examplePercentage","maxStock","percentageValue","floor","isPercentage","maxType","parseInt","isFixedAmount","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","ndProductOrdersController","TRANSFER_ORDER_STATUS_COLORS","TRANSFER_ORDER_STATUSES","PURCHASE_ORDER_STATUS_COLORS","PURCHASE_ORDER_STATUSES","loadingStocks","loadingTransfers","loadingPurchases","loadingSales","loadingPosOrders","totalPendingByWarehouseColorSize","totalAllocatedByWarehouseColorSize","selectedWarehouses","purchaseOrderProductVariants","warehouse_ids","order_autocode","totalPendingByColor","contact_name","pending","total_received_amount","saleOrderProductVariants","sopv","totalAllocatedByColor","total_allocated_amount","total_prepared_amount","total_shipped_amount","posOrderFulfillmentProductVariants","source_warehouses","posOrderProductVariants","pofpv","pos_order_id","pos_order_autocode","loadingPoss","target_warehouse_name","source_warehouse_name","totalShippedByColor","warehousesById","changeWarehouses","checkTransfer","filterType","getTransferAmount","checkSale","getSaleAmount","checkPurchase","getPurchaseAmount","ndProductMainInformationController","INVENTORY_POLICY_TYPES","$mdSelect","PRODUCT_TYPES","DEFAULT_AUTOCOMPLETE_PAGE_SIZE","PRODUCT_TYPES_REVERSE","PRODUCT","PRODUCT_BUNDLE","GIFT_CARD","RAW_MATERIAL","1","2","3","4","saveProductListener","saveProduct","GS1_CODE_128","product_type","b2b_ecommerces","selectedUniqueB2b","postSaveProduct","isUpdate","NOTES_MAX_LENGTH","singleFile","useFlowjs","currencyFontIcon","fileReader","FileReader","readAsDataURL","productForm","$dirty","origin","group","productApi","isProductBundle","productBundles","fileSuccess","cancelProduct","showNewObjectOptionDialog","newCompositionAdded","largestTagLength","maxLength","setUniqueB2bToProduct","manageStockChanged","manage_stock","getProductTypeImage","productTypeChanged","isProductTypeDisabled","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","colorVariant","sizeVariant","computeSelectedCategories","ready","productHasBeenUpdatedListener","getCategory","getCategoryNameLabel","isSecondOption","getCategoryName","variantAdded","categoriesIds","self","swappingVariants","onVariantsUpdate","chip","onDelete","exclude","available","categoryAlreadySelected","variantAlreadySelected","selectedVariant","showAllVariants","excludeCategories","newSelectedVariant","alreadySelectedVariant","selectedIds","onCategoryNameUpdate","showSwapCategoriesDialog","NdProductAutocompleteController","DTO_ORDER_TYPES","productSearchText","productsQuerySearch","TRANSFER_ORDER","hide_bundles","selectedProductChange","setFocus","getElementsByTagName","ndOrderProductController","secondaryVariantAndTotal","newTotal","calculateTotalBySecondaryVariant","totalsBySecondaryVariant","totalCost","order_product","validateOrderProductWrapper","onChange","colorsWithAmount","totalAmountFilter","console","time","totalsByMainVariant","source_stocks","sourceStockByProductVariantId","target_stocks","targetStockByProductVariantId","deprecated","secondaryVariantsAndTotals","orderProductVariantByVariantsIds","orderProductVariantByVariantsIdsInverse","oldSizesBId","oldColorsBId","productVariantPriceBySizeAndColor","total_cost","product_variant_prices","need_update","tempOrderProductVariant","removed","pending_to_receive_amount","pending_to_prepare_amount","isTotal","timeEnd","showPrices","targetWarehouse","ndOrderDeliveryProductController","orderDeliveryProductVariantsByColorAndSize","saveOrderDeliveryProductVariant","orderDeliveryProductVariant","pointer","totals","prepared_amount","shipped_amount","received_amount","orderDeliveryProductVariants","order_delivery","ordered_amount","ndCsvEcommerceController","sitesRules","rules","backup","initMetadata","updateLeafs","saveEvent","cancelEvent","resetHipercalzadosCsv","destroyEvent","hasSelected","rule","toUpperCase","replaceAll","required","col","children","nameById","collectionById","available_collection","custom_name","getSelected","items","leafs","immersion","noTranslate","checkLeafsStatus","switchCollapsible","clearMetadata","ndBundleContentVariantsController","updateVariant","newVariant","bundle_content_variant","openProductSearchDialog","bundle_content_variants","resultVariant","bundle_variant","bundleContentVariant","saveBundleContentVariants","bundle_data","deleteBundleContentVariant","bundleVariantId","initBundleContentVariantAmount","saveBundleContentVariant","changeVariants","inStock","productVariantBundleProductVariant","saveBundleContentVariantsListener","ndAttributesCardController","AttributeCategory","Attribute","AttributeCategoryValue","addAttributeCategory","attributeCategory","newAttributeCategory","attributeCategories","ac","attributeCategoriesAutocomplete","attributeCategoryValue","attributecategory","attributecategory_instance","attributeCategoryValues","attributeAutocomplete","saveAttributeCategoryValues","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","ndAdjustmentOrderProductController","orderProductVariantsBySize","sourceStockByColorAndSize","product_variant__color","product_variant__size","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","VariantsSelectorDialogController","selectedVariantsIds","variantsByCategoryId","allCategories","selectedId","currentCategoryId","variantsFilter","selectVariantsForm","fixed","onSelectorChange","isSelected","selectSelectedVariants","UidsSearchDialogController","allowCreate","showAll","warehouseName","operation","excludeUids","initSearch","saveSelectedState","columnState","loadSelectedState","savedState","statusFilter","uidToSearch","order_delivery_id","transfer_order_delivery_product_variant_to_prepare","transfer_order_product_variant_to_receive","add_uid_to_purchase_order_delivery_for_devolution","recordsFiltered","uidStocksById","split_amount","totalSelected","uidStocks","enableFooter","paginationPageSizes","useExternalSorting","savedColumn","searchUID","uidStockId","createUidStock","newUidStock","editUID","EditUidDialogController","STOCK_MOVEMENT_REASONS","isEditMode","editUidForm","reason","warehouseIsDisabled","productVariantIsDisabled","warehouseSearchText","disableSavingButton","amountChanged","movements","STOCK_MOVEMENT_REASON_BREAKAGE","STOCK_MOVEMENT_REASON_EXPIRY","STOCK_MOVEMENT_REASON_ROBBERY","STOCK_MOVEMENT_REASON_TESTER","STOCK_MOVEMENT_REASON_COURSE","STOCK_MOVEMENT_REASON_INTERNAL_USE","STOCK_MOVEMENT_REASON_LOSS","STOCK_MOVEMENT_REASON_ADJUSTMENT","STOCK_MOVEMENT_REASON_PRESS_GIFT","STOCK_MOVEMENT_REASON_EMPLOYEE_GIFT","STOCK_MOVEMENT_REASON_EMPLOYEE_WELCOME_GIFT","STOCK_MOVEMENT_REASON_CUSTOMER_GIFT","STOCK_MOVEMENT_REASON_CUSTOMER_WELCOME_GIFT","STOCK_MOVEMENT_REASON_OWNER_GIFT","STOCK_MOVEMENT_REASON_OTHER","ResurrectUidDialogController","uidID","selectedWarehouse","stock_warehouse_id","ERROR_04027_UDI_ALREADY_ALIVE","ERROR_04028_UDI_WITH_NO_STOCK_INSTANCE","validForm","UidsAddDialogController","purchase_order_delivery_product_variant","purchase_order_delivery","bind","sale_order_delivery_autocode","addUidStock","expirationDate","uidListenerCallback","UidMovementsDialogController","UIDId","STOCK_MOVEMENT_TYPES","STOCK_MOVEMENT_AUTOCODE_DICT","getGridProductsPage","stock_movement_types","stock_movement_reasons","stock_movement_autocode_dict","columnsState","pinned","getColumnVisibility","datetime","saveSelection","editMovement","StockMovementDialogController","hasReasonWhenInit","deleteReason","ProductVariantSelectorGridController","BarcodeService","getGridProductsPagePostData","fields","long_url_get","v","keptSelectionArray","registerDataChangeCallback","treeBase","expandAllRows","allSelected","part","array","selection","rowSelectionChanged","updateSelectedRows","rowSelectionChangedBatch","getSelectAllState","codeSku","grouping","groupPriority","enableRowSelection","toggleSidenav","sidenavId","barcodeListenerCallbackId","subscribeBarcode","unsubscribeBarcode","changed_row","ProductSearchController","initVariantsComplete","dtVariantsInstance","updateAmounts","clickedProduct","headerVariantCallback","headerVariantCompiled","rowVariantCallback","multipleProducts","selectAllProductsFromTable","selectedProductDict","itemId","variantsTable","indexProduct","p","selectedAmountsDict","productsById","getVariants","isChecked","isVariantChecked","tabIndex","filterSite","sourceUnderMinimum","targetUnderMinimum","sidenavLockedOpen","hideBundles","filterBrands","filterCategories","filterSeasons","fetchingVariants","showProductVariantSelector","productsDict","dtVariantsOptions","baseUrl","collectionId","presale","under_minimum","scrollX","fixedHeader","stateSaveCallback","stateLoadCallback","dtVariantsColumns","showDialog","orderProductsBackup","filterByColumn","table","lastPage","info","lastPageAllSelected","toArray","productInTable","deselectProduct","selectAllVariant","productIndex","isIndeterminate","getProductsCheckboxIcon","getProductsCheckboxClass","toggleAndSelectAllVariants","tempDict","unselectProduct","setVisibleTable","reloadProducts","enabled","ExchangeProductVariantsDialogController","errorMessageKey","showWaringMessage","getProductVariantDetails","EcommerceCategoryTreeDialogController","c","recursiveIndexFilterPath","filterPath","childrenFilterPath","child","ChangeCoverDialogController","selectedImage","productImages","changeSelectedImage","img","is_cover","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","ndPickingPackingPickedListController","PICKING_STATUS","PICKING_ORDER_STATUS_COLORS","PICKABLE_ORDER_STATUS_DONE","idRowCreated","openSendcloudLabelsDialog","posOrderFulfillments","selectedRows","posOrdersFulfillments","onLabelsGenerated","notifyDataChange","getGroupPickedAmount","picked_amount","picking_order_id","picked_quantity","treeAggregationType","aggregation","SUM","customTreeAggregationFinalizerFn","rendered","create_packing_order","pickingOrderId","ndPickingPackingPickingListController","PICKABLE_ORDER_STATUS_IN_PROGRESS","pending_picked_amount_not_finished","ndPickingPackingPackingListController","PICKABLE_ORDER_STATUS_PACKING","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","finish","FinishPickingAndPackPickingOrderDialogController","getIsSendPackingOrderFromStorage","setIsSendPackingOrderToStorage","sendPackingOrder","processPacking","PackingDetailsController","PackingActivity","usersList","isLoading","searchUserText","updatePackedBy","packingActivity","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","ShippingDialogController","autocodesString","FinishPackingOrderDialogController","packedAmount","LowStockReplenishmentsController","openAnalysisInformationDialog","analysisPeriodDays","analysis_period_days","orderFrequency","order_frequency_days","replenishmentWarehouse","replenishment_warehouse_name","LowStockPurchasesController","ndProductLabelDesignCardController","ProductLabelDesign","ZOOM_FACTOR","setDefaultProductLabelDesign","productLabelDesign","emitProductLabelDesign","hasCustomLabelFeature","closed","productLabelDesigns","productLabelDesignScopeListener","previewProductVariant","colorCode","sizeCode","description_long","customText","fieldsClosed","layoutClosed","newProductLabelDesign","productLabelDesignBackup","getLabelPreviewStyle","labelWidth","getLabelWidth","labelHeight","getLabelHeight","label_top_margin","label_right_margin","label_bottom_margin","label_left_margin","getLabelRowStyle","getSheetPreviewMarginStyle","page_top_margin","page_right_margin","page_bottom_margin","page_left_margin","getTableRows","getTableCols","cols","isSkiped","start_at","getFieldFromPreviewProductVariant","field_name","custom_label","getStyleFromPreviewProductVariant","font_size","text_align","bold","italic","underline","spacer_height","getPreviewBarcodeStyle","getFieldByFieldName","imgWidth","imgHeight","swap","barcode_align","barcode_height","barcode_vertical","moveFieldForward","moveFieldBackward","layoutSelected","isCustomLayout","saveDesign","saveAsNewDesign","tmpProductLabelDesign","onProductLabelDesignChange","previousPricingTier","setSkipped","setStartAt","getPartNumber","page_layout","getButterflyCellStyle","style","withMM","multilabel_width","getButterflyRowStyle","label_height","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","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","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","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","SyncOrderFromSiteDialogController","originId","onlyMissingOrders","onlyWarningOrders","dateRange","date_start","date_end","origin_id","only_missing_orders","only_warning_orders","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","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","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","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","NewPresaleDialogController","newSeason","savingSeason","newBrand","savingBrand","presales","saveSeason","saveBrand","WholesalePresalePurchasesController","WholesalePresaleProductsController","defaultRow","substr","newProduct","ProductionData","subcontent@app.manufacture.productions.new","subcontent@app.manufacture.productions.production","ProductionOrderData","WholesalePresalePreordersController","getCreatePurchasesStatus","creatingPurchases","creating_purchase_orders","pullCreatePurchasesStatus","customer_name","showroom_name","sales_agent_name","createPurchases","presale_order_ids","presale_collection_id","createPendingPurchases","newPreorder","WholesalePresaleDetailsController","generateClicked","collectionForm","newBrandAdded","newSeasonAdded","generateCSV","selectedWholesalePricingTier","selectedRetailPricingTier","presalesCSV","wholesale_pricing_tier_id","retail_pricing_tier_id","generatePDF","_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","UsersBottomSheetController","listUsers","setUser","NumericBottomSheetController","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","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","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","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","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","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","UpgradePlanController","FeatureService","featureData","getFeatureDict","purchaseAddOn","content@signup","CompleteSignUpTwoDialogController","SignupGetResult","SignupGetStatus","SignupTwo","signupGetResult","signupGetStatus","signUpLoaded","generationInProgress","getFormVersion","signUp","form_version","getErrorMessage","ERROR_01003_TOKEN_IS_NULL","ERROR_01004_TOKEN_NOT_FOUND","ERROR_01005_TOKEN_ALREADY_VALIDATED","ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS","ERROR_01011_DATA_ALREADY_GENERATED","formDoneCallback","signupFinished","finished","errorVerifiedAt","verified_at","ERROR_01010_DATA_GENERATION_IN_PROGRESS","SalesController","reloadSales","reloadSalesTimeout","getCurrentNavItem","totalsByStatus","status_counts","TYPE_CUSTOMER","TYPE_SALES_AGENT","salesTypes","showDateFilter","selectedCustomer","filterSalesAgent","filterSalesAgentInstance","toggleSidenavDesktop","customerQuerySearch","handleNavClick","selectedSalesAgent","WholesaleSaleController","changeOrderStatus","isPreorderPage","saleOrderStatus","deleteSale","barcodeLogOpened","cancelSale","WholesalePresalesController","filtersNotifications","newCollection","WholesalePresaleController","deleteCollection","securityWord","checkSecurityWord","answer","DeliveriesController","getStatusListByDict","filterDateRange","statusList","filterSourceWarehouse","dicFilterColumns","filter_status","filter_source_warehouse","getHours","updateProviderFilter","sale_order_autocode","invoice_payment_status","WholesaleB2BEcommercesController","countB2bEcommerces","showOldCreateB2bButton","WholesaleB2BEcommerceController","B2BEcommerce","B2B_ECOMMECE_MENU_TYPES","b2bEcommerce","searchPricingTier","saveingB2bEcommerce","saveB2bEcommerce","getLeatTimePreview","global_lead_time_prefix","global_lead_time","global_lead_time_units","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","parsedDiscount","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","TransfersController","reloadTransfers","reloadTransfersTimeout","transferTypes","transfersTypes","InventoryTransferController","StocktakingsController","stocktakingStatuses","fullname","InventoryStocktakingController","getStatusColor","showStocktakingHistoricFunc","InventoryStocksController","availableWarehousesIds","contains","checkboxesStatuses","firstRow","filterStock","gotoProductDetail","inStockChanged","PurchasesCalendarController","filterSubcategories","calendarType","currentYear","popsByMonth","prevYear","loadOrderProductPurchases","nextYear","getPopsOrPodps","podpsByMonth","popByProductId","purchaseOrderDeliveryProducts","podp","order_product_variant__purchase_order_product__product","order_product_variant__purchase_order_product__product_code","order_product_variant__purchase_order_product__product_name","order_delivery__expected_at","received_amount__sum","order_delivery__purchase_order","order_delivery__autocode","saveFiltersStatus","InventoryPurchaseController","showInvoicesTab","PurchasesController","EXPIRING_DATE_PAYMENT_STATUS","reloadPurchases","reloadPurchasesTimeout","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","InventoryCollectionController","InventoryAdjustmentController","AdjustmentsController","filterByReplenishment","VeriFactuController","HandlerEventsController","reloadEvents","AppsController","EcommerceSortingController","orderedProductsList","orderedProductsDict","changes","gridOpts","addProduct","savePositions","clearPositions","dragEnd","cleanProduct","addAllList","sortProducts","category_position","subcategory_position","brand_position","season_position","checkSubcategory","hasSubcategory","EcommerceSitesController","newSite","EcommerceSiteController","startPullingStatus","site_products","site_products_synchronizing","site_products_waiting_to_synchronize","deleteSite","sync","syncProducts","syncStock","syncPrices","importProducts","importOrder","importMissingProducts","importVariantCategories","getSyncStockClass","importVariantCategoriesDisabled","EcommerceScanAndGoController","scanning","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","ContactsController","reloadContacts","isContactsPage","reloadContactsTimeout","listType","openContactDialog","importContactsDialog","newCustomer","ContactController","CONTACT_TYPE_CUSTOMER","personDeletedWatcher","deletedPersonId","personSavedWatcher","existingPersonIndex","AnalyticsWholesaleDashboardController","channels","selectedChannel","selectStoreTimeout","selectChannel","channel","changeTabToRealtime","changeTabToPerformance","AnalyticsStartController","COMPANY_PLANS","DASHBOARD_ITEM_TYPES","banners","bannerClicked","banner","panel_sref","getBannerFlex","ui_flex_sm","ui_flex_xl","ui_flex","getBannerImage","image_sm","image_xl","isFreemium","FREEMIUM","employees_working_list","employees_working_list_str","user__first_name","user__last_name","SaleAnalyticsController","DynamicReport","dataLoaded","salesDynamicReport","Promise","metadata","AnalyticsRetailDashboardController","changeTabToProducts","changeTabToCategories","ReportsReportController","translate","RETAIL_SALES","fileFormat","toggleCheckboxValue","showHeaderItems","ProductAnalyticsController","productsDynamicReport","staticPresetFilters","subtract","startOf","endOf","metric_headers","AnalyticsInventoryController","AnalyticsHealthController","PaymentsController","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","content@app.pages_auth_register-v2","RegisterV2Controller","AUTH_EVENTS","rootScope","authEvents","loginFailed","content@app.pages_auth_login-v3","LoginV3Controller","logging","serverError","login","rememberPassword","redirectFreemiumPage","loginSuccess","loginForm","typingUsername","passwordRecovery","content@app.pages_auth_login-v2","LoginV2Controller","content@app.pages_auth_login","content@app.pages_auth_lock","content@app.pages_auth_forgot-password","ForgotPasswordController","isValidEmail","RegExp","resetPasswordRequest","typingEmail","forgotPasswordForm","component","transclude","bindings","$onInit","registerFilter","each","ngModel","$setViewValue","$render","$root","toggleFilter","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","ndOrderProductVisualizationOptionsController","localStorageKey","orderByDict","showProductOptions","openViewOptionsMenu","saveVisualizationOptionsFromLocalStorage","changeProductsOrder","sendTaxEvent","changeProductsFilters","getVisualizationOptionsFromLocalStorage","resetLocalStorage","taxesSelected","ndSearchProductInOrderController","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","wbListItemsRow","STATUS_COLORS","showStatusTags","isOpen","wbListItems","orderItems","initializeSelected","outputSelectedOrderItems","ORDERBY_NAME","ORDERBY_ACTION","ORDERBY_PAID","filterIds","findString","auxArray","sortAndToggleIf","wbNewOrderInvoice","showSubtotal","outputTotal","hideTitle","getSubTotal","getTotalTax","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","msMasonryController","defaultOpts","columnCount","respectItemOrder","reLayoutDebounce","md","sm","xs","reLayoutTimeout","reLayout","containerPos","columnWidth","referenceArr","xPos","yPos","refTop","transform","waitImagesLoaded","imagesLoaded","msMasonry","pre","msMaterialColorPickerController","$mdColorPalette","fuseGenerator","activateHueSelection","palette","hues","selectedPalette","selectedHues","removeColor","hue","updateModel","updateSelectedColor","bgColorValue","rgba","palettes","fgColorValue","contrast","msModelType","modelCtrl","$viewValue","$selectedColor","controllers","replaceWith","msInfoBarDirective","removeInfoBar","$destroy","totalSteps","forms","firstStep","lastStep","currentStepInvalid","previousStepInvalid","formsIncomplete","formCtrl","msDatepickerFix","msDatepickerFixConfig","$formatters","$parsers","utcOffset","templatePath","card","cardTemplateLoaded","WorkdayService","WORKDAY_STATUSES","Workday","NOT_STARTED","workday","pause","true","utils","precision","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","ndUserAutocompleteController","excludeMe","userChanged","defaultDate","secondaryText","isAi","infoTooltip","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","ndPosOrderProductVariantsTableController","pos_order_product_variants_copy","showSave","canEditPosOrderProductVariantDiscount","getMinimumAmount","hideStockDialog","finishDiscountEdition","canEditPopvLine","ndPosOrderPaymentMethodsCardController","$$hashKey","assignPending","totalPending","showNoPaymentMethods","callUpdateOrder","regidterActivityId","paymentMethodEditingDisabled","ndPosOrderFulfillmentCardController","packWithSendcloud","refundProductsError","checkMinMaxAmount","amountUpdated","changeFulfillment","amount_dict","total_refund_dict","refund_payment_method","scanAndGo","weight_dict","shipping_box_dict","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","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","ndNoFloat","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","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","ndVerifactuBadgeController","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","ndHandlerEventsListController","idCellTemplate","operationCellTemplate","columnConfig","statusCellTemplate","getHeader","getCorrectiveOf","correctiveState","correctiveStateParams","getCorrectedBy","correctedByStates","correctedByStateParams","correctedInv","getReplacedBy","replacedByState","replacedByStateParams","getReplacementOf","replacementOfStates","replacementOfStateParams","replacementInv","getCancellationOf","cancellationOfState","cancellationOfStateParams","getCancelledBy","cancelledByState","cancelledByStateParams","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","extra","getText","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","QuickPanelController","cloud","retro","posts","postsByState","postsFilter","hasWorkActivityFeature","closeQuickPanel","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","SignUpNavigationController","msScrollOptions","appname","NavigationController","newFeatureBadge","PreviewPanelController","previewTemplate","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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G,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAIC,EAAQ,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IA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W,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,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cACA,UACA,2BACA,oBAGA,WAGA,iBAGA,cAGA,kBAxmBF,oBAEA,oBA6mBE,uBACA,uBACA,uBACA,qBACA,2BA3mBF,iCACE,gCA6mBA,+BACA,6BACA,uBACA,uBACA,4BACA,wBACA,6BACA,qBACA,wCACA,uBACA,wBACA,4BACA,wBACA,uBACA,6BACA,0BACA,uCACA,sCAGA,uCACA,iDACA,+CACA,4BACA,oCACA,kCACA,sCACA,qBA3mBA,oBA6mBA,0BA3mBA,+BACA,wBACA,iBACA,kBA6mBA,qBA3mBA,6BACA,mCACA,0BA6mBA,qBA3mBA,kBACA,qBA6mBA,kBA3mBA,8BA6mBA,gCACA,uBA3mBA,sCA6mBA,2BACA,8BACA,kCA3mBA,wCA6mBA,wBA3mBA,4BA6mBA,6BACA,0BACA,kDACA,uCA3mBA,gDA6mBA,uCACA,mDACA,mCA3mBA,0DA6mBA,8BACA,sCACA,6BA3mBA,uBA6mBA,uBACA,yBACA,gCA3mBA,wBA6mBA,qBACA,0BACA,iCA3mBA,2BA6mBA,mCACA,4BACA,4CACA,6BACA,uBACA,qBACA,qBACA,2BACA,uBACA,0BACA,uCACA,+BACA,8BACA,8BA3mBA,mDA6mBA,mCACA,4BACA,2BACA,mCACA,kCACA,wDACA,4CACA,qDACA,oDACA,6DACA,8CACA,iDACA,mCACA,uDACA,0DACA,0CACA,gCACA,0BAGA,6BACA,+CAGA,oBACA,wBACA,6BACA,iCACA,0BACA,oBACA,gBACA,0BACA,iCACA,gCAGA,cACA,iBACA,gBACA,eACA,gBACA,gBACA,kBACA,eACA,WACA,gBA3mBA,cA6mBA,uBACA,0BACA,oB,KAIJ,CAAA,WACE,aAEAD,QACGC,OAAO,MAAA,EA1mBRi+S,SAAS,mCAAiB,CACxB8/H,uBAAuB,CA6mBrBr3a,MAAO,4CACPyC,KAAM,2CA3mBV60a,eAAS,IAAAryX,KAAA,YAAA,EACPsyX,WAAa,E,EA8mBbC,eAAkB,CAChBx3a,MAAO,oCACPyC,KAAM,mCACN60a,eAAgB,IAAIryX,KAAK,YAAA,EA3mBhCsyX,WAAY,E,EA8mBPE,kCAAqC,CA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","file":"scripts/app-808980162d.a0e527a9.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('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('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('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('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('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('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/*jshint esversion: 7 */\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ReplenishmentsByWarehouseController', ReplenishmentsByWarehouseController);\n\n  /** @ngInject */\n  function ReplenishmentsByWarehouseController(\n    $scope,\n    $mdToast,\n    $timeout,\n    $mdSidenav,\n    $filter,\n    api,\n    Session,\n    HTTP_STATUS\n  ) {\n\n    $scope.$parent.vm.currentNavItem = 'by_warehouse';\n    var vm = this;\n    vm.performingAnalysis = false;\n\n\n    // Methods\n    vm.performAnalysis = performAnalysis;\n\n    function performAnalysis() {\n      if (vm.performingAnalysis) {\n        return;\n      }\n      vm.performingAnalysis = true;\n      api.inventories.productVariants.save({\n        option: 'perform-low-stock-analysis'\n      }, function(response, fn, status) {\n        if (status !== HTTP_STATUS.HTTP_202_ACCEPTED) {\n          vm.performingAnalysis = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n\n  }\n})();\n\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('LowStockPurchasesByProviderController', LowStockPurchasesByProviderController);\n\n  /** @ngInject */\n  function LowStockPurchasesByProviderController(\n    $scope,\n    Session,\n    $timeout,\n    $filter,\n    UiGridService,\n    api,\n    $mdToast,\n    HTTP_STATUS,\n    $mdDialog\n  ) {\n    // Data\n    $scope.$parent.vm.currentNavItem = 'purchases_by_provider';\n\n    var vm = this;\n    vm.scope = $scope;\n    vm.loading = $scope.loading;\n\n    var PULLING_DELAY_MS = 5000;\n\n    vm.company = Session.company;\n    vm.totalDraft = {};\n    vm.exporting = false;\n\n    // Grid Configuration\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {\n        warehouses: [],\n        providers: [],\n        seasons: [],\n        brands: [],\n        categories: [],\n        subcategories: []\n      },\n      page: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    //Methods\n    vm.getGridPage = getGridPage;\n    vm.createPurchaseDraft = createPurchaseDraft;\n    vm.downloadCSV = downloadCSV;\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeGrid,\n      gridMenuCustomItems: [\n        {\n          title: $filter('translate')('PRODUCTS.RESTORE_COLUMNS'),\n          action: function ($event) {\n            restoreGridColumns();\n          },\n          order: 2\n        }\n      ],\n      useExternalPagination: true\n    });\n\n\n    function initializeGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function (changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.page = newPage;\n          vm.status.pageSize = pageSize;\n          saveStatus();\n          getGridPage(false);\n        }\n      });\n\n      vm.gridApi.core.on.sortChanged($scope, function (grid, sortColumns) {\n        if (vm.uiGridInitialized) {\n          vm.status.ordering = UiGridService.getSortString(grid, sortColumns);\n          saveStatus();\n          getGridPage(false);\n        }\n      });\n\n      vm.gridApi.colResizable.on.columnSizeChanged($scope, function (colDef, deltaChange) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      setGridColumns();\n\n      $timeout(function () {\n        getGridPage(true);\n      }, 200);\n    }\n\n    function saveStatus() {\n      vm.status.state = vm.gridApi.saveState.save();\n      localStorage.setItem(Session.company.id + '::UIGridPurchaseByProviderController', JSON.stringify(vm.status));\n    }\n\n    function getColumnStatusVisibility(field, defaultValue, avoidState) {\n      if (vm.status.state.columns) {\n        var column = vm.status.state.columns.find(function (column) {\n          return column.name === field;\n        });\n        if (!avoidState && column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n    function restoreGridColumns() {\n      vm.columns = {};\n      vm.gridOptions.columnDefs = [];\n      setGridColumns(true);\n      saveStatus();\n      getGridPage(false);\n    }\n\n    function setGridColumns(avoidState) {\n      var orderCellHtml =\n        '<md-button class=\"md-button md-primary\" ng-click=\"grid.appScope.vm.createPurchaseDraft(row.entity.provider_external_id, row.entity.location_external_id)\">' +\n        '<div layout=\"row\" layout-align=\"center center\">' +\n        '<md-icon class=\"md-primary-fg\" md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/cart-plus.59deb4ea.svg\"></md-icon>' +\n        '<span translate=\"LOW_STOCK.CREATE_PURCHASE_DRAFT\"></span>' +\n        '</md-button>';\n\n      angular.extend(vm.columns, {\n        name: {\n          displayName: $filter('translate')('LOW_STOCK.PROVIDER'),\n          headerTooltip: $filter('translate')('LOW_STOCK.PROVIDER'),\n          field: 'provider_name',\n          permission: true,\n          visible: getColumnStatusVisibility('provider_name', true, avoidState),\n          cellClass: 'cell-padding',\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: false\n        },\n        leadTime: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n          field: 'replenishment_stockout_losses_date',\n          permission: true,\n          visible: getColumnStatusVisibility('leadTime', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_lead_time | number: 0 }}</span>'\n        },\n        rotation: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.ROTATION'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.ROTATION'),\n          field: 'rotation',\n          permission: true,\n          visible: getColumnStatusVisibility('rotation', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.rotation | number: 0 }}</span>'\n        },\n        stockoutLosses: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n          field: 'replenishment_stockout_losses',\n          permission: true,\n          visible: getColumnStatusVisibility('stockoutLosses', true, avoidState),\n          minWidth: 100,\n          cellTemplate:\n            '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{ row.entity.replenishment_stockout_losses | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{\\'INVENTORY_DASHBOARD.UNTIL\\' | translate}} ' +\n            '{{row.entity.replenishment_stockout_losses_date | date: \\'dd/MM\\'}}' +\n            '</small></div>'\n        },\n        stock: {\n          displayName: $filter('translate')('LOW_STOCK.STOCK'),\n          headerTooltip: $filter('translate')('LOW_STOCK.STOCK'),\n          field: 'stock',\n          permission: true,\n          visible: getColumnStatusVisibility('stock', true, avoidState),\n          minWidth: 75,\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{row.entity.stock | number: 0}}</span>'\n        },\n        stockValue: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_VALUE'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_VALUE'),\n          field: 'stock_value',\n          permission: true,\n          visible: getColumnStatusVisibility('stockValue', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{row.entity.stock_value | price}} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n        },\n        stockToOrder: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n          field: 'replenishment_stock_to_order',\n          permission: true,\n          visible: getColumnStatusVisibility('stockToOrder', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_stock_to_order | number: 0 }}</span>'\n        },\n        stockToOrderValue: {\n          displayName: $filter('translate')('LOW_STOCK.ORDER_VALUE'),\n          headerTooltip: $filter('translate')('LOW_STOCK.ORDER_VALUE'),\n          field: 'replenishment_stock_to_order_value',\n          permission: true,\n          visible: getColumnStatusVisibility('stockToOrderValue', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_stock_to_order_value | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n        },\n        totalDraft: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n          field: 'total_draft',\n          permission: true,\n          visible: getColumnStatusVisibility('order', true, avoidState),\n          enableSorting: false,\n          pinnedRight: true,\n          enablePinning: false,\n          cellTemplate:\n            '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{ grid.appScope.vm.totalDraft[row.entity.provider_external_id][row.entity.location_external_id][\"total\"]  }}</span>' +\n            '<a class=\"text-right reposition-link\" ng-if=\"grid.appScope.vm.totalDraft[row.entity.provider_external_id][row.entity.location_external_id][\\'purchase_order_autocode\\']\" target=\"_blank\" ng-href=\"/inventory/purchases/{{grid.appScope.vm.totalDraft[row.entity.provider_external_id][row.entity.location_external_id][\\'purchase_order_id\\']}}/products\">' +\n            '{{grid.appScope.vm.totalDraft[row.entity.provider_external_id][row.entity.location_external_id][\"purchase_order_autocode\"]}}' +\n            '<md-icon md-font-icon=\"icon-open-in-new\"></md-icon>' +\n            '</a></div>'\n        },\n        order: {\n          displayName: $filter('translate')('LOW_STOCK.CREATE_PURCHASE_DRAFT'),\n          headerTooltip: $filter('translate')('LOW_STOCK.CREATE_PURCHASE_DRAFT'),\n          field: 'order',\n          permission: true,\n          visible: getColumnStatusVisibility('order', true, avoidState),\n          cellTemplate: orderCellHtml,\n          editableCellTemplate: orderCellHtml,\n          enableSorting: false,\n          pinnedRight: true,\n          enablePinning: false,\n          enableCellEdit: true,\n          enableCellEditOnFocus: true,\n          enableColumnMenu: false,\n        }\n      });\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getGridPostBody() {\n      var d = {};\n\n      // Pagination\n      d.page = vm.status.page;\n      d.pageSize = vm.status.pageSize;\n\n      // Ordering\n      d.orderBy = vm.status.ordering;\n\n      // Search\n      d.search = vm.status.search;\n\n      // Columns\n      d.columns_names = Object.values(vm.columns).map(function (column) {\n        if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n          return column.displayName;\n        }\n      }).filter(Boolean);\n\n      d.columns_fields = Object.values(vm.columns).map(function (column) {\n        if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n          return column.field;\n        }\n      }).filter(Boolean);\n\n      return d;\n    }\n\n    var controller = new AbortController();\n\n    function getGridPage(performAnalysisIfEmpty, pullingIfEmpty) {\n      if (pullingIfEmpty === undefined) {\n        pullingIfEmpty = true;\n      }\n      if (vm.loading) {\n        controller.abort();\n        controller = new AbortController();\n      }\n\n      vm.loading = true;\n\n      var url = api.urls.inventories.warehouses.replace(':id/', '').replace(':option', 'purchase_report');\n\n      fetch(url, {\n        method: 'POST',\n        headers: {\n          'Authorization': 'Token ' + Session.token,\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(getGridPostBody()),\n        signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          vm.loading = false;\n          vm.uiGridInitialized = true;\n          vm.gridOptions.data = data.data;\n\n          vm.gridOptions.totalItems = data.recordsTotal;\n          if (performAnalysisIfEmpty && !data.data.length) {\n            $scope.performAnalysis();\n          }\n          if (data.data.length) {\n            vm.performingAnalysis = false;\n            vm.orderQuantities = {};\n            data.data.forEach(function (item) {\n              if (!vm.orderQuantities[item.item_external_id]) {\n                vm.orderQuantities[item.item_external_id] = {};\n              }\n              vm.orderQuantities[item.item_external_id][item.location_external_id] = item.replenishment_stock_to_order;\n            });\n            updateTotalDraft();\n            vm.gridApi.core.handleWindowResize(); // fix for grid not rendering correctly\n          }\n          $scope.$apply();\n          if (pullingIfEmpty && !data.data.length) {\n            $timeout(function () {\n              getGridPage(false, pullingIfEmpty);\n            }, PULLING_DELAY_MS);\n          }\n        })\n        .catch(function (error) {\n          throw error;\n        });\n    }\n\n    function createPurchaseDraft(providerId, replenishmentWarehouseId) {\n      api.inventories.warehouses.save({\n        id: replenishmentWarehouseId,\n        provider_id: providerId,\n        option: 'create_purchase_draft'\n      }, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          updateTotalDraft();\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('LOW_STOCK.PURCHASE_CREATED')).position('top right'));\n        } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST && response.message === 'Provider is required') {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('LOW_STOCK.PROVIDER_REQUIRED')).position('top right'));\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function updateTotalDraft() {\n      var providersIdsWithWarehousesIdsDict = [];\n      vm.gridOptions.data.forEach(function (item) {\n        providersIdsWithWarehousesIdsDict.push([item.provider_external_id, item.location_external_id]);\n      });\n      api.inventories.warehouses.save(\n        {\n          option: 'ai_purchase_draft_orders_totals',\n          provider_ids_with_warehouses_ids_dict: providersIdsWithWarehousesIdsDict\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.totalDraft = response.data;\n          }\n        }\n      );\n    }\n\n    function downloadCSV() {\n      if (vm.exporting) {\n        return;\n      }\n      vm.exporting = true;\n\n      var url = api.urls.inventories.warehouses.replace('/:id', '').replace(':option', 'store-purchases-by-provider-csv');\n      fetch(url + '?' + new URLSearchParams(getGridPostBody()), {\n        method: 'GET', headers: {\n          'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'\n        }, signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          if (data.success === true) {\n            $mdDialog.show(\n              $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'))\n            );\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.exporting = false;\n        });\n    }\n  }\n})\n();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('LowStockPurchasesByProductController', LowStockPurchasesByProductController);\n\n  /** @ngInject */\n  function LowStockPurchasesByProductController(\n    $scope,\n    Session,\n    $timeout,\n    $filter,\n    UiGridService,\n    BrandsData,\n    SeasonsData,\n    CategoriesData,\n    SubcategoriesData,\n    ProvidersData,\n    api,\n    $mdToast,\n    HTTP_STATUS,\n    $state,\n    InventoryConfiguration,\n    $mdDialog,\n    $document,\n    ERROR_CODES\n  ) {\n    // Data\n    $scope.$parent.vm.currentNavItem = 'purchases_by_product';\n    var PULLING_DELAY_MS = 5000;\n    var vm = this;\n\n    // Methods\n    vm.purchaseProductVariant = purchaseProductVariant;\n    vm.toggleFilterVisibility = toggleFilterVisibility;\n    vm.filterChanged = filterChanged;\n    vm.getGridProductsVariantsReplenishmentsPage = getGridProductsVariantsReplenishmentsPage;\n    vm.getCoverage = getCoverage;\n    vm.downloadCSV = downloadCSV;\n\n    // Grid Configuration\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {\n        providers: [],\n        warehouses: [],\n        seasons: [],\n        brands: [],\n        categories: [],\n        subcategories: []\n      },\n      dynamicFilters: {\n        providers: {\n          icon: 'icon-store',\n          title: 'LOW_STOCK.PROVIDER',\n          visible: false\n        },\n        availabilityStatuses: {\n          svgIcon: 'assets/images/custom-material-design-icons/playlist_add_check.9ce53b3a.svg',\n          title: 'INVENTORY_DASHBOARD.AVAILABILITY_STATUS',\n          visible: false\n        },\n        abcCategories: {\n          svgIcon: 'assets/images/custom-material-design-icons/abc.3172f407.svg',\n          title: 'INVENTORY_DASHBOARD.ABC_CATEGORY',\n          visible: false\n        },\n        brands: {\n          icon: 'icon-tag-outline',\n          title: 'INVENTORY_DASHBOARD.BRAND',\n          visible: false\n        },\n        categories: {\n          icon: 'icon-folder-multiple-outline',\n          title: 'INVENTORY_DASHBOARD.CATEGORY',\n          visible: false\n        },\n        subcategories: {\n          icon: 'icon-folder-outline',\n          title: 'INVENTORY_DASHBOARD.SUBCATEGORY',\n          visible: false\n        },\n        seasons: {\n          icon: 'icon-weather-sunny',\n          title: 'INVENTORY_DASHBOARD.SEASON',\n          visible: false\n        }\n      },\n      page: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    vm.seasons = SeasonsData.results;\n    vm.brands = BrandsData.results;\n    vm.categories = CategoriesData.results;\n    vm.subcategories = SubcategoriesData.results;\n    vm.providers = ProvidersData.results;\n    vm.orderQuantities = {};\n    vm.totalDraft = {};\n    vm.company = Session.company;\n    vm.configurationData = angular.copy(InventoryConfiguration.results[0]);\n\n    vm.abcCategories = ['A', 'B', 'C'];\n    vm.availabilityStatuses = [\n      'OUT_OF_STOCK',\n      'URGENT_ORDER',\n      'NON_URGENT_ORDER',\n      'IN_STOCK'\n    ];\n    vm.performingAnalysis = false;\n    vm.exporting = false;\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeProductVariantGrid,\n      gridMenuCustomItems: [\n        {\n          title: $filter('translate')('PRODUCTS.RESTORE_COLUMNS'),\n          action: function ($event) {\n            restoreGridColumns();\n          },\n          order: 2\n        }\n      ],\n      minimumColumnSize: 170\n    });\n\n    function initializeProductVariantGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function (changedColumn) {\n        if (vm.columns[changedColumn.colDef.field]) {\n          vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n        }\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.page = newPage;\n          vm.status.pageSize = pageSize;\n          saveStatus();\n          getProductVariantsGridPage(false);\n        }\n      });\n\n      vm.gridApi.core.on.sortChanged($scope, function (grid, sortColumns) {\n        if (vm.uiGridInitialized) {\n          resetPagination();\n          vm.status.ordering = UiGridService.getSortString(grid, sortColumns);\n          saveStatus();\n          getProductVariantsGridPage(false);\n        }\n      });\n\n      vm.gridApi.pinning.on.columnPinned($scope, function (colDef) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.colMovable.on.columnPositionChanged($scope, function (oldPosition, newPositio) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.colResizable.on.columnSizeChanged($scope, function (colDef, deltaChange) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      setProductVariantGridColumns();\n\n      $timeout(function () {\n        loadStatus();\n        getProductVariantsGridPage(true);\n      }, 200);\n\n    }\n\n    function restoreGridColumns() {\n      vm.columns = {};\n      vm.gridOptions.columnDefs = [];\n      setProductVariantGridColumns(true);\n      saveStatus();\n      getProductVariantsGridPage(false);\n    }\n\n    function saveStatus() {\n      vm.status.state = vm.gridApi.saveState.save();\n      localStorage.setItem(Session.company.id + '::UIGridPurchaseByProductController', JSON.stringify(vm.status));\n    }\n\n    function loadStatus() {\n      var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::UIGridPurchaseByProductController'));\n      if (loadedStatus) {\n        angular.extend(vm.status, loadedStatus);\n        if (vm.gridApi) {\n          vm.gridApi.saveState.restore($scope, vm.status.state);\n        }\n      }\n    }\n\n\n    function setProductVariantGridColumns(avoidState) {\n      var orderCellHtml =\n        '<div class=\"cell-middle pv-0\" layout=\"row\" layout-align=\"center center\" flex>' +\n        '<div flex>' +\n        '<input type=\"number\"' +\n        'ng-model=\"grid.appScope.vm.orderQuantities[row.entity.item_external_id][row.entity.location_external_id]\"' +\n        'class=\"nd-input text-right\">' +\n        '</div>' +\n        '<md-button class=\"md-icon-button no-margin\"' +\n        'ng-click=\"grid.appScope.vm.purchaseProductVariant(row.entity.item_external_id, row.entity.location_external_id, row.entity.provider_external_id, row.entity.replenishment_stock_to_order)\">' +\n        '<md-tooltip> {{\"LOW_STOCK.CREATE_PURCHASE_DRAFT\" | translate }}</md-tooltip>' +\n        '<md-icon class=\"md-primary-fg\" md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/cart-plus.59deb4ea.svg\"></md-icon>' +\n        '</md-button>' +\n        '</div>';\n\n      angular.extend(vm.columns, {\n        image: {\n          displayName: '',\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.AVAILABILITY_STATUS'),\n          field: 'cover_thumbnail',\n          permission: true,\n          pinnedLeft: true,\n          enableColumnMenu: false,\n          enableHiding: true,\n          minWidth: 50,\n          width: 50,\n          maxWidth: 50,\n          cellClass: '',\n          cellTemplate:\n            '<div layout=\"row\" layout-align=\"start center\">' +\n            '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' +\n            '<div ng-if=\"!row.entity.cover_thumbnail\" layout=\"row\" layout-align=\"center center\" class=\"w-48\">' +\n            '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail\"></md-icon>' +\n            '</div>' +\n            '<img ng-if=\"row.entity.cover_thumbnail\" width=\"32px\" ng-src=\"{{grid.getCellValue(row, col)}}\" lazy-src>' +\n            '</a>' +\n            '</div>',\n          enableSorting: false\n        },\n        sku: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.SKU'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SKU'),\n          field: 'item_sku',\n          permission: true,\n          visible: getColumnStatusVisibility('sku', true, avoidState),\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' + '{{row.entity.item_sku || \\'-\\'}}' + '</a>' +\n            '</div>'\n        },\n        name: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.NAME'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.NAME'),\n          field: 'item_name',\n          permission: true,\n          visible: getColumnStatusVisibility('item_name', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' + '{{row.entity.item_name || \\'-\\'}}' + '</a>' +\n            '</div>'\n        },\n        code: {\n          displayName: $filter('translate')('PRODUCT.CODE'),\n          headerTooltip: $filter('translate')('PRODUCT.CODE'),\n          field: 'item_code',\n          permission: true,\n          visible: getColumnStatusVisibility('item_code', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' + '{{row.entity.item_code || \\'-\\'}}' + '</a>' +\n            '</div>'\n        },\n        barcode: {\n          displayName: $filter('translate')('PRODUCT.BARCODE'),\n          headerTooltip: $filter('translate')('PRODUCT.BARCODE'),\n          field: 'item_barcode',\n          permission: true,\n          visible: getColumnStatusVisibility('item_barcode', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' + '{{row.entity.item_barcode || \\'-\\'}}' + '</a>' +\n            '</div>'\n        },\n        size: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.SIZE'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SIZE'),\n          field: 'size',\n          permission: true,\n          visible: getColumnStatusVisibility('size', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.size || \\'-\\'}}</div>',\n          enableSorting: false\n        },\n        color: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.COLOR'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.COLOR'),\n          field: 'color',\n          permission: true,\n          visible: getColumnStatusVisibility('color', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.color || \\'-\\'}}</div>',\n          enableSorting: false\n        },\n        brand: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.BRAND'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.BRAND'),\n          field: 'brand_name',\n          permission: true,\n          visible: getColumnStatusVisibility('brand', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.brand_name || \\'-\\'}}</div>'\n        },\n        category: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.CATEGORY'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.CATEGORY'),\n          field: 'category',\n          permission: true,\n          visible: getColumnStatusVisibility('category', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.category || \\'-\\'}}</div>',\n          enableSorting: false\n        },\n        subcategory: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.SUBCATEGORY'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SUBCATEGORY'),\n          field: 'subcategory',\n          permission: true,\n          visible: getColumnStatusVisibility('subcategory', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.subcategory || \\'-\\'}}</div>',\n          enableSorting: false\n        },\n        season: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.SEASON'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SEASON'),\n          field: 'season_name',\n          permission: true,\n          visible: getColumnStatusVisibility('season', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.season_name || \\'-\\'}}</div>'\n        },\n        provider: {\n          displayName: $filter('translate')('LOW_STOCK.PROVIDER'),\n          headerTooltip: $filter('translate')('LOW_STOCK.PROVIDER'),\n          field: 'item_provider',\n          permission: true,\n          visible: getColumnStatusVisibility('provider', true, avoidState),\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.provider_name || \\'-\\'}}</div>'\n        },\n        availabilityStatus: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.AVAILABILITY'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.AVAILABILITY'),\n          field: 'availability_status',\n          permission: true,\n          pinnedLeft: false,\n          enableColumnMenu: false,\n          enableHiding: true,\n          cellClass: 'cell-padding',\n          width: 50,\n          cellTemplate:\n            '<div layout=\"row\" layout-align=\"start center\">' +\n            '<div class=\"replenishment-stock-status {{row.entity.availability_status}} ml-8\">' +\n            '<md-tooltip>' +\n            '{{\\'INVENTORY_DASHBOARD.\\' + row.entity.availability_status | translate}}</md-tooltip>' +\n            '</div>' +\n            '</div>',\n          enableSorting: false\n        },\n        abcCategory: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.ABC'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.ABC'),\n          field: 'item_abc_category',\n          permission: true,\n          visible: getColumnStatusVisibility('abcCategory', false, avoidState),\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"abc-box type-{{row.entity.item_abc_category}}\">{{row.entity.item_abc_category}}</span>'\n        },\n        stock_in_transit: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_IN_TRANSIT'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_IN_TRANSIT'),\n          field: 'stock_in_transit',\n          permission: true,\n          visible: getColumnStatusVisibility('stock_in_transit', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          enableSorting: false\n        },\n        stock_on_hand: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_ON_HANDS'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_ON_HANDS'),\n          field: 'stock_on_hand',\n          permission: true,\n          visible: getColumnStatusVisibility('stock_on_hand', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          enableSorting: false,\n          enableCellEdit: true\n        },\n        globalStock: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK'),\n          field: 'global_stock',\n          permission: true,\n          visible: getColumnStatusVisibility('global_stock', true, avoidState),\n          cellClass: 'cell-right cell-padding'\n        },\n        totalUnitsSold: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_UNITS_SOLD'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_UNITS_SOLD'),\n          field: 'total_units_sold',\n          permission: true,\n          visible: getColumnStatusVisibility('total_units_sold', false, avoidState),\n          cellClass: 'cell-right cell-padding'\n        },\n        averageDailySales: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.AVERAGE_DAILY_SALES'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.AVERAGE_DAILY_SALES'),\n          field: 'avg_daily_total_units_sold',\n          permission: true,\n          visible: getColumnStatusVisibility('averageDailySales', false, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{row.entity.avg_daily_total_units_sold | number: 2 }}</span>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{row.entity.avg_daily_total_units_sold * 7 | number: 0 }} ' +\n            '{{\\'INVENTORY_DASHBOARD.PER_WEEK\\' | translate}}' +\n            '</small></div>'\n        },\n        leadTime: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n          field: 'replenishment_lead_time',\n          permission: true,\n          visible: getColumnStatusVisibility('leadTime', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span\">{{ row.entity.replenishment_lead_time | number: 0 }}</span>'\n        },\n        rop: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.ROP'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.ROP'),\n          field: 'replenishment_rop',\n          permission: true,\n          visible: getColumnStatusVisibility('rop', false, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_rop | number:  0 }}</span>'\n        },\n        stockoutLosses: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n          field: 'replenishment_stockout_losses',\n          permission: true,\n          visible: getColumnStatusVisibility('stockoutLosses', true, avoidState),\n          cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{ row.entity.replenishment_stockout_losses | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{\\'INVENTORY_DASHBOARD.UNTIL\\' | translate}} ' +\n            '{{row.entity.replenishment_stockout_losses_date | date: \"dd/MM\"}}' +\n            '</small></div>'\n        },\n        expectedDemand: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_DEMAND'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_DEMAND'),\n          field: 'expected_demand',\n          permission: true,\n          visible: getColumnStatusVisibility('expected_demand', true, avoidState),\n          cellTemplate:\n            '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{ row.entity.expected_demand | number: 0 }}</span>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{\\'INVENTORY_DASHBOARD.UNTIL\\' | translate}} ' +\n            '{{row.entity.expected_demand_date | date: \\'dd/MM\\'}}' +\n            '</small></div>'\n        },\n        expectedSales: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_SALES'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_SALES'),\n          field: 'expected_sales',\n          permission: true,\n          visible: getColumnStatusVisibility('expected_sales', false, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.expected_sales | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n        },\n        stockTurnDraft: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN'),\n          field: 'stock_turn',\n          permission: true,\n          visible: getColumnStatusVisibility('stock_turn', false, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{ row.entity.global_stock / row.entity.avg_daily_total_units_sold | number: 0 }}</span>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{ row.entity.global_stock / row.entity.avg_daily_total_units_sold / 7 | number: 2 }} ' +\n            '{{\\'INVENTORY_DASHBOARD.WEEKS\\' | translate}}' +\n            '</small></div>'\n        },\n        stockToOrder: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n          field: 'replenishment_stock_to_order',\n          permission: true,\n          visible: getColumnStatusVisibility('stockToOrder', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_stock_to_order | number: 0 }}</span>'\n        },\n        ddp: {\n          displayName: $filter('translate')('LOW_STOCK.DDP'),\n          headerTooltip: $filter('translate')('LOW_STOCK.DDP'),\n          field: 'unit_price',\n          permission: true,\n          visible: getColumnStatusVisibility('unit_price', false, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.unit_price | number: 2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n        },\n        demand_value: {\n          displayName: $filter('translate')('LOW_STOCK.ORDER_VALUE'),\n          headerTooltip: $filter('translate')('LOW_STOCK.ORDER_VALUE'),\n          field: 'demand_value',\n          permission: true,\n          visible: getColumnStatusVisibility('demand_value', false, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.demand_value | number: 2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n        },\n        totalDraft: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n          field: 'total_draft',\n          permission: true,\n          visible: getColumnStatusVisibility('order', true, avoidState),\n          enableSorting: false,\n          pinnedRight: true,\n          enablePinning: false,\n          cellTemplate:\n            '<div flex class=\"cell-middle\" layout=\"column\">' +\n            '<div layout=\"row\" layout-align=\"end center\" flex>' +\n            '<span class=\"mr-4\">{{ grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\"total\"] }} </span>' +\n            '<span class=\"mr-4\" ng-if=\"grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\\'purchase_order_autocode\\']\">| </span>' +\n            '<a class=\"text-right reposition-link\" ng-if=\"grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\\'purchase_order_autocode\\']\" target=\"_blank\" ng-href=\"/inventory/purchases/{{grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\\'purchase_order_id\\']}}/products\">' +\n            '{{grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\"purchase_order_autocode\"]}}' +\n            '<md-icon md-font-icon=\"icon-open-in-new\"></md-icon>' +\n            '</a></div>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{ grid.appScope.vm.getCoverage(row.entity) | number: 0 }}' +\n            ' {{\\'INVENTORY_DASHBOARD.DAYS_COVERAGE\\' | translate}}' +\n            '</small>' +\n            '</div>'\n        },\n        order: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.REPLENISH'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.REPLENISH'),\n          field: 'order',\n          permission: true,\n          visible: getColumnStatusVisibility('order', true, avoidState),\n          cellTemplate: orderCellHtml,\n          editableCellTemplate: orderCellHtml,\n          enableSorting: false,\n          pinnedRight: true,\n          enablePinning: false,\n          enableCellEdit: true,\n          enableCellEditOnFocus: true,\n          cellClass: 'cell-centered cell-padding'\n        },\n      });\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getCoverage(entity) {\n      var quantity = entity.global_stock + vm.orderQuantities[entity.item_external_id][entity.location_external_id];\n      return quantity / entity.avg_daily_total_units_sold;\n    }\n\n    function getColumnStatusVisibility(field, defaultValue, avoidState) {\n      if (vm.status.state.columns) {\n        var column = vm.status.state.columns.find(function (column) {\n          return column.name === field;\n        });\n        if (!avoidState && column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n    function getGridPostBody() {\n      var d = {};\n\n      // Pagination\n      d.page = vm.status.page;\n      d.page_size = vm.status.pageSize;\n\n      // Ordering\n      d.order_by = vm.status.ordering;\n\n      // Search\n      d.search = vm.status.search;\n\n      // Columns\n      d.columns_names = Object.values(vm.columns).map(function (column) {\n        if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n          return column.displayName;\n        }\n      }).filter(Boolean);\n\n      d.columns_fields = Object.values(vm.columns).map(function (column) {\n        if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n          return column.field;\n        }\n      }).filter(Boolean);\n\n      //Filters\n      vm.status.filters.providers && vm.status.filters.providers.length ? d.providers = vm.status.filters.providers : null;\n      vm.status.filters.seasons && vm.status.filters.seasons.length ? d.seasons = vm.status.filters.seasons : null;\n      vm.status.filters.brands && vm.status.filters.brands.length ? d.brands = vm.status.filters.brands : null;\n      vm.status.filters.categories && vm.status.filters.categories.length ? d.categories = vm.status.filters.categories : null;\n      vm.status.filters.subcategories && vm.status.filters.subcategories.length ? d.subcategories = vm.status.filters.subcategories : null;\n      vm.status.filters.abcCategories && vm.status.filters.abcCategories.length ? d.abc_categories = vm.status.filters.abcCategories : null;\n      vm.status.filters.availabilityStatuses && vm.status.filters.availabilityStatuses.length ? d.availability_statuses = vm.status.filters.availabilityStatuses : null;\n\n      return d;\n    }\n\n\n    function performAnalysis() {\n      if (vm.performingAnalysis) {\n        return;\n      }\n      vm.performingAnalysis = true;\n      api.inventories.productVariants.save({\n        option: 'perform-item-low-stock-analysis'\n      }, function (response, fn, status) {\n        if (status !== HTTP_STATUS.HTTP_202_ACCEPTED) {\n          vm.performingAnalysis = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function purchaseProductVariant(productVariantId, targetWarehouseId, providerId, replenishmentStockToOrder, quantity) {\n      if (typeof quantity === 'undefined') {\n        quantity = vm.orderQuantities[productVariantId][targetWarehouseId];\n      }\n      if (typeof quantity !== 'undefined') {\n        api.inventories.productVariants.save({\n          id: productVariantId,\n          option: 'purchase',\n          target_warehouse: targetWarehouseId,\n          provider_id: providerId,\n          quantity: quantity,\n          configuration_data: vm.configurationData,\n          replenishment_stock_to_order: replenishmentStockToOrder\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            updateTotalOnOrder();\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('LOW_STOCK.PURCHASE_CREATED')).position('top right'));\n          } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST && response.message === 'Provider is required') {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('LOW_STOCK.PROVIDER_REQUIRED')).position('top right'));\n          } else if (status === HTTP_STATUS.HTTP_409_CONFLICT &&\n            response.error === ERROR_CODES.ERROR_11001_OPTIMIZATION_CONFIGURATION_MINIMUM_QUANTITY_EXCEEDED ||\n            response.error === ERROR_CODES.ERROR_11002_OPTIMIZATION_CONFIGURATION_MAXIMUM_QUANTITY_EXCEEDED ||\n            response.error === ERROR_CODES.ERROR_11003_OPTIMIZATION_CONFIGURATION_MINIMUM_STOCK_EXCEEDED ||\n            response.error === ERROR_CODES.ERROR_11005_OPTIMIZATION_CONFIGURATION_QTY_NOT_MULTIPLE_MIN_QTY) {\n            $mdDialog.show({\n              controller: 'PurchasesByProductDialogController',\n              controllerAs: 'vm',\n              templateUrl: 'app/main/apps/inventory/views/low-stock/tabs/purchases/by_product/purchases-by-product-dialog.html',\n              parent: angular.element($document.find('body')),\n              clickOutsideToClose: true,\n              focusOnOpen: false,\n              locals: {\n                params: {\n                  configurationData: vm.configurationData,\n                  replenishmentStockToOrder: replenishmentStockToOrder,\n                  message: response.error,\n                  quantity: response.value,\n                  productId: response.product_id,\n                  limitMinQty: response.limit_min_qty || null,\n                  percentage: response.percentage || null,\n                  amount: response.amount || null,\n                  minStock: response.min_stock || null,\n                }\n              }\n            });\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        });\n      }\n    }\n\n    function updateTotalOnOrder() {\n      var located_product_variants = [];\n      vm.gridOptions.data.forEach(function (item) {\n        located_product_variants.push({\n          product_variant_id: item.item_external_id,\n          warehouse_id: item.location_external_id,\n          provider_id: item.provider_external_id\n        });\n      });\n      api.inventories.productVariants.save(\n        {\n          option: 'total-draft-on-ai-purchase-orders',\n          located_product_variants: located_product_variants\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.totalDraft = response.data;\n          }\n        }\n      );\n    }\n\n    var controller = new AbortController();\n\n    function getProductVariantsGridPage(performAnalysisIfEmpty, pullingIfEmpty) {\n      if (pullingIfEmpty === undefined) {\n        pullingIfEmpty = true;\n      }\n      if (vm.loading) {\n        controller.abort();\n        controller = new AbortController();\n      }\n\n      vm.loading = true;\n\n      var url = api.urls.inventories.productVariants.replace(':id/', '').replace(':option', 'purchase_report');\n\n      fetch(url, {\n        method: 'POST',\n        headers: {\n          'Authorization': 'Token ' + Session.token,\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(getGridPostBody()),\n        signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          vm.loading = false;\n          vm.uiGridInitialized = true;\n          vm.gridOptions.data = data.data;\n\n          vm.gridOptions.totalItems = data.recordsTotal;\n          if (performAnalysisIfEmpty && !data.data.length) {\n            performAnalysis();\n          }\n          if (data.data.length) {\n            vm.performingAnalysis = false;\n            vm.orderQuantities = {};\n            data.data.forEach(function (item) {\n              if (!vm.orderQuantities[item.item_external_id]) {\n                vm.orderQuantities[item.item_external_id] = {};\n              }\n              vm.orderQuantities[item.item_external_id][item.location_external_id] = item.replenishment_stock_to_order;\n            });\n            updateTotalOnOrder();\n            vm.gridApi.core.handleWindowResize(); // fix for grid not rendering correctly\n          }\n          $scope.$apply();\n          if (pullingIfEmpty && !data.data.length) {\n            $timeout(function () {\n              getProductVariantsGridPage(false, pullingIfEmpty);\n            }, PULLING_DELAY_MS);\n          }\n        })\n        .catch(function (error) {\n          $mdToast.show(\n            $mdToast.simple()\n              .textContent($filter('translate')('ERRORS.ERROR_04035_MISSING_REPLENISHMENT_WAREHOUSE_EXCEPTION'))\n              .action($filter('translate')('APPS.SETTING'))\n              .highlightAction(true)\n              .hideDelay(7500)\n              .position('top right')).then(function (response) {\n            if (response === 'ok') {\n              $state.go('app.inventory.configuration.stocks_optimization');\n            }\n          });\n          throw error;\n        });\n    }\n\n    function toggleFilterVisibility(property, filter) {\n      filter.visible = !filter.visible;\n      if (!filter.visible && vm.status.filters[property].length) {\n        vm.status.filters[property] = [];\n        vm.filterChanged();\n      }\n      saveStatus();\n    }\n\n    function filterChanged() {\n      resetPagination();\n      saveStatus();\n      getProductVariantsGridPage();\n    }\n\n    function getGridProductsVariantsReplenishmentsPage(performAnalysisIfEmpty) {\n      resetPagination();\n      getProductVariantsGridPage(performAnalysisIfEmpty);\n    }\n\n    function resetPagination() {\n      vm.gridApi.grid.options.paginationCurrentPage = 1;\n    }\n\n    function downloadCSV() {\n      if (vm.exporting) {\n        return;\n      }\n      vm.exporting = true;\n\n      var url = api.urls.inventories.productVariants.replace('/:id', '').replace(':option', 'store-purchases-by-product-csv');\n      fetch(url + '?' + new URLSearchParams(getGridPostBody()), {\n        method: 'GET', headers: {\n          'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'\n        }, signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          if (data.success === true) {\n            $mdDialog.show(\n              $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'))\n            );\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.exporting = false;\n        });\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ImportEditWizardDialogController', ImportEditWizardDialogController);\n\n  /** @ngInject */\n  function ImportEditWizardDialogController($mdDialog, IMPORTER_STATUS, Session, api, $scope) {\n    var vm = this;\n\n    vm.wizard = {\n      step: {\n        title: 'IMPORTER.STEP_IMPORT_OR_EDIT',\n        template: 'import-edit'\n      },\n      history: ['import-edit']\n    };\n\n    vm.dtInstance = {};\n\n    vm.setStep = setStep;\n    vm.selectOption = selectOption;\n    vm.nextStep = nextStep;\n    vm.prevStep = prevStep;\n    vm.cancel = cancel;\n    vm.showBackOption = showBackOption;\n    vm.getTemplateUrl = getTemplateUrl;\n    vm.showImportationDialog = showImportationDialog;\n\n    function showImportationDialog(importerType) {\n      $mdDialog.hide(importerType);\n    }\n\n    function setStep(title, template) {\n      vm.wizard.step = {\n        title: title,\n        template: template,\n      };\n    }\n\n    function selectOption(option) {\n      if (option === 'import-edit') {\n        setStep(\n          'IMPORTER.STEP_IMPORT_OR_EDIT',\n          'import-edit'\n        );\n      } else if (option === 'products-or-series') {\n        setStep(\n          'IMPORTER.IMPORT_NEW_PRODUCTS',\n          'to-wizard-templates/import'\n        );\n      } else if (option === 'edit-existing-products') {\n        setStep(\n          'IMPORTER.STEP_EDIT_EXISTING_PRODUCTS',\n          'edit-existing-products'\n        );\n      } else if (option === 'edit-products') {\n        setStep(\n          'IMPORTER.STEP_EDIT_PRODUCTS',\n          'to-wizard-templates/edit-products'\n        );\n      } else if (option === 'edit-product-variants') {\n        setStep(\n          'IMPORTER.STEP_EDIT_PRODUCT_VARIANTS',\n          'to-wizard-templates/edit-product-variants'\n        );\n      } else if (option === 'edit-bundles') {\n        setStep(\n          'IMPORTER.STEP_EDIT_BUNDLES',\n          'to-wizard-templates/edit-bundles'\n        );\n      }\n    }\n\n    function nextStep(option) {\n      selectOption(option);\n      vm.wizard.history.push(option);\n    }\n\n    function prevStep() {\n      if (vm.wizard.history.length > 1) {\n        vm.wizard.history.pop();  // Remove the last element\n        vm.wizard.action = vm.wizard.history[vm.wizard.history.length - 1];  // Set action to the new last element\n        selectOption(vm.wizard.action);\n      }\n    }\n\n    function showBackOption() {\n      return vm.wizard.history.length > 1;\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function getTemplateUrl(template) {\n      return 'app/main/apps/inventory/views/import/dialogs/importation-wizard/import-edit-wizard/templates/' + template + '.html';\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('SalePrintDialogController', SalePrintDialogController);\n\n  /** @ngInject */\n  function SalePrintDialogController($mdDialog, $mdToast, $filter, $document, api, Session, defEmail) {\n\n    // TODO unify this dialog with the same for purchases\n    var vm = this;\n\n    // Data\n    vm.printType = 'products';\n    vm.printPrices = false;\n    vm.printImages = false;\n    vm.sendEmail = false;\n    vm.emailTo = defEmail;\n\n    //Header Product Options\n    vm.showBrand = false;\n    vm.showHsCode = false;\n    vm.showComposition = false;\n    vm.showAttributes = false;\n\n    // Functions\n    vm.print = print;\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.changePrintType = changePrintType;\n\n    initialize();\n\n    function initialize() {\n      var savedPrintType = localStorage.getItem(Session.company.id + '::printTypeSalePrintDialogController');\n      if (savedPrintType) {\n        vm.printType = savedPrintType;\n      }\n    }\n\n    function changePrintType() {\n      localStorage.setItem(Session.company.id + '::printTypeSalePrintDialogController', vm.printType);\n    }\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function print() {\n      $mdDialog.hide({\n        print: vm.printType,\n        prices: vm.printPrices,\n        images: vm.printImages,\n        sendEmail: vm.sendEmail,\n        emailTo: vm.sendEmail ? vm.emailTo : null,\n        brand: vm.showBrand,\n        hs_code: vm.showHsCode,\n        composition: vm.showComposition,\n        attributes: vm.showAttributes\n      });\n    }\n\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ImportSaleProductsDialogController', ImportSaleProductsDialogController);\n\n  /** @ngInject */\n  function ImportSaleProductsDialogController($mdDialog, $mdToast, $filter, $document, api, Session, saleId) {\n\n    var vm = this;\n\n    // Data\n    vm.fileLoaded = false;\n    vm.ngFlow = {flow: {}};\n    vm.ngFlowOptions = {\n      chunkSize: 15 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      allowDuplicateUploads: true,\n      //singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000\n    };\n    vm.loading = false;\n    vm.sale_order_products = [];\n    vm.filename = null;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.fileAdded = fileAdded;\n    vm.uploadFile = uploadFile;\n    vm.uploadFileSuccess = uploadFileSuccess;\n\n    // Functions\n\n    function fileAdded(file) {\n      vm.ngFlow.flow.files.push(file);\n      vm.fileLoaded = true;\n      vm.filename = file.name;\n      //vm.fileCopy = new File([file], file.name, { type: file.type });\n    }\n\n    function uploadFile(save) {\n      vm.ngFlow.flow.opts.headers = {'Authorization': 'Token ' + Session.token};\n      vm.ngFlow.flow.opts.target = api.urls.inventories.saleOrderProductsImport;\n      vm.ngFlow.flow.opts.query = {sale: saleId};\n      vm.ngFlow.flow.opts.uploadMethod = 'POST';\n      vm.loading = true;\n      vm.ngFlow.flow.upload();\n      //}\n    }\n\n    function uploadFileSuccess(file, response) {\n      vm.loading = false;\n      $mdDialog.hide(response);\n      //vm.sale_order_products = JSON.parse(response).sale_order_products;\n    }\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('DeliverySaleController', DeliverySaleController);\n\n  /** @ngInject */\n  function DeliverySaleController($scope, $state, HTTP_STATUS, INVOICE_TYPES, $mdToast, $mdDialog) {\n\n    var vm = this;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n\n    function save() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.support',\n      [\n        // 3rd Party Dependencies\n        'ngYoutubeEmbed',\n        'app.services.session'\n      ]\n    )\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider\n      .state('app.support', {\n        abstract: true,\n        url: '/support'\n      })\n\n      /**\n       * Videos\n       */\n      .state('app.support.videos', {\n        url: '/videos',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/support/views/videos/videos.html',\n            controller: 'SupportVideosController as vm'\n          }\n        },\n        resolve: {\n          VideosData: function (apiResolver) {\n            return apiResolver.resolve('support.videos@list', {});\n          },\n        },\n        bodyClass: 'videos'\n      })\n\n      /**\n       * Changelog\n       */\n      .state('app.support.changelogs', {\n        url: '/changelogs',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/support/views/changelogs/changelogs.html',\n            controller: 'SupportChangelogsController as vm'\n          }\n        },\n        resolve: {\n          ChangelogsData: function (apiResolver) {\n            return apiResolver.resolve('support.changelogs@list', {});\n          },\n        },\n        bodyClass: 'changelogs'\n      })\n\n      /**\n       * Trial status details\n       */\n      .state('app.support.trial_status_details', {\n        url: '/trial-status',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/support/views/trial-status-details/trial-status-details.html',\n            controller: 'TrialStatusDetailsController as vm'\n          }\n        },\n      })\n\n      .state('app.support.performance', {\n        url: '/performance',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/support/views/performance/performance.html',\n            controller: 'PerformanceController as vm'\n          }\n        },\n        bodyClass: 'performance'\n      });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/apps/support');\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.support')\n    .controller('ndServerController', ndServerController)\n    .directive('ndServer', ndServer);\n\n  /** @ngInject */\n  function ndServer() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/main/apps/support/views/performance/directives/nd-server/nd-server.html',\n      scope: {\n        triggerEventName: \"=?\",\n        startEventName: \"=?\",\n        endEventName: \"=?\",\n        badBound: \"=\",\n        regularBound: \"=\",\n      },\n      controller: 'ndServerController'\n    };\n  }\n\n  /** @ngInject */\n  function ndServerController($scope, $rootScope, $mdToast, $filter, api, HTTP_STATUS) {\n\n    // data\n    $scope.processing = false;\n\n    // methods\n    $scope.run = run;\n    $scope.result = {};\n    $scope.getIconName = getIconName;\n    $scope.getSvgIcon = getSvgIcon;\n    $scope.getVeredictTitle = getVeredictTitle;\n    $scope.getCustomClass = getCustomClass;\n\n    initialize();\n\n    // functions\n    function initialize() {\n      $scope.cancelPerformanceEventListener = $scope.$on($scope.triggerEventName, $scope.run);\n\n      // Cleanup\n      $scope.$on('$destroy', function (){\n        $scope.cancelPerformanceEventListener();\n      });\n    }\n\n    function run() {\n      $rootScope.$broadcast($scope.startEventName);\n      $scope.processing = true;\n\n      api.performance.server.get({}, function (response, fn, status) {\n        $scope.processing = false;\n        $rootScope.$broadcast($scope.endEventName);\n\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $scope.result = response;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          $scope.result = {};\n        }\n      });\n    }\n\n    function getCustomClass(withBackground) {\n      if (!$scope.result.average) return '';\n      if ($scope.result.average < $scope.regularBound) return 'green-fg' + (withBackground? ' green-50-bg' : '');\n      if ($scope.result.average >= $scope.regularBound && $scope.result.average < $scope.badBound) return 'yellow-fg' + (withBackground? ' yellow-50-bg' : '');\n      if ($scope.result.average >= $scope.badBound) return 'red-fg' + (withBackground? ' red-50-bg' : '');\n    }\n\n    function getIconName() {\n      if (!$scope.result.average) return null;\n      if ($scope.result.average < $scope.regularBound) return 'icon-check-circle';\n      if ($scope.result.average >= $scope.regularBound && $scope.result.average < $scope.badBound) return 'icon-alert-circle';\n      if ($scope.result.average >= $scope.badBound) return 'icon-close-circle-outline';\n    }\n\n    function getSvgIcon(){\n      if (!$scope.result.average) return 'assets/images/custom-material-design-icons/help-circle-outline.b9d43905.svg';\n    }\n\n    function getVeredictTitle() {\n      if (!$scope.result.average) return $filter('translate')(\"PERFORMANCE.UNKNOWN_PERFORMANCE\");\n      if ($scope.result.average < $scope.regularBound) return $filter('translate')(\"PERFORMANCE.GOOD_PERFORMANCE\");\n      if ($scope.result.average >= $scope.regularBound && $scope.result.average < $scope.badBound) return $filter('translate')(\"PERFORMANCE.REGULAR_PERFORMANCE\");\n      if ($scope.result.average >= $scope.badBound) return $filter('translate')(\"PERFORMANCE.BAD_PERFORMANCE\");\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.support')\n    .controller('ndBenchmarkController', ndBenchmarkController)\n    .directive('ndBenchmark', ndBenchmark);\n\n  /** @ngInject */\n  function ndBenchmark() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/main/apps/support/views/performance/directives/nd-benchmark/nd-benchmark.html',\n      scope: {\n        triggerEventName: \"=?\",\n        startEventName: \"=?\",\n        endEventName: \"=?\",\n        badBound: \"=\",\n        regularBound: \"=\",\n      },\n      controller: 'ndBenchmarkController'\n    };\n  }\n\n  /** @ngInject */\n  function ndBenchmarkController($scope, $filter, $rootScope, Performance) {\n\n    // data\n    $scope.processing = false;\n\n    // methods\n    $scope.run = run;\n    $scope.result = {};\n    $scope.getIconName = getIconName;\n    $scope.getSvgIcon = getSvgIcon;\n    $scope.getVeredictTitle = getVeredictTitle;\n    $scope.getCustomClass = getCustomClass;\n\n    initialize();\n\n    // functions\n    function initialize() {\n      $scope.cancelPerformanceEventListener = $scope.$on($scope.triggerEventName, $scope.run);\n\n      // Cleanup\n      $scope.$on('$destroy', function (){\n        $scope.cancelPerformanceEventListener();\n      });\n    }\n\n    function run() {\n      $rootScope.$broadcast($scope.startEventName);\n      $scope.processing = true;\n\n      Performance.benchmark()\n      .then(function (result) {\n        $scope.result = result;\n      })\n      .then(function(){\n        $scope.processing = false;\n        $rootScope.$broadcast($scope.endEventName);\n      });\n    }\n\n    function getCustomClass(withBackground) {\n      if (!$scope.result.ratio) return '';\n      if ($scope.result.ratio > $scope.regularBound) return 'green-fg' + (withBackground? ' green-50-bg' : '');\n      if ($scope.result.ratio <= $scope.regularBound && $scope.result.ratio > $scope.badBound) return 'yellow-fg' + (withBackground? ' yellow-50-bg' : '');\n      if ($scope.result.ratio <= $scope.badBound) return 'red-fg' + (withBackground? ' red-50-bg' : '');\n    }\n\n    function getIconName() {\n      if (!$scope.result.ratio) return null;\n      if ($scope.result.ratio > $scope.regularBound) return 'icon-check-circle';\n      if ($scope.result.ratio <= $scope.regularBound && $scope.result.ratio > $scope.badBound) return 'icon-alert-circle';\n      if ($scope.result.ratio <= $scope.badBound) return 'icon-close-circle-outline';\n    }\n\n    function getSvgIcon(){\n      if (!$scope.result.ratio) return 'assets/images/custom-material-design-icons/help-circle-outline.b9d43905.svg';\n    }\n\n    function getVeredictTitle() {\n      if (!$scope.result.ratio) return $filter('translate')(\"PERFORMANCE.UNKNOWN_PERFORMANCE\");\n      if ($scope.result.ratio > $scope.regularBound) return $filter('translate')(\"PERFORMANCE.GOOD_PERFORMANCE\");\n      if ($scope.result.ratio <= $scope.regularBound && $scope.result.ratio > $scope.badBound) return $filter('translate')(\"PERFORMANCE.REGULAR_PERFORMANCE\");\n      if ($scope.result.ratio <= $scope.badBound) return $filter('translate')(\"PERFORMANCE.BAD_PERFORMANCE\");\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.support')\n    .controller('ndBandwidthController', ndBandwidthController)\n    .directive('ndBandwidth', ndBandwidth);\n\n  /** @ngInject */\n  function ndBandwidth() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/main/apps/support/views/performance/directives/nd-bandwidth/nd-bandwidth.html',\n      scope: {\n        triggerEventName: \"=?\",\n        startEventName: \"=?\",\n        endEventName: \"=?\",\n        minUpload: \"=\",\n        minDownload: \"=\",\n      },\n      controller: 'ndBandwidthController'\n    };\n  }\n\n  /** @ngInject */\n  function ndBandwidthController($scope, $rootScope, $mdToast, $filter, Performance) {\n\n    // data\n    $scope.processing = false;\n\n    // methods\n    $scope.run = run;\n    $scope.result = {};\n    $scope.getColor = getColor;\n\n    initialize();\n\n    // functions\n    function initialize() {\n      $scope.cancelPerformanceEventListener = $scope.$on($scope.triggerEventName, $scope.run);\n\n      // Cleanup\n      $scope.$on('$destroy', function (){\n        $scope.cancelPerformanceEventListener();\n      });\n    }\n\n    function run() {\n      $rootScope.$broadcast($scope.startEventName);\n      $scope.processing = true;\n\n      Performance.avgBandwidth(3)\n      .then(function (result) {\n        $scope.result = result;\n      },\n      function(error) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        $scope.result = {};\n      })\n      .then(function(){\n        $scope.processing = false;\n        $rootScope.$broadcast($scope.endEventName);\n      });\n    }\n\n    function getColor(upload) {\n      if (upload) {\n        if ($scope.result.uploadSpeed < $scope.minUpload) return 'red-fg';\n        if ($scope.result.uploadSpeed >= $scope.minUpload) return 'green-fg';\n      }\n\n      if ($scope.result.downloadSpeed < $scope.minDownload) return 'red-fg';\n      if ($scope.result.downloadSpeed >= $scope.minDownload) return 'green-fg';\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.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('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('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('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.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.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  '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{\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\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('StockLocationSearchDialogController', StockLocationSearchDialogController);\n\n  /** @ngInject */\n  function StockLocationSearchDialogController($scope, $mdDialog, $mdToast, warehouseId, $document, $filter, api, HTTP_STATUS, Session, productVariant) {\n    var vm = this;\n\n    // Data\n    vm.loading = true;\n    vm.search = '';\n    vm.loadingMoreData = false;\n    vm.stockLocations = [];\n    vm.filteredCategories = [];\n    vm.nextPageUrl = null;\n    vm.productVariant = angular.copy(productVariant);\n\n    // Methods\n    vm.close = close;\n    vm.loadMore = loadMore;\n    vm.isLocationSelected = isLocationSelected;\n    vm.toggleLocation = toggleLocation;\n    vm.getProductVariantName = getProductVariantName;\n    vm.save = save;\n    vm.stockLocationDialog = stockLocationDialog;\n    vm.removeStockLocation = removeStockLocation;\n\n    initialize();\n\n    function fetchStockLocations() {\n      api.inventories.stockLocations.list({\n        warehouse_id: warehouseId,\n        search: vm.search,\n        serializer: 'StockLocationSimpleSerializer',\n      }, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.stockLocations = response.results;\n          vm.nextPageUrl = response.next;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.loading = false;\n      });\n    }\n\n    $scope.$watch(function () {\n      return vm.search;\n    }, function (newVal, oldVal) {\n      if (newVal !== oldVal) {\n        fetchStockLocations();\n      }\n    });\n\n    function initialize() {\n      fetchStockLocations();\n      setTimeout(function () {\n        var container = document.querySelector('.stock-location-dialog-scroll');\n        if (container) {\n          container.addEventListener('scroll', onScroll);\n        }\n      }, 0);\n    }\n\n    function close() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      api.inventories.productVariants.update({\n        id: vm.productVariant.id,\n        stock_locations: vm.productVariant.stock_locations.map(function (sl) {\n          return sl.id;\n        }),\n        warehouse_id: warehouseId,\n        option: 'add-stock-locations'\n      }, function (response) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n        $mdDialog.hide(vm.productVariant.stock_locations);\n      }, function (error) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      });\n    }\n\n    function loadMore() {\n      if (!vm.nextPageUrl || vm.loadingMoreData) return;\n      vm.loadingMoreData = true;\n      fetch(vm.nextPageUrl, {\n        method: 'GET',\n        headers: {'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'}\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (response) {\n          vm.stockLocations = vm.stockLocations.concat(response.results);\n          vm.nextPageUrl = response.next;\n        })\n        .catch(function () {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        })\n        .finally(function () {\n          vm.loadingMoreData = false;\n          $scope.$applyAsync();\n        });\n    }\n\n    function isLocationSelected(location) {\n      if (!vm.productVariant.stock_locations) return false;\n      return vm.productVariant.stock_locations.some(function (sl) {\n        return sl.id === location.id;\n      });\n    }\n\n    function toggleLocation(location) {\n      var idx = vm.productVariant.stock_locations.findIndex(function (sl) {\n        return sl.id === location.id;\n      });\n      if (idx === -1) {\n        vm.productVariant.stock_locations.push({\n          id: location.id,\n          location: location.location\n        });\n      } else {\n        vm.productVariant.stock_locations.splice(idx, 1);\n      }\n    }\n\n    function onScroll(e) {\n      var el = e.target;\n      if (el.scrollTop + el.clientHeight >= el.scrollHeight - 50) { // 50px del final\n        $scope.$apply(function () {\n          vm.loadMore();\n        });\n      }\n    }\n\n    function getProductVariantName() {\n      return vm.productVariant.product_name + '(' + vm.productVariant.size_name + '/' + vm.productVariant.color_name + ')';\n    }\n\n    function stockLocationDialog(stockLocation) {\n      $mdDialog.show({\n        controller: 'StockLocationDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/warehouse/dialogs/stock-location-dialog/stock-location-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          stockLocation: stockLocation,\n          warehouseId: warehouseId\n        }\n      }).then(function (result) {\n        if (result) {\n          vm.stockLocations.unshift(result);\n        }\n      }, function () {\n      });\n    }\n\n    function removeStockLocation(stockLocation) {\n      var idx = vm.productVariant.stock_locations.findIndex(function (sl) {\n        return sl.id === stockLocation.id;\n      });\n      if (idx !== -1) {\n        vm.productVariant.stock_locations.splice(idx, 1);\n      }\n    }\n\n  }\n})();\n\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('StockLocationDialogController', StockLocationDialogController);\n\n  /** @ngInject */\n  function StockLocationDialogController($mdDialog, $mdToast, $filter, HTTP_STATUS, $scope, stockLocation, warehouseId, api, Session, hotkeys) {\n    var vm = this;\n\n    // Data\n    vm.stockLocation = stockLocation;\n    vm.warehouseId = warehouseId;\n    vm.isSaving = false;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.deleteLocation = deleteLocation;\n    vm.postSave = postSave;\n\n    hotkeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT', 'SELECT', 'TEXTAREA'],\n      callback: function (event) {\n        save();\n      }\n    });\n\n    //Functions\n    function hide() {\n      $mdDialog.hide(vm.stockLocation);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function deleteLocation() {\n      if (!Session.hasPermission('app.inventory.warehouses.warehouse.stock-locations')) {\n        return;\n      }\n      api.inventories.stockLocations.delete(\n        {id: vm.stockLocation.id},\n        function (response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.STOCK_LOCATION_DELETED')).position('top right'));\n            vm.stockLocation = null;\n            hide();\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function save() {\n      vm.isSaving = true\n      if (warehouseId) {\n        vm.stockLocation.warehouse = warehouseId;\n      }\n      if ($scope.stockLocationForm.$valid) {\n        if (vm.stockLocation.id) {\n          if (Session.hasPermission('app.inventory.warehouses.warehouse.stock-locations')) {\n            api.inventories.stockLocations.update(\n              vm.stockLocation.id,\n              vm.stockLocation,\n              function (response) {\n                postSave(response);\n              }\n            );\n          }\n        } else {\n          if (Session.hasPermission('app.inventory.warehouses.warehouse.stock-locations')) {\n            api.inventories.stockLocations.save(\n              vm.stockLocation,\n              function (response) {\n                postSave(response);\n              }\n            );\n          }\n        }\n      }\n    }\n\n    function postSave(response) {\n      vm.isSaving = false;\n      if (response.id) {\n        if (stockLocation && stockLocation.id) {\n          vm.stockLocation.location = response.location;\n          vm.stockLocation.position = response.position;\n          vm.stockLocation.barcode = response.barcode;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('WAREHOUSE.STOCK_LOCATION_UPDATED')).position('top right'));\n        } else {\n          angular.extend(vm.stockLocation, response);\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('WAREHOUSE.STOCK_LOCATION_SAVED')).position('top right'));\n        }\n        hide();\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('DeleteWarehouseDialogController', DeleteWarehouseDialogController);\n\n  /** @ngInject */\n  function DeleteWarehouseDialogController($scope, $mdDialog) {\n\n    var vm = this;\n\n    // Methods\n    vm.confirm = confirm;\n    vm.closeDialog = closeDialog;\n\n    function closeDialog() {\n      $mdDialog.cancel();\n    }\n\n    function confirm() {\n      $mdDialog.hide();\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndTransferOrderDeliveryActionsController', ndTransferOrderDeliveryActionsController)\n    .directive('ndTransferOrderDeliveryActions', ndTransferOrderDeliveryActions);\n\n  /** @ngInject */\n  function ndTransferOrderDeliveryActions() {\n    return {\n      restrict: 'E',\n      scope: {\n        order: '=',\n        type: '=',\n        options: '='\n      },\n      controller: 'ndTransferOrderDeliveryActionsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/transfer/directives/transfer-order-delivery-actions/nd-transfer-order-delivery-actions.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndTransferOrderDeliveryActionsController($scope,\n                                                    HTTP_STATUS,\n                                                    api,\n                                                    $mdDialog,\n                                                    $mdMenu,\n                                                    $mdToast,\n                                                    $interval,\n                                                    $document,\n                                                    $state,\n                                                    Session,\n                                                    $filter,\n                                                    $rootScope,\n                                                    $q,\n                                                    $mdMedia,\n                                                    SEARCH_MAX_LENGTH,\n                                                    TRANSFER_ORDER_STATUSES_REVERSE,\n                                                    OrderActionsService\n  ) {\n    var PULLING_FREQUENCE = 2 * 1000;\n\n    var vm = this;\n    vm.transferOrderDelivery = $scope.order;\n    vm.transferOrderId = vm.transferOrderDelivery.transfer_order;\n    vm.transfer = null;\n    vm.changingStatus = false;\n    vm.fetching = false;\n    vm.TRANSFER_ORDER_STATUSES_REVERSE = TRANSFER_ORDER_STATUSES_REVERSE;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.endpoints = {\n      checkStatus: 'inventories.transferOrderDeliveries',\n      changeStatus: 'inventories.transferOrderDeliveriesStatus'\n    };\n    vm.receivedActionStoredValue = null;\n\n    vm.prepare = prepare;\n    vm.ship = ship;\n    vm.receive = receive;\n    vm.confirm = confirm;\n    vm.cancel = cancel;\n    vm.showProgressBar = showProgressBar;\n    vm.duplicate = duplicate;\n    vm.importToLabelsGenerator = importToLabelsGenerator;\n    vm.importProductsDialog = importProductsDialog;\n    vm.printDelivery = printDelivery;\n    vm.isReplenishment = isReplenishment;\n    vm.downloadExcel = downloadExcel;\n    vm.receiveWithEmptyDeliveryOption = receiveWithEmptyDeliveryOption;\n    vm.getReceivedWithMainOptionText = getReceivedWithMainOptionText;\n    vm.getReceivedWithSecondaryOptionText = getReceivedWithSecondaryOptionText;\n\n    initialize();\n\n    function initialize() {\n      OrderActionsService.initialize(\n        vm,\n        vm.transferOrderDelivery,\n        vm.endpoints,\n        deliveryStatusChanged,\n        null\n      );\n\n      var createEmptyDeliveryOnReceive = localStorage.getItem(Session.company.id + 'ndTransferOrderDeliveryActionsController::createEmptyDeliveryOnReceive');\n      if (createEmptyDeliveryOnReceive) {\n        vm.createEmptyDeliveryOnReceive = JSON.parse(createEmptyDeliveryOnReceive);\n      } else {\n        vm.createEmptyDeliveryOnReceive = false;\n      }\n    }\n\n    function prepare() {\n      showProgressBar('TRANSFER.PREPARING_TRANSFER');\n      changeDeliveryStatus('prepare');\n    }\n\n    function ship() {\n      showProgressBar('TRANSFER.SHIPPING_TRANSFER');\n      changeDeliveryStatus('ship');\n    }\n\n    function getReceivedWithMainOptionText() {\n      if (vm.createEmptyDeliveryOnReceive) {\n        return 'TRANSFERS.RECEIVE_EMPTY';\n      } else {\n        return 'TRANSFERS.RECEIVE_PRE_FILLED';\n      }\n    }\n\n    function getReceivedWithSecondaryOptionText() {\n      if (vm.createEmptyDeliveryOnReceive) {\n        return 'TRANSFERS.RECEIVE_PRE_FILLED';\n      } else {\n        return 'TRANSFERS.RECEIVE_EMPTY';\n      }\n    }\n\n    function receiveWithEmptyDeliveryOption(isMainOption) {\n      if (isMainOption) {\n        manageReceiveOption(vm.createEmptyDeliveryOnReceive);\n      } else {\n        manageReceiveOption(!vm.createEmptyDeliveryOnReceive);\n      }\n    }\n\n    function manageReceiveOption(condition) {\n      if (condition) {\n        receive(true);\n      } else {\n        receive(false);\n      }\n    }\n\n    function receive(createEmpty) {\n      showProgressBar('TRANSFER.RECEIVING_TRANSFER');\n      localStorage.setItem(Session.company.id + 'ndTransferOrderDeliveryActionsController::createEmptyDeliveryOnReceive', JSON.stringify(createEmpty));\n      changeDeliveryStatus('receive', {\n        create_empty: createEmpty\n      });\n    }\n\n    function confirm() {\n      showProgressBar('TRANSFER.PROCESSING_TRANSFER');\n      changeDeliveryStatus('confirm');\n    }\n\n    function cancel() {\n      showProgressBar('TRANSFER.CANCELLING_TRANSFER');\n      changeDeliveryStatus('cancel');\n    }\n\n    function isReplenishment() {\n      return vm.transferOrderDelivery.is_replenishment;\n    }\n\n    function showProgressBar(title) {\n      if (!title) {\n        title = 'TRANSFER.PROCESSING_TRANSFER';\n      }\n      $mdDialog.show({\n        controller: 'LoadingBarDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/loading-bar/loading-bar.html',\n        parent: angular.element(document.getElementById(document.body)),\n        clickOutsideToClose: true,\n        focusOnOpen: false,\n        locals: {\n          title: title,\n          body: 'TRANSFER.PROGRESS_BAR_DIALOG_BODY'\n        }\n      });\n    }\n\n    function duplicate() {\n      if (Session.hasPermission('inventory.transfers.create')) {\n        if (vm.changingStatus) {\n          return;\n        }\n        vm.changingStatus = true;\n\n        api.inventories.transferOrderDeliveries.save(\n          {\n            id: vm.transferOrderDelivery.id,\n            option: 'duplicate'\n          }, function(response, fn, status) {\n            vm.changingStatus = false;\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              $state.go('app.inventory.transfers.transfer.delivery', { id: response.transfer_order });\n            }\n          }\n        );\n      }\n    }\n\n    function importToLabelsGenerator() {\n      vm.fetching = true;\n      api.inventories.transferOrderDeliveries.get({\n        id: vm.transferOrderDelivery.id,\n        option: 'labels'\n      }, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $state.go('app.inventory.labels-generator', {\n            transferOrder: results\n          });\n        } else {\n          vm.fetching = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function changeDeliveryStatus(option, extraParams) {\n      // FIXME check permission acordding to the status parameter\n      if (!Session.hasPermission('inventory.transfers.transfer.delivery.prepare')) {\n        return;\n      }\n      if (vm.changingStatus) {\n        return;\n      }\n      vm.changingStatus = true;\n      var params = {\n        id: vm.transferOrderDelivery.id,\n        option: option\n      };\n      if (extraParams) {\n        angular.extend(params, {\n          extra_parameters: extraParams\n        });\n      }\n      api.inventories.transferOrderDeliveriesStatus.update(\n        params,\n        function(result, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK || result.success) {\n            startDeliveryPulling(option);\n          } else {\n            if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              showReloadToast();\n            } else {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PURCHASE.ERROR_SAVING_DRAFT'))\n                  .position('top right'));\n            }\n            vm.changingStatus = false;\n          }\n        }\n      );\n\n    }\n\n    function startDeliveryPulling(option) {\n      vm.timeout = $interval(function() {\n        api.inventories.transferOrderDeliveries.get({\n          id: vm.transferOrderDelivery.id,\n          option: 'check-status'\n        }, function(result, callback, status) {\n          if (!result.pending_to_change_status && !result.changing_status) {\n            $interval.cancel(vm.timeout);\n            $mdDialog.hide();\n            deliveryStatusChanged(option);\n            sendChangeStatusEvent(result.transfer_order_status);\n          }\n        });\n      }, PULLING_FREQUENCE);\n    }\n\n    function deliveryStatusChanged(option) {\n      api.inventories.transferOrderDeliveries.get({\n        id: vm.transferOrderDelivery.id\n      }, function(result, callback, status) {\n        setTransferOrderDeliveryData(result);\n\n        var toasMessage = '';\n        if (option === 'prepare') {\n          toasMessage = 'DELIVERY_PREPARED';\n        } else if (option === 'ship') {\n          toasMessage = 'DELIVERY_SHIPPED';\n        } else if (option === 'receive') {\n          toasMessage = 'DELIVERY_RECEIVED';\n        } else if (option === 'confirm') {\n          toasMessage = 'DELIVERY_CONFIRMED';\n        }\n        sendReloadTableEvent();\n\n        if (toasMessage) {\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('TRANSFER.' + toasMessage))\n            .position('top right'));\n        }\n        vm.changingStatus = false;\n      });\n    }\n\n    function setTransferOrderDeliveryData(data) {\n      vm.transferOrderDelivery.autocode = data.autocode;\n      vm.transferOrderDelivery.canceled_at = data.canceled_at;\n      vm.transferOrderDelivery.canceled_by = data.canceled_by;\n      vm.transferOrderDelivery.created_at = data.created_at;\n      vm.transferOrderDelivery.created_by = data.created_by;\n      vm.transferOrderDelivery.created_by_username = data.created_by_username;\n      vm.transferOrderDelivery.expected_at = data.expected_at;\n      vm.transferOrderDelivery.notes = data.notes;\n      vm.transferOrderDelivery.prepared_at = data.prepared_at;\n      vm.transferOrderDelivery.prepared_by = data.prepared_by;\n      vm.transferOrderDelivery.prepared_by_username = data.prepared_by_username;\n      vm.transferOrderDelivery.prepared_by_fullname = data.prepared_by_fullname;\n      vm.transferOrderDelivery.received_at = data.received_at;\n      vm.transferOrderDelivery.received_by = data.received_by;\n      vm.transferOrderDelivery.received_by_username = data.received_by_username;\n      vm.transferOrderDelivery.shipped_at = data.shipped_at;\n      vm.transferOrderDelivery.shipped_by = data.shipped_by;\n      vm.transferOrderDelivery.shipped_by_username = data.shipped_by_username;\n      vm.transferOrderDelivery.status = data.status;\n      vm.transferOrderDelivery.is_editable = data.is_editable;\n    }\n\n    function showReloadToast() {\n      $mdToast.show($mdToast.simple()\n        .textContent($filter('translate')('ORDER.ERROR_ORDER_STATUS_CHANGED'))\n        .action($filter('translate')('TOOLBAR.REFRESH'))\n        .hideDelay(5000)\n        .highlightAction(true)\n        .position('top right')).then(function(response) {\n        if (response === 'ok') {\n          location.reload();\n        }\n      });\n    }\n\n    function sendChangeStatusEvent(status) {\n      $rootScope.$broadcast('changeOrderStatus::orderType', { status: status });\n    }\n\n    function importProductsDialog(ev) {\n      if (Session.hasPermission('inventory.transfers.transfer.products.add_product')) {\n        $mdDialog.show({\n          controller: 'ImportTransferProductsDialogController as vm',\n          templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/import/import.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          //fullscreen: $scope.customFullscreen,\n          locals: {\n            transferId: vm.transferOrderDelivery.id,\n            isDelivery: true\n          }\n        }).then(function(response) {\n\n          var dialog = $mdDialog.alert()\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .title($filter('translate')('PURCHASE.IMPORTING_PRODUCTS'))\n            .htmlContent($filter('translate')('PURCHASE.IMPORTING_PRODUCTS_MESSAGE', { email: Session.user.email }))\n            .ok($filter('translate')('GENERAL.CLOSE'));\n\n          $mdDialog.show(dialog);\n\n          sendReloadTableEvent(response);\n        }, function() {\n          // Cancel button clicked\n        });\n      }\n    }\n\n    function sendReloadTableEvent(response) {\n      $rootScope.$broadcast('reload-table::orderProductsList', response);\n      $rootScope.$broadcast('reload-totals::orderProductsList', response);\n    }\n\n    function printDelivery() {\n\n      var defEmail = vm.transferOrderDelivery.contact ? vm.transferOrderDelivery.contact.email : '';\n\n      $mdDialog.show({\n        controller: 'PrintOrderDeliveryDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/directives/nd-print-order-delivery-button/print-order-delivery-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        focusOnOpen: false,\n        locals: {\n          params: {\n            defEmail: defEmail,\n            customDdpPrices: null,\n            orderDelivery: vm.transferOrderDelivery,\n            isSaleOrderDelivery: false,\n            isTransferOrderDelivery: true,\n            isPurchaseOrderDelivery: false\n          }\n        }\n      });\n    }\n\n    function downloadExcel() {\n      vm.fetching = true;\n      api.inventories.transferOrders.save(\n        {\n          id: vm.transferOrderId,\n          option: 'download-excel'\n        },\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.fetching = false;\n            var dialog = $mdDialog\n              .alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n              .htmlContent(\n                $filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {\n                  email: Session.user.email\n                })\n              )\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            vm.fetching = false;\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right')\n            );\n          }\n        }\n      );\n    }\n\n  }\n\n})();\n\n(function ()\n{\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('ndTransferOrderActionsController', ndTransferOrderActionsController)\n    .directive('ndTransferOrderActions', ndTransferOrderActions);\n\n  /** @ngInject */\n  function ndTransferOrderActions() {\n    return {\n      restrict: 'E',\n      scope: {\n        order: '=',\n        type: '=',\n        options: '='\n      },\n      controller: 'ndTransferOrderActionsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/transfer/directives/transfer-order-actions/nd-transfer-order-actions.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndTransferOrderActionsController($scope,\n                                            HTTP_STATUS,\n                                            api,\n                                            $mdDialog,\n                                            $mdMenu,\n                                            $mdToast,\n                                            $interval,\n                                            $document,\n                                            $state,\n                                            Session,\n                                            $filter,\n                                            $rootScope,\n                                            SEARCH_MAX_LENGTH,\n                                            $mdMedia,\n                                            TRANSFER_ORDER_STATUSES_REVERSE\n  ) {\n\n    var PULLING_FREQUENCE = 2 * 1000;\n    var vm = this;\n    vm.transfer = $scope.order;\n    vm.changingStatus = false;\n    vm.fetching = false;\n    vm.TRANSFER_ORDER_STATUSES_REVERSE = TRANSFER_ORDER_STATUSES_REVERSE;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.orderBy = '-created_at';\n\n\n    // Methods\n    vm.order = order;\n    vm.allocate = allocate;\n    vm.cancel = cancel;\n    vm.prepareAndShip = prepareAndShip;\n    vm.partiallyPrepare = partiallyPrepare;\n    vm.ship = ship;\n    vm.receive = receive;\n    vm.printOrder = printOrder;\n    vm.importToLabelsGenerator = importToLabelsGenerator;\n    vm.screenIsBig = screenIsBig;\n    vm.importProductsDialog = importProductsDialog;\n    vm.duplicate = duplicate;\n\n    initialize();\n\n    function initialize() {\n      vm.changingStatus = vm.transfer.changing_status || vm.transfer.pending_to_change_status;\n      if (vm.changingStatus) {\n        startPulling();\n      }\n    }\n\n    function printOrder() {\n      $mdDialog.show({\n        controller: 'TransferPrintDialogController as vm',\n        templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/print/print.html',\n        parent: angular.element(document.body),\n        //targetEvent: ev,\n        clickOutsideToClose: true,\n        locals: {\n          transferId: vm.transfer.id,\n          orderBy: vm.orderBy\n        }\n      }).then(function(response) {\n\n      });\n    }\n\n    function importToLabelsGenerator() {\n      vm.fetching = true;\n      api.inventories.transferOrders.get({\n        id: vm.transfer.id,\n        option: 'labels'\n      }, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $state.go('app.inventory.labels-generator', {\n            transferOrder: results\n          });\n        } else {\n          vm.fetching = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function cancel() {\n      showProgressBar('TRANSFER.CANCELLING_TRANSFER');\n      changeStatus('cancel');\n    }\n\n    function order() {\n      showProgressBar('TRANSFER.PROCESSING_TRANSFER');\n      changeStatus('order');\n    }\n\n    function allocate() {\n      showProgressBar('TRANSFER.PROCESSING_TRANSFER');\n      changeStatus('allocate');\n    }\n\n    function prepareAndShip() {\n      showProgressBar('TRANSFER.PROCESSING_TRANSFER');\n      changeStatus('ship');\n    }\n\n    function partiallyPrepare() {\n      showProgressBar('TRANSFER.PREPARING_TRANSFER');\n      changeStatus('partiallyprepare');\n    }\n\n    function ship() {\n      showProgressBar('TRANSFER.SHIPPING_TRANSFER');\n      changeStatus('ship');\n    }\n\n    function receive() {\n      showProgressBar('TRANSFER.RECEIVING_TRANSFER');\n      changeStatus('receive');\n    }\n\n    function changeStatus(option) {\n\n      if (vm.changingStatus)\n        return;\n\n      vm.changingStatus = true;\n      api.inventories.transferOrderStatus.update(\n        {\n          id: vm.transfer.id,\n          option: option\n        },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK || response.success) {\n            startPulling(option);\n          } else {\n            if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              showReloadToast();\n            } else {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PURCHASE.ERROR_SAVING_DRAFT'))\n                  .position('top right'));\n            }\n            vm.changingStatus = false;\n          }\n        }\n      );\n    }\n\n    function showReloadToast() {\n      $mdToast.show($mdToast.simple()\n        .textContent($filter('translate')('ORDER.ERROR_ORDER_STATUS_CHANGED'))\n        .action($filter('translate')('TOOLBAR.REFRESH'))\n        .hideDelay(5000)\n        .highlightAction(true)\n        .position('top right')).then(function(response) {\n        if (response === 'ok') {\n          location.reload();\n        }\n      });\n    }\n\n    function startPulling(option) {\n      vm.timeout = $interval(function() {\n        api.inventories.transferOrders.get({\n          id: vm.transfer.id,\n          option: 'check-status'\n        }, function(result, callback, status) {\n          if (!result.pending_to_change_status && !result.changing_status) {\n            $mdDialog.hide();\n            $interval.cancel(vm.timeout);\n            statusChanged(option);\n          }\n        });\n      }, PULLING_FREQUENCE);\n    }\n\n    function statusChanged(option) {\n      api.inventories.transferOrders.get({ id: vm.transfer.id },\n        function(response, callback, status) {\n          vm.transfer.status = response.status;\n          $scope.order.status = response.status;\n          $scope.order.is_editable = response.is_editable;\n          vm.changingStatus = false;\n          sendChangeStatusEvent($scope.order.status);\n\n          if (option === 'order') {\n            $mdToast\n              .show($mdToast.simple()\n                .textContent($filter('translate')('TRANSFER.TRANSFER_CONFIRMED'))\n                .position('top right'));\n            if (vm.transfer.is_replenishment) {\n              $state.go('app.inventory.transfers.transfer.delivery', { id: vm.transfer.id });\n            }\n          }\n\n          if (option === 'cancel') {\n            $mdToast\n              .show($mdToast.simple()\n                .textContent($filter('translate')('TRANSFER.TRANSFER_CANCELLED'))\n                .position('top right'));\n          }\n\n          $scope.$broadcast('initialize-transfer', { transfer: vm.transfer });\n        });\n    }\n\n    function showProgressBar(title) {\n      if (!title) {\n        title = 'TRANSFER.PROCESSING_TRANSFER';\n      }\n      $mdDialog.show({\n        controller: 'LoadingBarDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/loading-bar/loading-bar.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        focusOnOpen: false,\n        locals: {\n          title: title,\n          body: 'TRANSFER.PROGRESS_BAR_DIALOG_BODY'\n        }\n      });\n    }\n\n    function screenIsBig() {\n      return $mdMedia('gt-sm');\n    }\n\n    function duplicate() {\n      if (Session.hasPermission('inventory.transfers.create')) {\n        if (vm.changingStatus) {\n          return;\n        }\n        vm.changingStatus = true;\n        api.inventories.transferOrders.save(\n          {\n            id: vm.transfer.id,\n            option: 'duplicate'\n          }, function(response) {\n            vm.changingStatus = false;\n            $state.go('app.inventory.transfers.transfer.details', { id: response.id });\n          }\n        );\n      }\n    }\n\n    function importProductsDialog(ev) {\n      if (Session.hasPermission('inventory.transfers.transfer.products.add_product')) {\n        $mdDialog.show({\n          controller: 'ImportTransferProductsDialogController as vm',\n          templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/import/import.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          //fullscreen: $scope.customFullscreen,\n          locals: {\n            transferId: vm.transfer.id,\n            isDelivery: false\n          }\n        }).then(function(response) {\n\n          var dialog = $mdDialog.alert()\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .title($filter('translate')('PURCHASE.IMPORTING_PRODUCTS'))\n            .htmlContent($filter('translate')('PURCHASE.IMPORTING_PRODUCTS_MESSAGE', { email: Session.user.email }))\n            .ok($filter('translate')('GENERAL.CLOSE'));\n\n          $mdDialog.show(dialog);\n\n          sendReloadAllEvent(response);\n        }, function() {\n          // Cancel button clicked\n        });\n      }\n    }\n\n    function sendReloadAllEvent(response) {\n      $rootScope.$broadcast('reload-totals::orderProductsList', response);\n      sendReloadTableEvent(response);\n    }\n\n    function sendReloadTableEvent(response) {\n      $rootScope.$broadcast('reload-table::orderProductsList', response);\n    }\n\n    function sendChangeStatusEvent(status) {\n      $rootScope.$broadcast('changeOrderStatus::orderType', { status: status });\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('TransferPrintDialogController', TransferPrintDialogController);\n\n  /** @ngInject */\n  function TransferPrintDialogController($mdDialog, $mdToast, $filter, $document, api, Session, transferId, orderBy) {\n\n    var vm = this;\n\n    // Data\n    vm.printPrices = false;\n    vm.printOriginCodes = false;\n    vm.printImages = false;\n    vm.thermalPrinter = false;\n    vm.orderBy = orderBy;\n\n    //Header Product Options\n    vm.showBrand = false;\n    vm.showHsCode = false;\n    vm.showComposition = false;\n    vm.showAttributes = false;\n\n    // Functions\n    vm.print = print;\n    vm.hide = hide;\n    vm.cancel = cancel;\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function print() {\n      var url = api.urls.inventories.transferOrdersPrint.replace(':id', transferId);\n      if (vm.printPrices || vm.printOriginCodes || vm.printImages || vm.thermalPrinter || vm.orderBy ||\n      vm.showBrand || vm.showHsCode || vm.showAttributes || vm.showComposition) {\n        var path = '?';\n        if (vm.printPrices) {\n          path += 'prices=true';\n        }\n        if (vm.printOriginCodes) {\n          if (path.length > 1) {\n            path += '&';\n          }\n          path += 'origin-codes=true';\n        }\n\n        if (vm.showBrand) {\n          if (path.length > 1) {\n            path += '&';\n          }\n          path += 'brand=true';\n        }\n\n        if (vm.showHsCode) {\n          if (path.length > 1) {\n            path += '&';\n          }\n          path += 'hs_code=true';\n        }\n\n        if (vm.showAttributes) {\n          if (path.length > 1) {\n            path += '&';\n          }\n          path += 'attributes=true';\n        }\n\n        if (vm.showComposition) {\n          if (path.length > 1) {\n            path += '&';\n          }\n          path += 'composition=true';\n        }\n\n        if (vm.printImages) {\n          if (path.length > 1) {\n            path += '&';\n          }\n          path += 'images=true';\n        }\n        if (vm.thermalPrinter) {\n          if (path.length > 1) {\n            path += '&';\n          }\n          path += 'output_format=html';\n        }\n        if (path.length > 1) {\n          path += '&';\n        }\n        path += 'orderBy=' + vm.orderBy;\n\n        url += path;\n      }\n\n      Session.setTokenCookie();\n      window.open(url);\n      $mdDialog.hide();\n    }\n\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('LoadingBarDialogController', LoadingBarDialogController);\n\n  /** @ngInject */\n  function LoadingBarDialogController($mdDialog, title, body) {\n\n    var vm = this;\n\n    // Data\n    vm.title = title;\n    vm.body = body;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndStocktakingOrderProductUidController', ndStocktakingOrderProductUidController)\n    .directive('ndStocktakingOrderProductUid', ndStocktakingOrderProductUid);\n\n  /** @ngInject */\n  function ndStocktakingOrderProductUid() {\n    return {\n      restrict: 'E',\n      scope: {\n        orderProduct: '=',\n        onSave: '=',\n        deleteOrderProduct: '=',\n        validateOrderProduct: '=',\n        isEditable: '&',\n        changed: '=?',\n        showStocks: '=?',\n        sourceWarehouse: '=?',\n        updateAmountPermission: '=?', // permission to allow edit amounts\n        deletePermission: '=?'       // permission to show 'Delete' button\n      },\n      controller: 'ndStocktakingOrderProductUidController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/stocktaking/directives/nd-stocktaking-order-product-uid/nd-stocktaking-order-product-uid.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndStocktakingOrderProductUidController($scope, $filter, Session, $rootScope, $document, $mdDialog,\n                                                  $timeout, UiGridService, HTTP_STATUS, UidStock, $mdToast,\n                                                  StocktakingOrderProductVariantLot, api) {\n    var vm = this;\n    vm.orderProduct = $scope.orderProduct;\n    vm.totalAmount = null;\n    vm.MIN_GRID_HEIGHT = 92;\n    vm.gridHeight = vm.MIN_GRID_HEIGHT;\n\n    // Grid Configuration\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.loading = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {},\n      pageNumber: 1,\n      pageSize: 5\n    };\n\n\n    // Methods\n    vm.getGridDetailPage = getGridDetailPage;\n    vm.deleteOrderProductWrapper = deleteOrderProductWrapper;\n    vm.copyFieldInClipboard = copyFieldInClipboard;\n    vm.updateNewAmount = updateNewAmount;\n    vm.addLot = addLot;\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeUidGrid,\n      enableRowHeaderSelection: false,\n      enableColumnMenus: false,\n      enableGridMenu: false,\n      paginationPageSize: 5,\n      minRowsToShow: 5,\n      enableHorizontalScrollbar: 0,\n      enableVerticalScrollbar: 0,\n      enablePaginationControls: true\n    });\n\n    // Initialization\n    initialize();\n\n    function calculateTableHeight() {\n      vm.gridHeight = vm.gridOptions.data.length * UiGridService.defaultGridOptions.rowHeight + vm.MIN_GRID_HEIGHT;\n    }\n\n    // Functions\n    function initialize() {\n      for (var i = 0; i < vm.orderProduct.order_product_variants.length; i++) {\n        for (var j = 0; j < vm.orderProduct.order_product_variants[i].stocktaking_order_product_variant_lots.length; j++) {\n          var stocktakingOrderProductVariantLot = new StocktakingOrderProductVariantLot(vm.orderProduct.order_product_variants[i].stocktaking_order_product_variant_lots[j]);\n          vm.gridOptions.data.push(stocktakingOrderProductVariantLot);\n        }\n        vm.gridOptions.totalItems += vm.orderProduct.order_product_variants[i].stocktaking_order_product_variant_lots.total_stocktaking_order_product_variant_lots;\n      }\n\n      vm.uiGridInitialized = true;\n      calculateTableHeight();\n\n      if (vm.orderProduct.total_amount || vm.orderProduct.total_amount === 0) {\n        updateTotalAmount(vm.orderProduct.total_amount);\n      }\n    }\n\n    function updateTotalAmount(amount) {\n      vm.totalAmount = amount;\n    }\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.handleWindowResize();\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.pageNumber = newPage;\n          vm.status.pageSize = pageSize;\n          getGridDetailPage();\n        }\n      });\n\n      $timeout(function() {\n        vm.gridApi.core.on.rowsRendered($scope, function() {\n          vm.gridApi.core.handleWindowResize();\n        });\n      });\n\n      setGridColumns();\n    }\n\n    function getGridDetailPage() {\n      api.inventories.stocktakingOrderProductVariantLots.get({\n          order_product_id: vm.orderProduct.id,\n          pagination: 'datatable',\n          length: vm.status.pageSize,\n          page: vm.status.pageNumber,\n          start: vm.status.pageSize * (vm.status.pageNumber - 1)\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.uiGridInitialized = true;\n            vm.gridOptions.data = [];\n\n            for (var i = 0; i < response.data.length; i++) {\n              var stocktakingOrderProductVariantLot = new StocktakingOrderProductVariantLot(response.data[i]);\n              vm.gridOptions.data.push(stocktakingOrderProductVariantLot);\n            }\n            calculateTableHeight();\n          } else {\n            showErrorToast();\n          }\n        }\n      );\n    }\n\n    function setGridColumns(avoidState) {\n      angular.extend(vm.columns, {\n        product_variant: {\n          displayName: $filter('translate')('PRODUCT.PRODUCT_VARIANT'),\n          field: 'product_variant',\n          permission: true,\n          visible: true,\n          sort: { priority: 0, direction: 'desc' },\n          enableSorting: false,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableColumnMenu: false,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<div>' +\n            '<div>{{row.entity.product_variant_name}}</div>' +\n            '<span>{{row.entity.sku}} </span>' +\n            '<span class=\"uid-text\">{{row.entity.barcode}}</span></div>'\n        },\n        identifier: {\n          displayName: $filter('translate')('PRODUCT.LOT'),\n          field: 'identifier',\n          permission: true,\n          visible: true,\n          enableColumnMenu: false,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate:\n            '<div class=\"stock-detail-identifier\" layout=\"row\" layout-align=\"start center\">' +\n            '<span class=\"uid-text mr-5\">{{row.entity.uid}}</span>' +\n            '<div class=\"show-stock-button\">' +\n            '<md-icon class=\"cursor-pointer copy-uid-icon-format\" ng-click=\"grid.appScope.vm.copyFieldInClipboard(row.entity.uid)\" md-font-icon=\"icon-content-copy\">' +\n            '<md-tooltip>{{\"GENERAL.COPY\" | translate }}</md-tooltip></md-icon>' +\n            '</div>' +\n            '</div>'\n        },\n        expiration_date: {\n          displayName: $filter('translate')('PRODUCT.EXPIRATION_DATE'),\n          field: 'expiration_date',\n          permission: true,\n          enableColumnMenu: false,\n          visible: true,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<span>{{row.entity.expiration_date | date:\\'dd/MM/yyyy\\'}}</span>'\n        }\n      });\n      if (Session.hasPermissions('inventory.stocktakings.stocktaking.products.show_previous_amount')) {\n        angular.extend(vm.columns, {\n          amount: {\n            displayName: $filter('translate')('PRODUCT.PREVIOUS_AMOUNT'),\n            field: 'amount',\n            permission: true,\n            visible: true,\n            enableColumnMenu: false,\n            enablePinning: false,\n            enableSorting: false,\n            pinnedLeft: false,\n            enableHiding: false,\n            cellClass: 'cell-right cell-padding',\n            cellTemplate: '<span >{{row.entity.amount}}</span>'\n          }\n        });\n      }\n\n      var newAmountTemplate = '';\n      if ($scope.isEditable() && Session.hasPermissions('inventory.stocktakings.stocktaking.products.update_amount')) {\n        newAmountTemplate = '<input class=\"nd-input text-right\" type=\\'number\\' nd-mute-barcode-callbacks ng-blur=\"grid.appScope.vm.updateNewAmount(row.entity.id, row.entity.new_amount)\" ng-model=\"row.entity.new_amount\"/>';\n      } else {\n        newAmountTemplate = '<span>{{row.entity.new_amount}}</span>';\n      }\n\n      angular.extend(vm.columns, {\n        newAmount: {\n          displayName: $filter('translate')('PRODUCT.NEW_AMOUNT'),\n          field: 'new_amount',\n          permission: true,\n          visible: true,\n          enableColumnMenu: false,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: newAmountTemplate\n        }\n      });\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function addLot()   {\n      if (!$scope.isEditable()) {\n        return;\n      }\n\n      $mdDialog.show({\n        controller: 'EditUidDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/uids-edit/edit-uid-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          uidStock: null,\n          manageLots: true,\n          warehouses: [\n            {\n              id: $scope.sourceWarehouse.id,\n              name: $scope.sourceWarehouse.name\n            }\n          ],\n          productVariants: vm.orderProduct.product.product_variants,\n          received: false,\n          hideNotes: true,\n          hideMovementReason: true,\n          disableWarehouseSelector: true,\n          disableVariantSelector: false,\n          createMovement: false\n        }\n      }).then(function(lot) {\n        createNewStocktakingOrderProductVariantLot(new UidStock(lot));\n      });\n    }\n\n    function createNewStocktakingOrderProductVariantLot(lot) {\n      api.inventories.stocktakingOrderProductVariantLots.save(\n        {\n          amount: lot.amount,\n          stocktaking_id: vm.orderProduct.stocktaking_order,\n          order_product_id: vm.orderProduct.id,\n          expiration_date: lot.expiration_date,\n          product_variant_id: lot.product_variant,\n          uid_stock_id: lot.id,\n          uid: lot.uid,\n          option: 'create-from-product-variant'\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            updateTotalAmount(response.total_product_amount);\n            getGridDetailPage();\n          } else {\n            showErrorToast();\n          }\n        });\n    }\n\n    function updateNewAmount(lotId, amount) {\n\n      if (!lotId || (!amount && amount !== 0)) {\n        return;\n      }\n\n      api.inventories.stocktakingOrderProductVariantLots.save(\n        {\n          id: lotId,\n          option: 'update-amount',\n          new_amount: amount\n        },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var targetVariant = null;\n            for (var i = 0; i < vm.orderProduct.order_product_variants.length; i++) {\n              if (vm.orderProduct.order_product_variants[i].id === response.stocktaking_order_product_variant) {\n                targetVariant = vm.orderProduct.order_product_variants[i];\n                break;\n              }\n            }\n\n            if (targetVariant) {\n              var targetLot = null;\n              for (var j = 0; j < targetVariant.stocktaking_order_product_variant_lots.length; j++) {\n                if (targetVariant.stocktaking_order_product_variant_lots[j].id === response.id) {\n                  targetLot = targetVariant.stocktaking_order_product_variant_lots[j];\n                  break;\n                }\n              }\n\n              if (targetLot) {\n                targetLot.new_amount = response.new_amount;\n                targetLot.total_product_amount = response.total_product_amount;\n              }\n            }\n\n            updateTotalAmount(response.total_product_amount);\n            $rootScope.$broadcast('InventoryStocktakingProductsController::getTotals', response.total_stocktaking_order_products_amount);\n          } else {\n            showErrorToast();\n          }\n        }\n      );\n    }\n\n    function copyFieldInClipboard(value) {\n      var body = angular.element(document.body);\n      var textarea = angular.element('<textarea/>');\n      textarea.css({ position: 'fixed', opacity: '0' });\n      textarea.val(value);\n      body.append(textarea);\n      textarea[0].select();\n      try {\n        var successful = document.execCommand('copy');\n        if (successful) {\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('GENERAL.COPIED'))\n              .position('top right')\n              .hideDelay(500)\n          );\n        } else {\n          throw successful;\n        }\n      } catch (err) {\n      }\n      textarea.remove();\n    }\n\n    function showErrorToast() {\n      $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n    }\n\n    function deleteOrderProductWrapper(orderProduct) {\n      if (Session.hasPermissions('inventory.stocktakings.stocktaking.products.remove_product')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('STOCKTAKING.DELETE_PRODUCT'))\n          .htmlContent($filter('translate')('STOCKTAKING.DELETE_PRODUCT_MESSAGE', {\n            product: vm.orderProduct.product_code + ' · ' + vm.orderProduct.product_name\n          }))\n          .parent(angular.element(document.body))\n          .clickOutsideToClose(true)\n          .ok($filter('translate')('STOCKTAKING.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function(result) {\n          if (angular.isDefined($scope.deleteOrderProduct)) {\n            vm.changed = true;\n            $scope.deleteOrderProduct(vm.orderProduct);\n          }\n        });\n      }\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.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.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('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.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('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('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('ndOrderDeliveryProductController', ndOrderDeliveryProductController)\n    .directive('ndOrderDeliveryProduct', ndOrderDeliveryProduct);\n\n  /** @ngInject */\n  function ndOrderDeliveryProduct() {\n    return {\n      restrict: 'E',\n      scope: {\n        orderProduct: '=',\n        orderDeliveryProductVariants: '=',\n        orderType: '=',\n        status: '=',\n        updateAmountPermission: '=?',\n        onSave: '=?',\n      },\n      controller: 'ndOrderDeliveryProductController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-order-delivery-product/nd-order-delivery-product.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndOrderDeliveryProductController($scope, $filter, Session) {\n\n    // Data\n    $scope.orderDeliveryProductVariantsByColorAndSize = {};\n    $scope.saveOrderDeliveryProductVariant = saveOrderDeliveryProductVariant;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      $scope.orderProduct.order_product_variants.forEach(function(orderProductVariant){\n        if(angular.isUndefined($scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color])){\n          var pointer = {};\n          $scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color] = pointer;\n          $scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color].totals = function(){\n            var totals = {prepared_amount: 0, shipped_amount: 0, received_amount: 0};\n            for(var key in pointer){\n              if(key != 'totals' && angular.isDefined(pointer[key])){\n                totals['prepared_amount'] += pointer[key].prepared_amount;\n                totals['shipped_amount'] += pointer[key].shipped_amount;\n                totals['received_amount'] += pointer[key].received_amount;\n              }\n            }\n            return totals;\n          };\n        }\n\n        // Initializing the order delivery product variant in case to be null\n        if(angular.isUndefined($scope.orderDeliveryProductVariants[orderProductVariant.id])){\n          $scope.orderDeliveryProductVariants[orderProductVariant.id] = {\n            order_product: $scope.orderProduct.id,\n            order_delivery: null,\n            order_product_variant: orderProductVariant.id,\n            ordered_amount: orderProductVariant.amount,\n            prepared_amount: 0,\n            shipped_amount: 0,\n            received_amount: 0,\n            size_id: orderProductVariant.size,\n            color_id: orderProductVariant.color,\n            total_received_amount: 0\n          }\n        }\n\n        $scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color][orderProductVariant.size] =\n          $scope.orderDeliveryProductVariants[orderProductVariant.id];\n        $scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color][orderProductVariant.size].ordered_amount = orderProductVariant.amount;\n        // For Purchases\n        if(angular.isDefined(orderProductVariant.total_received_amount)){\n          $scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color][orderProductVariant.size].total_received_amount = orderProductVariant.total_received_amount;\n        }\n        // For Sales\n        if(angular.isDefined(orderProductVariant.total_prepared_amount)){\n          $scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color][orderProductVariant.size].total_prepared_amount = orderProductVariant.total_prepared_amount;\n        }\n        if(angular.isDefined(orderProductVariant.total_shipped_amount)){\n          $scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color][orderProductVariant.size].total_shipped_amount = orderProductVariant.total_shipped_amount;\n        }\n      });\n\n      $scope.orderProduct.size_variants.forEach(function(sizeVariant){\n\n        $scope.orderProduct.color_variants.forEach(function(colorVariant){\n\n          if(angular.isUndefined($scope.orderDeliveryProductVariantsByColorAndSize[colorVariant.id])){\n            $scope.orderDeliveryProductVariantsByColorAndSize[colorVariant.id] = {};\n          }\n          if(angular.isUndefined($scope.orderDeliveryProductVariantsByColorAndSize[colorVariant.id][sizeVariant.id])){\n            $scope.orderDeliveryProductVariantsByColorAndSize[colorVariant.id][sizeVariant.id] = {\n              order_product: $scope.orderProduct.id,\n              order_delivery: null,\n              order_product_variant: null,\n              ordered_amount: 0,\n              prepared_amount: 0,\n              shipped_amount: 0,\n              received_amount: 0,\n              size_id: sizeVariant.id,\n              color_id: colorVariant.id,\n              total_received_amount: 0\n            };\n          }\n\n        });\n\n      });\n    }\n\n    function saveOrderDeliveryProductVariant(orderDeliveryProductVariant){\n      // Executing save function given by param\n      if(angular.isDefined($scope.onSave)){\n        $scope.onSave(orderDeliveryProductVariant)\n      }\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndCsvEcommerceController', ndCsvEcommerceController)\n    .directive('ndCsvEcommerce', ndCsvEcommerce);\n\n  /** @ngInject */\n  function ndCsvEcommerceController($rootScope,\n                                    $scope,\n                                    api,\n                                    $mdToast,\n                                    $filter,\n                                    HTTP_STATUS,\n                                    ECOMMERCE_PLATFORMS) {\n    // Data\n    var vm = $scope;\n    vm.ECOMMERCE_PLATFORMS = ECOMMERCE_PLATFORMS;\n\n    $scope.rules = [];\n    $scope.backup = [];\n    $scope.saving = false;\n    $scope.required = ['STOCK', 'NAME', 'SKU'];\n    $scope.leafs = [];\n\n    // Methods\n    $scope.initMetadata = initMetadata;\n    $scope.getSelected = getSelected;\n    $scope.cancel = cancel;\n    $scope.save = save;\n    $scope.updateLeafs = updateLeafs;\n    $scope.checkLeafsStatus = checkLeafsStatus;\n    $scope.switchCollapsible = switchCollapsible;\n    $scope.clearMetadata = clearMetadata;\n\n    // Initialization\n    init();\n\n    // Functions\n    function init() {\n      api.ecommerce.sitesRules.get({\n        id: $scope.site,\n        option: $scope.path,\n      }, function (response, callback, status) {\n        if (status === 200) {\n          $scope.rules = response.rules;\n          $scope.backup = angular.copy(response.rules);\n          initMetadata($scope.rules);\n          updateLeafs();\n        }\n      });\n\n      $scope.saveEvent = $rootScope.$on('details::saveCsvConfig', function () {\n        save();\n      });\n\n      $scope.cancelEvent = $rootScope.$on('details::cancelCsvConfig', function () {\n        cancel();\n      });\n\n      $scope.resetHipercalzadosCsv = $rootScope.$on('details::resetHipercalzadosCsv', function () {\n        resetHipercalzadosCsv();\n      });\n\n      $scope.destroyEvent = $scope.$on('$destroy', function () {\n        $scope.saveEvent();\n        $scope.cancelEvent();\n        $scope.resetHipercalzadosCsv();\n        $scope.destroyEvent();\n      });\n    }\n\n    function initMetadata(rules) {\n      var hasSelected = false;\n\n      rules.forEach(function (rule) {\n        // as the name is the way to tranlate the rule, it must be always in uppercase\n        rule.name = rule.name.toUpperCase().replaceAll(' ', '_');\n\n        // BASE CASE: rule is leaf\n        if (rule.type.indexOf('node') == -1) {\n          rule['meta'] = {\n            required: $scope.required.indexOf(rule.name) > -1,\n            error: null,\n            collection: [],\n          }\n\n          rule.collection.forEach(function (col) {\n            rule.meta.collection.push(col.id);\n          });\n\n          hasSelected |= rule.selected;\n\n        } else if (rule.type == 'node' && rule.children) {\n          const selected = initMetadata(rule.children);\n          rule['meta'] = {\n            // if the node has any selected children then the whole rule must be visible\n            visible: selected,\n          }\n\n          hasSelected |= selected;\n\n        } else if (rule.type == 'node_all') {\n          rule['meta'] = {\n            visible: rule.collection.length > 0,\n            collectionById: {},\n          }\n\n          var selected = [];\n          var nameById = {};\n          rule.collection.forEach(function (col) {\n            selected.push(col.id);\n            nameById[col.id] = col.name;\n          })\n\n          rule.available_collection.forEach(function (col) {\n            rule.meta.collectionById[col.id] = {\n              selected: selected.indexOf(col.id) > -1,\n              custom_name: col.name != nameById[col.id] ? nameById[col.id] : null,\n              error: null,\n            }\n          });\n\n          hasSelected |= rule['meta'].visible;\n        }\n      });\n\n      return hasSelected;\n    }\n\n    function getSelected(rules) {\n      var selected = [];\n      rules.forEach(function (rule) {\n        // BASE CASE: rule is leaf\n        if (rule.type.indexOf('node') == -1) {\n          if (rule.selected) {\n            if (rule.available_collection.length) {\n              var collection = []\n              rule.available_collection.forEach(function (col) {\n                if (rule.meta.collection.indexOf(col.id) > -1) {\n                  collection.push(col);\n                }\n              })\n\n              rule.collection = collection;\n              if (rule.collection.length) {\n                selected.push(rule)\n              }\n            } else {\n              selected.push(rule);\n            }\n          }\n        } else if (rule.type == 'node') {\n          rule.children = $scope.getSelected(rule.children);\n          if (rule.children.length) {\n            selected.push(rule)\n          }\n        } else if (rule.type == \"node_all\") {\n          var collection = [];\n          rule.available_collection.forEach(function (col) {\n            var meta = rule.meta.collectionById[col.id];\n            if (meta.selected) {\n              collection.push({\n                id: col.id,\n                name: !!meta.custom_name ? meta.custom_name : col.name,\n              });\n            }\n          })\n\n          rule.collection = collection;\n          if (rule.collection.length) {\n            selected.push(rule)\n          }\n        }\n      })\n\n      return selected;\n    }\n\n    function clearMetadata(rules) {\n      if (rule.type.indexOf('node') == -1) {\n        delete rule['meta'];\n      } else if (rule.type == 'node') {\n\n      } else if (rule.type == \"node_all\") {\n\n      }\n    }\n\n    function cancel() {\n      $scope.rules = $scope.backup;\n    }\n\n    function save() {\n      var items = angular.copy($scope.rules);\n      items = $scope.getSelected(items);\n\n      api.ecommerce.sitesRules.save({\n        id: $scope.site,\n        option: $scope.path,\n        rules: items,\n      }, function (response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      })\n    }\n\n    function checkLeafsStatus(rules) {\n      rules.forEach(function (rule) {\n        // BASE CASE: rule is leaf\n        if (rule.type !== 'node') {\n          if (rule.meta.required && !(rule.selected || rule.collection)) {\n            rule.meta.error = 'NOT_SELECTED';\n          } else {\n            rule.meta.error = null;\n          }\n        } else if (rule.children) {\n          checkLeafsStatus(rule.children);\n        }\n      })\n    }\n\n    function updateLeafs() {\n      var items = angular.copy($scope.rules);\n      items = getSelected(items);\n\n      // recursive search for leafs\n      function immersion(rules) {\n        var leafs = [];\n        rules.forEach(function (rule) {\n          // BASE CASE: rule is leaf\n          if (rule.type.indexOf('node') == -1) {\n            leafs.push(rule);\n          } else if (rule.type == 'node') {\n            var children = immersion(rule.children);\n            leafs = leafs.concat(children);\n          } else if (rule.type == 'node_all') {\n            rule.available_collection.forEach(function (col) {\n              var meta = rule.meta.collectionById[col.id];\n              if (meta.selected) {\n                leafs.push({\n                  name: !!meta.custom_name ? meta.custom_name : col.name,\n                  noTranslate: true,\n                });\n              }\n            })\n          }\n        })\n\n        return leafs;\n      }\n\n      $scope.leafs = immersion(items);\n      $scope.checkLeafsStatus($scope.rules);\n    }\n\n    function switchCollapsible(rule) {\n      rule['meta'].visible = !rule['meta'].visible;\n    }\n\n    function resetHipercalzadosCsv() {\n      api.ecommerce.sites.update(\n        {\n          id: $scope.site,\n          option: 'reset-csv-mapper'\n        },\n        function (response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            init();\n          }\n        });\n    }\n  }\n\n  /** @ngInject */\n  function ndCsvEcommerce() {\n    return {\n      restrict: 'E',\n      scope: {\n        site: '=',\n        path: '=',\n      },\n      controller: 'ndCsvEcommerceController',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-csv-ecommerce/nd-csv-ecommerce.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndBundleContentVariantsController', ndBundleContentVariantsController)\n    .directive('ndBundleContentVariants', ndBundleContentVariants);\n\n\n  /** @ngInject */\n  function ndBundleContentVariants() {\n    return {\n      restrict: 'E',\n      scope: {\n        product: '=',\n        saveCallback: '&?',\n        isNew: '=?'\n      },\n      controller: 'ndBundleContentVariantsController',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-bundle-content-variants/nd-bundle-content-variants.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n  }\n\n  /** @ngInject */\n  function ndBundleContentVariantsController($scope, $document, $mdDialog, api, $mdToast, $filter, HTTP_STATUS) {\n    var vm = this;\n    $scope.openProductSearchDialog = openProductSearchDialog;\n    $scope.getCover = getCover;\n    $scope.deleteBundleContentVariant = deleteBundleContentVariant;\n    $scope.initBundleContentVariantAmount = initBundleContentVariantAmount;\n    $scope.saveBundleContentVariant = saveBundleContentVariant;\n    $scope.changeVariants = changeVariants;\n    // Functions\n    vm.openProductSearchDialog = openProductSearchDialog;\n    vm.initialize = initialize;\n\n    if (!$scope.saveBundleContentVariantsListener) {\n      $scope.saveBundleContentVariantsListener = $scope.$on('saveBundleContentVariants', function (event, data) {\n        saveBundleContentVariants(data);\n      });\n\n      $scope.$on('$destroy', function () {\n        $scope.saveBundleContentVariantsListener();\n      });\n    }\n\n    vm.initialize();\n\n    function initialize() {\n\n    }\n\n    function changeVariants(variant) {\n      // Opening dialog\n      $mdDialog.show({\n        controller: 'ProductVariantSelectorDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/sale/views/sell/dialogs/product-variant-selector-dialog.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: false,\n        multiple: false,\n        locals: {\n          product: {id: variant.product, name: variant.product_name},\n          warehouse: null,\n          inStock: null,\n          productVariant: false\n        }\n      }).then(function (result) {\n        if ($scope.isNew) {\n          updateVariant(variant, result.variant);\n        } else {\n          api.inventories.productVariantBundleProductVariant.save(\n            {\n              id: variant.id,\n              option: 'change-content-variant',\n              bundle_content_variant: result.variant.id\n            }, function (response, fn, status) {\n              updateVariant(variant, result.variant);\n            }, function (error) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          );\n        }\n      });\n    }\n\n    function updateVariant(variant, newVariant) {\n      variant.bundle_content_variant = newVariant.id;\n      variant.color_name = newVariant.color.name;\n      variant.size_name = newVariant.size.name;\n      variant.barcode = newVariant.barcode;\n      variant.sku = newVariant.sku;\n    }\n\n    function initBundleContentVariantAmount(bundleContentVariant) {\n      if (!bundleContentVariant.amount) {\n        bundleContentVariant.amount = 1;\n      }\n    }\n\n    function openProductSearchDialog(productVariant) {\n      $mdDialog.show({\n        controller: 'ProductVariantSelectorGridController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-variant-selector-grid/product-variant-selector-grid.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          selectedVariants: (productVariant.bundle_content_variants || []).map(\n            function (variant) {\n              return variant.bundle_content_variant;\n            }\n          )\n        }\n      }).then(function (result) {\n        result = result.filter(function (resultVariant) {\n          return !(productVariant.bundle_content_variants || []).some(function (bundle_variant) {\n            return bundle_variant.bundle_content_variant === resultVariant.id || bundle_variant.bundle_content_variant === resultVariant;\n          });\n        });\n        if (result.length > 0) {\n          productVariant.bundle_content_variants = (productVariant.bundle_content_variants || []).concat(\n            result.map(function (variant) {\n              var bundleContentVariant = {};\n              bundleContentVariant.bundle_content_variant = variant.id;\n              bundleContentVariant.amount = variant.amount ? variant.amount : 1;\n              bundleContentVariant.color_name = variant.color_name;\n              bundleContentVariant.size_name = variant.size_name;\n              bundleContentVariant.product_name = variant.product.name;\n              bundleContentVariant.product_code = variant.product.code;\n              bundleContentVariant.brand_name = variant.brand_name;\n              bundleContentVariant.cover_thumbnail = variant.product.cover_thumbnail;\n              bundleContentVariant.sku = variant.sku;\n              bundleContentVariant.barcode = variant.barcode;\n              bundleContentVariant.product = variant.product.id;\n              return bundleContentVariant;\n            }));\n          if (!$scope.isNew) {\n            saveBundleContentVariants(productVariant, {'generate_barcodes': false});\n          }\n        }\n      });\n    }\n\n    function saveBundleContentVariant(productVariant, bundleContentVariant) {\n      if ($scope.isNew) {\n        return\n      }\n      api.inventories.productBundles.save(\n        {\n          id: $scope.product.id,\n          product_variant_id: productVariant.id,\n          option: 'bundle-variants',\n          bundle_content_variants: [{\n            id: bundleContentVariant.bundle_content_variant,\n            amount: bundleContentVariant.amount\n          }]\n        }\n      );\n    }\n\n    function saveBundleContentVariants(productVariant, data) {\n      var bundle_data = productVariant.bundle_content_variants.map(function (variant) {\n        var bundleContentVariant = {};\n        bundleContentVariant.id = variant.bundle_content_variant;\n        bundleContentVariant.amount = variant.amount;\n        return bundleContentVariant;\n      });\n\n      api.inventories.productBundles.save(\n        {\n          id: $scope.product.id,\n          product_variant_id: productVariant.id,\n          option: 'bundle-variants',\n          generate_barcodes: data ? data.generate_barcodes : false,\n          bundle_content_variants: bundle_data\n        },\n        function (results, fn, status) {\n          if ($scope.saveCallback) {\n            $scope.saveCallback();\n          }\n        }\n      );\n\n    }\n\n    function deleteBundleContentVariant(productVariant, bundleContentVariant) {\n\n      var idx = productVariant.bundle_content_variants.indexOf(bundleContentVariant);\n      if ($scope.isNew) {\n        productVariant.bundle_content_variants.splice(idx, 1);\n        return;\n      } else {\n        var bundleVariantId = bundleContentVariant.id;\n        api.inventories.productBundles.save(\n          {\n            id: $scope.product.id,\n            product_variant_id: productVariant.id,\n            option: 'delete-bundle-variants',\n            bundle_content_variants: [\n              {\n                id: bundleVariantId\n              }\n            ]\n          },\n          function (results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n              productVariant.bundle_content_variants.splice(idx, 1);\n              $mdToast.show($mdToast.simple().textContent(\n                $filter('translate')('PRODUCT.VARIANT_DELETED')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent(\n                $filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      }\n    }\n\n    function getCover(bundleContentVariant) {\n      if (bundleContentVariant.cover_thumbnail) {\n        return bundleContentVariant.cover_thumbnail;\n      }\n      return '/assets/images/package-variant-closed.9c71cbbe.png';\n    }\n\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndAttributesCardController', ndAttributesCardController)\n    .directive('ndAttributesCard', ndAttributesCard);\n\n  /** @ngInject */\n  function ndAttributesCard() {\n    return {\n      restrict: 'E',\n      replace: true,\n      scope: {\n        product: '=?', attributeCategories: '=?'\n      },\n      controller: 'ndAttributesCardController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-attributes-card/nd-attributes-card.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndAttributesCardController(\n    $q,\n    $scope,\n    $filter,\n    $mdToast,\n    $mdSelect,\n    $mdDialog,\n    api,\n    Session,\n    AttributeCategory,\n    Attribute,\n    AttributeCategoryValue,\n    HTTP_STATUS,\n    SEARCH_MAX_LENGTH,\n    DEFAULT_AUTOCOMPLETE_PAGE_SIZE\n  ) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.product = $scope.product;\n    vm.attributeCategories = [];\n    vm.attributeCategoriesAutocomplete = {\n      searchText: '', selectedItem: null\n    };\n\n    vm.attributeCategoryValues = [];\n    vm.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('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.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('VariantsSelectorDialogController', VariantsSelectorDialogController);\n\n  /** @ngInject */\n  function VariantsSelectorDialogController($scope, $mdDialog, $document, product, api, HTTP_STATUS, SEARCH_MAX_LENGTH,\n                                            selectedVariants, excludeCategories, Session, $mdToast) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.Session = Session;\n    vm.product = product;\n    vm.selectedVariantsIds = [];\n    vm.excludeCategories = excludeCategories;\n    vm.variantsByCategoryId = {};\n    vm.allCategories = [];\n    vm.categoriesById = {};\n    vm.selectFilter = \"\";\n    vm.selectedId = null;\n    vm.currentCategoryId = null;\n    vm.selectAll = {};\n    vm.variantsFilter = \"\";\n    vm.selectVariantsForm = null;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.createNewVariant = createNewVariant;\n    vm.onSelectorChange = onSelectorChange;\n    vm.isSelected = isSelected;\n    vm.selectSelectedVariants = selectSelectedVariants;\n\n    initialize();\n\n    function initialize() {\n      if (!vm.currentCategoryId && selectedVariants.length > 0) {\n        vm.currentCategoryId = selectedVariants[0].category.id;\n      }\n\n      api.inventories.variantCategories.list({\n        'serializer': 'variant_category_simple',\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.allCategories = results.results.filter(function (category) {\n            return vm.excludeCategories.indexOf(category.id) === -1;\n          });\n\n          vm.allCategories.forEach(function (category) {\n            vm.categoriesById[category.id] = category;\n            if (!vm.currentCategoryId) {\n              vm.currentCategoryId = category.id;\n            }\n          })\n          vm.selectSelectedVariants();\n\n          vm.onSelectorChange();\n        }\n      })\n    }\n\n    function selectSelectedVariants() {\n\n      vm.selectedVariantsIds = selectedVariants.map(function (variant) {\n\n        if (!vm.variantsByCategoryId[variant.category.id]) {\n          vm.variantsByCategoryId[variant.category.id] = [];\n        }\n\n        variant.selected = true;\n        vm.variantsByCategoryId[variant.category.id].push(variant);\n        return variant.id;\n\n      });\n    }\n\n    function isSelected(variant) {\n      return vm.selectAll[variant.category] || vm.selectedVariantsIds.indexOf(variant.id) > -1;\n    }\n\n    function createNewVariant(ev, type) {\n      var variantCategory = vm.categoriesById[vm.currentCategoryId];\n      var specificCategory = vm.categoriesById[vm.currentCategoryId]\n      specificCategory.fixed = true;\n\n      $mdDialog.show({\n        controller: 'VariantCategoryDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/variant-category-dialog.html',\n        parent: angular.element(document.body),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n        fullscreen: $scope.customFullscreen,\n        locals: {\n          specificCategory: specificCategory,\n        },\n        resolve: {\n          object: function () {\n            return {};\n          },\n          isCategory: function () {\n            return false;\n          },\n          categories: function () {\n            return null;\n          },\n          specificCategory: function () {\n            return variantCategory;\n          }\n        }\n      })\n        .then(function (object) {\n          // Save buton clicked\n          api.inventories.variants.save(\n            object,\n            function (results, callback, status) {\n              if (status === 201) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.VARIANT_CREATED')).position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            }\n          );\n        });\n    }\n\n    function onSelectorChange() {\n      if (!vm.variantsByCategoryId[vm.currentCategoryId] || selectedVariants.includes(vm.variantsByCategoryId[vm.currentCategoryId][0])) {\n        if (!vm.variantsByCategoryId[vm.currentCategoryId]) {\n          vm.variantsByCategoryId[vm.currentCategoryId] = [];\n        }\n        api.inventories.variants.list({\n          'category_id': vm.currentCategoryId,\n        }, function (results, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            results.results.forEach(function callback(variant) {\n              if (!vm.selectedVariantsIds.includes(variant.id)) {\n                vm.variantsByCategoryId[vm.currentCategoryId].push(variant);\n              }\n\n            });\n          }\n        })\n      }\n    }\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      var selectedVariants = [];\n      for (var categoryId in vm.variantsByCategoryId) {\n        var selected = vm.variantsByCategoryId[categoryId].filter(function (variant) {\n          variant.category = vm.categoriesById[categoryId];\n          return variant.selected;\n        })\n\n        selectedVariants = selectedVariants.concat(selected);\n      }\n\n      $mdDialog.hide(selectedVariants);\n    }\n\n    /**\n     * On configuration selector open\n     */\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    /**\n     * On configuration selector close\n     */\n    function onSelectorClose() {\n      // Clear the filter\n      vm.selectFilter = \"\";\n\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('UidsSearchDialogController', UidsSearchDialogController);\n\n  /** @ngInject */\n  function UidsSearchDialogController($mdDialog,\n                                      $mdMedia,\n                                      $compile,\n                                      $mdToast,\n                                      HTTP_STATUS,\n                                      $state,\n                                      $filter,\n                                      $scope,\n                                      $document,\n                                      api,\n                                      Session,\n                                      $http,\n                                      UiGridService,\n                                      orderDeliveryProductVariant,\n                                      orderProductVariant,\n                                      allowCreate,\n                                      showAll,\n                                      warehouseId,\n                                      warehouseName,\n                                      operation,\n                                      productVariantId,\n                                      excludeUids,\n                                      initSearch,\n                                      UidStock,\n                                      manageLots,\n                                      manageUids,\n                                      product\n  ) {\n    var vm = this;\n\n    // Data\n    vm.orderDeliveryProductVariant = orderDeliveryProductVariant;\n    vm.orderProductVariant = orderProductVariant;\n    vm.totalSelected = 0;\n    vm.uidStocksById = {};\n    vm.saving = false;\n    vm.loading = false;\n    vm.warehouseId = warehouseId;\n    vm.warehouseName = warehouseName;\n    vm.manageLots = manageLots;\n    vm.manageUids = manageUids;\n    vm.product = product;\n    vm.productVariantId = productVariantId;\n    vm.uidToSearch = initSearch ? initSearch : '';\n    vm.url = api.urls.inventories.uidStocks.replace('/:id/', '');\n    vm.allowCreate = allowCreate ? allowCreate : false;\n    vm.showAll = showAll ? showAll : false;\n    vm.excludeUids = excludeUids ? excludeUids : [];\n    vm.statusFilter = 'available';\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    // Grid Configuration\n    vm.gridApi = null;\n    vm.gridOptions = UiGridService.getGridOptions({\n      enableColumnMenus: false,\n      enablePaginationControls: true,\n      enableFooter: false,\n      paginationPageSize: 10,\n      paginationPageSizes: [10, 25, 50, 100],\n      useExternalPagination: true,\n      useExternalSorting: true,\n      onRegisterApi: initializeUidGrid\n    });\n\n    // Methods\n    vm.searchUID = searchUID;\n    vm.cancel = cancel;\n    vm.isSelected = isSelected;\n    vm.select = select;\n    vm.accept = accept;\n    vm.createUidStock = createUidStock;\n    vm.editUID = editUID;\n    vm.filterChanged = filterChanged;\n    vm.saveSelectedState = saveSelectedState;\n    vm.loadSelectedState = loadSelectedState;\n\n    function setNewUidStock() {\n      vm.newUidStock = {\n        uid: '',\n        amount: 1,\n        warehouse: vm.warehouseId,\n        product_variant: vm.productVariantId,\n        received: false\n      };\n    }\n\n    function filterChanged() {\n      getGridPage();\n    }\n\n    function saveSelectedState() {\n      if (vm.gridApi && vm.gridApi.grid) {\n        var columnState = vm.gridApi.grid.columns.map(function(column) {\n          return {\n            name: column.name,\n            visible: column.visible\n          };\n        });\n        localStorage.setItem('uidsSearchColumnState', JSON.stringify(columnState));\n      }\n    }\n\n    function loadSelectedState() {\n      var savedState = localStorage.getItem('uidsSearchColumnState');\n      if (savedState) {\n        try {\n          var columnState = JSON.parse(savedState);\n          return columnState;\n        } catch (e) {\n          return null;\n        }\n      }\n      return null;\n    }\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.sortChanged($scope, function(grid, sortColumns) {\n        if (sortColumns.length > 0) {\n          vm.status.ordering = sortColumns[0].sort.direction === 'desc' ? '-' + sortColumns[0].field : sortColumns[0].field;\n        } else {\n          vm.status.ordering = null;\n        }\n        getGridPage();\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n        vm.status.pageNumber = newPage;\n        vm.status.pageSize = pageSize;\n        getGridPage();\n      });\n\n      // Añadir listener para cambios en la visibilidad de columnas\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function(column) {\n        saveSelectedState();\n      });\n\n      setGridColumns();\n      getGridPage();\n    }\n\n    function setGridColumns() {\n      var columnState = loadSelectedState();\n\n      vm.gridOptions.columnDefs = [\n        {\n          name: 'select',\n          displayName: '',\n          width: 50,\n          enableSorting: false,\n          enableHiding: false, // No permitir ocultar la columna de selección\n          cellTemplate: '<md-checkbox class=\"m-0 ml-16\" ng-checked=\"grid.appScope.vm.isSelected(row.entity.id)\" ' +\n            'ng-click=\"grid.appScope.vm.select(row.entity.id)\"></md-checkbox>'\n        },\n        {\n          name: 'product_variant_name',\n          displayName: $filter('translate')('PRODUCT.PRODUCT_VARIANT'),\n          cellTemplate: '<div class=\"cell-middle \"><div>{{row.entity.product_variant_name}}</div></div>'\n        },\n        {\n          name: 'uid',\n          displayName: $filter('translate')('PRODUCT.UID'),\n          cellTemplate: '<div class=\"cell-middle \"><span class=\"uid-text\">{{row.entity.uid}}</span></div>'\n        },\n        {\n          name: 'amount',\n          displayName: $filter('translate')('PRODUCT.AMOUNT'),\n          cellTemplate: '<div><input ng-if=\"row.entity.manage_uids && row.entity.manage_lots\" type=\"number\" ng-model=\"row.entity.split_amount\" ' +\n            'min=\"0\" max=\"{{row.entity.amount}}\" class=\"text-right nd-input w-60\"><span ng-if=\"row.entity.manage_uids && row.entity.manage_lots\"> /</span> <span class=\"cell-middle pt-10\">{{row.entity.amount}}</span></div>'\n        },\n        {\n          name: 'expiration_date',\n          displayName: $filter('translate')('PRODUCT.EXPIRATION_DATE'),\n          cellTemplate: '<div class=\"cell-middle \">{{row.entity.expiration_date | date:\"dd/MM/yyyy HH:mm\"}}</div>'\n        },\n        {\n          name: 'stock_warehouse_name',\n          displayName: $filter('translate')('PRODUCT.WAREHOUSE'),\n          cellTemplate: '<div class=\"cell-middle \">{{row.entity.stock_warehouse_name}}</div>'\n        },\n        {\n          name: 'sale_order_delivery',\n          displayName: $filter('translate')('PRODUCT.SALE_ORDER'),\n          cellTemplate: '<div class=\"cell-middle \">{{row.entity.sale_order_delivery.autocode}}</div>'\n        },\n        {\n          name: 'purchase_order_delivery',\n          displayName: $filter('translate')('PRODUCT.PURCHASE_ORDER'),\n          cellTemplate: '<div class=\"cell-middle \">{{row.entity.purchase_order_delivery.autocode}}</div>'\n        }\n      ];\n\n      if (columnState) {\n        vm.gridOptions.columnDefs.forEach(function(column) {\n          var savedColumn = columnState.find(function(col) {\n            return col.name === column.name;\n          });\n          if (savedColumn) {\n            column.visible = savedColumn.visible;\n          }\n        });\n      }\n    }\n\n    function getGridPage() {\n      vm.loading = true;\n\n      var params = {\n        pagination: 'datatable',\n        status: vm.statusFilter,\n        page: vm.status.pageNumber,\n        length: vm.status.pageSize,\n        start: vm.status.pageSize * (vm.status.pageNumber - 1)\n      };\n\n      if (vm.uidToSearch) {\n        params['search[value]'] = vm.uidToSearch;\n      }\n\n      if (operation === 'prepare-sale') {\n        params.operation = 'prepare-sale';\n        params.product_variant_id = vm.productVariantId;\n        params.order_delivery_id = orderDeliveryProductVariant.order_delivery_id;\n        params.source_warehouse = vm.orderDeliveryProductVariant.source_warehouse;\n      } else if (operation === 'prepare-transfer') {\n        params.operation = 'prepare_transfer';\n        params.transfer_order_delivery_product_variant_to_prepare = orderDeliveryProductVariant.id;\n        params.order_delivery_id = orderDeliveryProductVariant.order_delivery_id;\n        params.product_variant_id = vm.productVariantId;\n        params.source_warehouse = vm.orderDeliveryProductVariant.source_warehouse;\n      } else if (operation === 'receive-transfer') {\n        params.transfer_order_product_variant_to_receive = orderDeliveryProductVariant.order_product_variant;\n      } else if (operation === 'stocktaking') {\n        params.stocktaking_order_product_variant = orderProductVariant.id;\n      } else if (operation === 'sale') {\n        params.source_warehouse = vm.orderDeliveryProductVariant.source_warehouse;\n        params.product_variant_id = vm.orderProductVariant.variant.id;\n      } else if (operation === 'prepare-purchase-order-delivery-devolution') {\n        params.product_variant_id = vm.productVariantId;\n        params.source_warehouse = vm.warehouseId;\n        params.add_uid_to_purchase_order_delivery_for_devolution = orderDeliveryProductVariant.id;\n      }\n\n      $http({\n        url: vm.url,\n        method: 'GET',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        params: params\n      }).then(function(response) {\n        vm.gridOptions.data = response.data.data;\n        vm.gridOptions.totalItems = response.data.recordsFiltered;\n        vm.loading = false;\n\n        // Actualizar el diccionario de UIDs seleccionados\n        response.data.data.forEach(function(item) {\n          vm.uidStocksById[item.id] = item;\n          vm.uidStocksById[item.id].split_amount = item.amount;\n        });\n      }).catch(function(error) {\n        vm.loading = false;\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      });\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function createUidStock() {\n      if (!vm.allowCreate || vm.saving || (!vm.newUidStock.uid || !vm.newUidStock.amount || !vm.newUidStock.warehouse)) {\n        return;\n      }\n\n      vm.saving = true;\n      api.inventories.uidStocks.save(\n        vm.newUidStock,\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            getGridPage();\n            setNewUidStock();\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ADDED_SUCCESSFULLY')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        }\n      );\n    }\n\n    function searchUID() {\n      getGridPage();\n    }\n\n    function createdRow(row, data, dataIndex) {\n      //TODO: maybe exclude uids before response data\n      if (!vm.excludeUids.includes(data.uid)) {\n        $compile(angular.element(row).contents())($scope);\n      } else {\n        vm.dtInstance.DataTable.row(row).remove();\n      }\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n      });\n      return nRow;\n    }\n\n    function isSelected(uidStockId) {\n      return vm.uidStocksById[uidStockId].selected;\n    }\n\n    function select(uidStockId) {\n      if (!vm.isSelected(uidStockId)) {\n        vm.uidStocksById[uidStockId].selected = !vm.uidStocksById[uidStockId].selected;\n        vm.totalSelected++;\n      } else {\n        vm.uidStocksById[uidStockId].selected = !vm.uidStocksById[uidStockId].selected;\n        vm.totalSelected--;\n      }\n    }\n\n    function editUID() {\n      var productVariants = null;\n      if (vm.product) {\n        productVariants = vm.product.product_variants.filter(function(product_variant) {\n          return product_variant.size === vm.orderProductVariant.size && product_variant.color === vm.orderProductVariant.color;\n        });\n      }\n      var orderProductVariant = null;\n      if (vm.orderProductVariant) {\n        orderProductVariant = vm.orderProductVariant;\n      } else {\n        orderProductVariant = vm.orderDeliveryProductVariant;\n      }\n\n\n      $mdDialog.show({\n        controller: 'EditUidDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/uids-edit/edit-uid-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          uidStock: null,\n          manageLots: vm.manageLots,\n          warehouses: [\n            {\n              id: vm.warehouseId,\n              name: vm.warehouseName\n            }\n          ],\n          productVariants: [\n            {\n              id: vm.productVariantId !== null ? vm.productVariantId : productVariants[0].id,\n              deleted: false,\n              color_name: orderProductVariant.color_name,\n              size_name: orderProductVariant.size_name\n            }\n          ],\n          received: false,\n          hideNotes: true,\n          hideMovementReason: true,\n          disableWarehouseSelector: true,\n          disableVariantSelector: true,\n          createMovement: false\n        }\n      }).then(function(uidStock) {\n        getGridPage();\n      });\n    }\n\n    function accept() {\n      var selected = [];\n      for (var key in vm.uidStocksById) {\n        if (vm.uidStocksById[key].selected) {\n          selected.push(\n            {\n              'id': vm.uidStocksById[key].id,\n              'uid': vm.uidStocksById[key].uid,\n              'split_amount': vm.uidStocksById[key].split_amount\n            });\n        }\n      }\n      $mdDialog.hide(selected);\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('EditUidDialogController', EditUidDialogController);\n\n  /** @ngInject */\n  function EditUidDialogController($scope,\n                                   $mdDialog,\n                                   $mdToast,\n                                   $filter,\n                                   uidStock,\n                                   $document,\n                                   Session,\n                                   api,\n                                   UidStock,\n                                   HTTP_STATUS,\n                                   manageLots,\n                                   warehouses,\n                                   SEARCH_MAX_LENGTH,\n                                   STOCK_MOVEMENT_REASONS,\n                                   productVariants,\n                                   received,\n                                   hideNotes,\n                                   hideMovementReason,\n                                   disableWarehouseSelector,\n                                   disableVariantSelector,\n                                   createMovement\n  ) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.STOCK_MOVEMENT_REASONS = STOCK_MOVEMENT_REASONS;\n\n    // Methods\n    vm.closeDialog = closeDialog;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.isEditMode = isEditMode;\n    vm.warehouseIsDisabled = warehouseIsDisabled;\n    vm.productVariantIsDisabled = productVariantIsDisabled;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.disableSavingButton = disableSavingButton;\n    vm.saving = false;\n\n    // Data\n\n    vm.uidStock = uidStock ? uidStock : new UidStock();\n    vm.warehouses = warehouses;\n    vm.productVariants = productVariants;\n    vm.manageLots = manageLots;\n    vm.hideNotes = hideNotes;\n    vm.hideMovementReason = hideMovementReason;\n    vm.disableWarehouseSelector = disableWarehouseSelector;\n    vm.disableVariantSelector = disableVariantSelector;\n    vm.createMovement = createMovement;\n    vm.amountChanged = false;\n    vm.warehouseSearchText = '';\n    vm.movements = [\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_BREAKAGE,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EXPIRY,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_ROBBERY,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_TESTER,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_COURSE,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_INTERNAL_USE,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_LOSS,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_ADJUSTMENT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_PRESS_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EMPLOYEE_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EMPLOYEE_WELCOME_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_CUSTOMER_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_CUSTOMER_WELCOME_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_OWNER_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_OTHER\n    ];\n\n    //Functions\n    init();\n\n    function init() {\n      if (vm.warehouses.length === 1) {\n        vm.disableWarehouseSelector = true;\n        vm.uidStock.warehouse = vm.warehouses[0].id;\n      }\n      if (vm.productVariants.length === 1) {\n        vm.disableVariantSelector = true;\n        vm.uidStock.product_variant = vm.productVariants[0].id;\n      }\n      vm.uidStock.received = received;\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose() {\n      vm.warehouseSearchText = '';\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function disableSavingButton() {\n      if (vm.uidStock.id) {\n        return !vm.amountChanged;\n      }\n      return false;\n    }\n\n    function closeDialog(uidStockId) {\n      $mdDialog.hide(uidStockId);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function warehouseIsDisabled() {\n      return isEditMode() || vm.disableWarehouseSelector;\n    }\n\n    function productVariantIsDisabled() {\n      return isEditMode() || vm.disableVariantSelector;\n    }\n\n    function isEditMode() {\n      return vm.uidStock.id != null;\n    }\n\n    function save() {\n      if (vm.saving) {\n        return;\n      }\n\n      if (!$scope.editUidForm.$valid) {\n        return;\n      }\n      vm.saving = true;\n      if (vm.uidStock.id) {\n        if (Session.hasPermission('inventory.products.product.uid_stocks.update')) {\n          api.inventories.uidStocks.save(\n            {\n              option: 'edit-uid-stock',\n              id: vm.uidStock.id,\n              amount: vm.uidStock.amount,\n              reason: vm.uidStock.reason,\n              notes: vm.uidStock.notes\n            },\n            function(response, fn, status) {\n              vm.saving = false;\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                closeDialog();\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            }\n          );\n        }\n      } else {\n        if (Session.hasPermission('inventory.products.product.uid_stocks.create')) {\n          if (vm.createMovement === false) {\n            vm.uidStock['create_movement'] = false;\n          }\n          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('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('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('UidMovementsDialogController', UidMovementsDialogController);\n\n  /** @ngInject */\n  function UidMovementsDialogController($mdDialog,\n                                        $mdToast,\n                                        $filter,\n                                        $scope,\n                                        Session,\n                                        HTTP_STATUS,\n                                        api,\n                                        UIDId,\n                                        product,\n                                        $timeout,\n                                        STOCK_MOVEMENT_TYPES,\n                                        STOCK_MOVEMENT_REASONS,\n                                        STOCK_MOVEMENT_AUTOCODE_DICT,\n                                        UiGridService\n  ) {\n\n    // Data\n    var vm = this;\n    vm.stock_movement_types = STOCK_MOVEMENT_TYPES;\n    vm.stock_movement_reasons = STOCK_MOVEMENT_REASONS;\n    vm.stock_movement_autocode_dict = STOCK_MOVEMENT_AUTOCODE_DICT;\n    // Grid Configuration\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {},\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n    vm.product = product;\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeUidGrid,\n      enableRowHeaderSelection: false,\n      saveSelection: true\n    });\n\n    // Methods\n    vm.cancel = cancel;\n    vm.accept = accept;\n    vm.editMovement = editMovement;\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function(changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        saveGridState();\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n\n        if (vm.uiGridInitialized) {\n          vm.timeout = $timeout(function() {\n            vm.timeout = null;\n            getGridProductsPage();\n          }, 2000);\n        }\n      });\n\n      vm.gridApi.core.on.sortChanged($scope, function(grid, sortColumns) {\n        if (vm.uiGridInitialized) {\n          vm.status.ordering = UiGridService.getSortString(grid, sortColumns);\n          getGridProductsPage();\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.pageNumber = newPage;\n          vm.status.pageSize = pageSize;\n          getGridProductsPage();\n        }\n      });\n\n      setGridColumns();\n\n\n      $timeout(function() {\n        getGridProductsPage();\n      }, 200);\n    }\n\n    function saveGridState() {\n      if (!vm.gridApi) {\n        return;\n      }\n\n      var columnsState = {};\n      vm.gridApi.grid.columns.forEach(function(column) {\n        columnsState[column.field] = {\n          visible: column.visible,\n          width: column.width,\n          sort: column.sort,\n          pinned: column.pinned\n        };\n      });\n\n      localStorage.setItem(Session.company.id + '::uidMovementsGridColumns', JSON.stringify(columnsState));\n    }\n\n    // Functions\n    function setGridColumns(avoidState) {\n      var savedState = localStorage.getItem(Session.company.id + '::uidMovementsGridColumns');\n      var columnsState = savedState ? JSON.parse(savedState) : {};\n\n      function getColumnVisibility(field) {\n        if (columnsState[field] && columnsState[field].visible !== undefined) {\n          return columnsState[field].visible;\n        }\n        return true;\n      }\n\n      angular.extend(vm.columns, {\n        datetime: {\n          displayName: $filter('translate')('PRODUCT.DATE'),\n          field: 'datetime',\n          permission: true,\n          visible: getColumnVisibility('datetime'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.datetime | date: \"dd/MM/yyyy HH:mm\"}}</div>'\n        },\n        autocode: {\n          displayName: $filter('translate')('PRODUCT.ORIGIN'),\n          field: 'autocode',\n          permission: true,\n          visible: getColumnVisibility('autocode'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div ng-if=\"grid.appScope.vm.stock_movement_autocode_dict[row.entity.autocode]==grid.appScope.vm.stock_movement_autocode_dict[\\'NOT_AVAILABLE\\']\" class=\"cell-middle secondary-text\" translate=\"PRODUCT.STOCK_MOVEMENT_NOT_AVAILABLE\"></div>' +\n            '<div ng-if=\"grid.appScope.vm.stock_movement_autocode_dict[row.entity.autocode]==grid.appScope.vm.stock_movement_autocode_dict[\\'REMOVED\\']\" class=\"cell-middle secondary-text\" translate=\"PRODUCT.STOCK_MOVEMENT_REMOVED\"></div>' +\n            '<a class=\"cell-middle\" ui-sref=\"app.inventory.stocktakings.stocktaking.products({id:row.entity.object_id})\" ng-if=\"grid.appScope.vm.stock_movement_autocode_dict[row.entity.autocode]==grid.appScope.vm.stock_movement_autocode_dict[\\'STOCKTAKING\\'] && row.entity.object_id\" translate=\"STOCKTAKING.STOCKTAKING\"></a>' +\n            '<div class=\"cell-middle\" ng-if=\"grid.appScope.vm.stock_movement_autocode_dict[row.entity.autocode]==null\">{{row.entity.autocode}}</div>'\n        },\n        type: {\n          displayName: $filter('translate')('PRODUCT.TYPE'),\n          field: 'type',\n          permission: true,\n          visible: getColumnVisibility('type'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<span class=\"cell-middle\" translate=\"PRODUCT.{{grid.appScope.vm.stock_movement_types[row.entity.type]}}\"></span>'\n        },\n        quantity: {\n          displayName: $filter('translate')('PRODUCT.AMOUNT'),\n          field: 'quantity',\n          permission: true,\n          visible: getColumnVisibility('quantity'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.move}}</div>'\n        },\n        warehouse: {\n          displayName: $filter('translate')('PRODUCT.WAREHOUSE'),\n          field: 'warehouse',\n          permission: true,\n          visible: getColumnVisibility('warehouse'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.warehouse}}</div>'\n        },\n        color: {\n          displayName: $filter('translate')('PRODUCT.COLOR'),\n          field: 'color',\n          permission: true,\n          visible: getColumnVisibility('color'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.color}}</div>'\n        },\n        size: {\n          displayName: $filter('translate')('PRODUCT.SIZE'),\n          field: 'size',\n          permission: true,\n          visible: getColumnVisibility('size'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.size}}</div>'\n        },\n        user: {\n          displayName: $filter('translate')('PRODUCT.USER'),\n          field: 'user',\n          permission: true,\n          visible: getColumnVisibility('user'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.user}}</div>'\n        },\n        reason: {\n          displayName: $filter('translate')('MOVEMENTS.REASON_SHORT'),\n          field: 'reason',\n          permission: true,\n          visible: getColumnVisibility('reason'),\n          minWidth: 175,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div ng-if=\"row.entity.reason\"><span class=\"ml-10 cursor-pointer text-boxed {{grid.appScope.vm.getReasonStyle(row.entity.reason)}}\"' +\n            'ng-click=\"grid.appScope.vm.editMovement(row.entity)\"' +\n            'translate=\"MOVEMENTS.{{grid.appScope.vm.stock_movement_reasons[row.entity.reason]}}\"></span>' +\n            '</div>' +\n            '<div ng-if=\"!row.entity.reason\"><md-button class=\"md-primary\"' +\n            'ng-click=\"grid.appScope.vm.editMovement(row.entity)\" has-permission=\"app.inventory.products.product.stock-movements.update\">' +\n            '<md-icon class=\"mr-5 mb-5 size-20\" md-font-icon=\"icon-pencil\"></md-icon>' +\n            '<span translate=\"MOVEMENTS.ADD_REASON\"></span>' +\n            '</md-button></div>'\n        },\n        notes: {\n          displayName: $filter('translate')('MOVEMENTS.NOTES'),\n          field: 'notes',\n          permission: true,\n          visible: getColumnVisibility('notes'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div ng-if=\"row.entity.notes\" class=\"cell-middle secondary-text\">{{row.entity.notes}}</div>' +\n            '<div ng-if=\"!row.entity.notes\"><md-button class=\"md-primary\" ng-click=\"grid.appScope.vm.editMovement(row.entity)\" has-permission=\"app.inventory.products.product.stock-movements.update\"><md-icon class=\"mr-5 mb-5 size-20\" md-font-icon=\"icon-pencil\"></md-icon><span translate=\"MOVEMENTS.ADD_REASON_NOTES\"></span></md-button></div>'\n        }\n      });\n\n      // Setting only the columns with permission to the grid\n      vm.gridOptions.columnDefs = [];\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getGridProductsPage() {\n      vm.loading = true;\n      api.inventories.stockMovements.get({\n        uid_stock_id: UIDId,\n        pagination: 'datatable',\n        length: vm.status.pageSize,\n        page: vm.status.pageNumber,\n        start: vm.status.pageSize * (vm.status.pageNumber - 1),\n        ordering: vm.status.ordering,\n        search: vm.status.search\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.loading = false;\n          vm.uiGridInitialized = true;\n          vm.gridOptions.data = response.data;\n          vm.gridOptions.totalItems = response.recordsTotal;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function accept() {\n      $mdDialog.hide();\n    }\n\n    function editMovement(movement) {\n      if (!Session.hasPermission('app.inventory.products.product.stock-movements.update')) {\n        return;\n      }\n      $mdDialog.show({\n        controller: 'StockMovementDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/stock-movement/stock-movement.html',\n        clickOutsideToClose: true,\n        focusOnOpen: true,\n        multiple: true,\n        locals: {\n          movement: movement,\n          readonly: false,\n          callback: function(movement) {\n            api.inventories.stockMovements.update(\n              movement, function(response) {\n                $mdToast\n                  .show($mdToast.simple()\n                    .textContent($filter('translate')('PRODUCT.STOCK_SAVED'))\n                    .position('top right'));\n              });\n          }\n        }\n      }).then(function() {\n        getGridProductsPage();\n      });\n    }\n\n    function getReasonStyle(reason) {\n      switch (reason) {\n        case STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_ROBBERY:\n          return 'red-bg white-fg';\n        case STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EXPIRY:\n          return 'brown-bg white-fg';\n        case STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_BREAKAGE:\n          return 'black-bg white-fg';\n        default:\n          return '';\n      }\n    }\n\n    function trim(text, size) {\n      if (text && text.length > size) {\n        return text.substr(0, size) + '…';\n      }\n      return text;\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('StockMovementDialogController', StockMovementDialogController);\n\n  /** @ngInject */\n  function StockMovementDialogController($mdDialog,\n                                         callback,\n                                         readonly,\n                                         movement,\n                                         Session,\n                                         STOCK_MOVEMENT_REASONS) {\n    var vm = this;\n\n    // Data\n    vm.STOCK_MOVEMENT_REASONS = STOCK_MOVEMENT_REASONS;\n    vm.maxLength = 256;\n    vm.movement = angular.copy(movement);\n    vm.readonly = readonly;\n    vm.movements = [\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_BREAKAGE,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EXPIRY,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_ROBBERY,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_TESTER,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_COURSE,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_INTERNAL_USE,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_LOSS,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_ADJUSTMENT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_PRESS_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EMPLOYEE_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EMPLOYEE_WELCOME_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_CUSTOMER_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_CUSTOMER_WELCOME_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_OWNER_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_OTHER\n    ];\n    vm.hasReasonWhenInit = vm.movement.reason ? true : false;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.accept = accept;\n    vm.deleteReason = deleteReason;\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function deleteReason() {\n      if (!Session.hasPermission('inventory.products.product.uid_stocks.create')) {\n        return;\n      }\n\n      vm.movement.reason = null;\n      vm.movement.notes = null;\n      vm.accept();\n    }\n\n    function accept() {\n      callback(vm.movement);\n      $mdDialog.hide();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ProductVariantSelectorGridController', ProductVariantSelectorGridController);\n\n  /** @ngInject */\n  function ProductVariantSelectorGridController($scope, $rootScope, UiGridService, $mdMedia, $timeout, $filter, Session, api,\n                                                $mdDialog, selectedVariants, SEARCH_MAX_LENGTH, $q, $mdSidenav, BarcodeService, $state) {\n\n    var vm = $scope.vm;\n    vm.$mdMedia = $mdMedia;\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.keptSelectionArray = selectedVariants;\n    vm.loading = true;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.status = {\n      state: {}, ordering: 'product__id', search: '', filtersParams: {}, notifications: 0, filters: {\n        brands: [],\n        categories: [],\n        subcategories: [],\n        seasons: [],\n        compositions: [],\n        status: [],\n        sites: [],\n        barcode: '',\n        sku: '',\n        sizes: [],\n        colors: [],\n        webCategories: [],\n        providers: [],\n        purchases: [],\n        cover: '',\n        tag: '',\n        stock: '',\n        visibleInEcommerce: '',\n        discountPrice: '',\n        stockBelowMinimum: false,\n        discountActive: false,\n        duplicatedProducts: false,\n        isNoos: false,\n        archived: false,\n        duplicatedBarcode: false,\n        duplicatedSku: false,\n        productCreatedStartDate: null,\n        productCreatedEndDate: null,\n        productUpdatedStartDate: null,\n        productUpdatedEndDate: null,\n        productPriceUpdatedStartDate: null,\n        productPriceUpdatedEndDate: null\n      }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeUidGrid,\n      enableColumnMenus: false,\n      enableSorting: false,\n      enableRowSelection: true\n      // isRowSelectable: false\n\n    });\n\n    $scope.selectFilter = {};\n\n    vm.getGridProductsPage = getGridProductsPage;\n    vm.cancel = cancel;\n    vm.confirm = confirm;\n    vm.filterChanged = filterChanged;\n    vm.variantQuerySearch = variantQuerySearch;\n    vm.toggleSidenav = toggleSidenav;\n    vm.clearFilter = clearFilter;\n    vm.goToProduct = goToProduct;\n\n    initialize();\n\n    function initialize() {\n\n    }\n\n    vm.barcodeListenerCallbackId = BarcodeService.subscribeBarcode(barcodeListenerCallback);\n    $scope.$on('$destroy', function () {\n      BarcodeService.unsubscribeBarcode(vm.barcodeListenerCallbackId);\n    });\n\n    function barcodeListenerCallback(barcode) {\n      vm.status.search = barcode;\n      if (vm.uiGridInitialized) {\n        getGridProductsPage();\n      }\n    }\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function (changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          vm.timeout = $timeout(function () {\n            vm.timeout = null;\n            getGridProductsPage();\n          }, 2000);\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.pageNumber = newPage;\n          vm.status.pageSize = pageSize;\n          getGridProductsPage();\n        }\n      });\n\n      gridApi.grid.registerDataChangeCallback(function () {\n        gridApi.treeBase.expandAllRows();\n      });\n\n      vm.gridApi.core.on.rowsRendered($scope, function () {\n        var grid = this.grid;\n        var allSelected = true;\n        grid.rows.forEach(function (part, index, array) {\n          if (vm.keptSelectionArray.includes(array[index].entity.id)) {\n            array[index].isSelected = true;\n          } else if (allSelected) {\n            allSelected = false;\n          }\n        });\n\n        if (allSelected) {\n          grid.selection.selectAll = true;\n        }\n      });\n\n      vm.gridApi.selection.on.rowSelectionChanged($scope, function (row) {\n        updateSelectedRows(row);\n      });\n\n      vm.gridApi.selection.on.rowSelectionChangedBatch($scope, function () {\n        if (vm.gridApi.selection.getSelectAllState()) {\n          this.grid.rows.map(function (row) {\n            var idx = vm.keptSelectionArray.indexOf(row.entity);\n            if (idx === -1) {\n              vm.keptSelectionArray.push(row.entity);\n            }\n          });\n        } else {\n          this.grid.rows.map(function (row) {\n            updateSelectedRows(row);\n          });\n        }\n      });\n\n      setGridColumns();\n      getGridProductsPage();\n      $timeout(function () {\n        $rootScope.$broadcast('ndGrid::statusLoaded');\n      }, 500);\n    }\n\n    function filterChanged() {\n      getGridProductsPage();\n    }\n\n\n    function setGridColumns(avoidState) {\n      // Setting columns default configuration\n      // http://ui-grid.info/docs/#!/api/ui.grid.class:GridOptions.columnDef\n      angular.extend(vm.columns, {\n        cover_thumbnail: {\n          displayName: '',\n          field: 'cover_thumbnail',\n          permission: true,\n          visible: getColumnStatusVisibility('cover_thumbnail', true, avoidState),\n          minWidth: 48,\n          width: 48,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: createThumbnailCellTemplate()\n        },\n        codeSku: {\n          displayName: $filter('translate')('PRODUCT.CODE_SKU'),\n          headerTooltip: $filter('translate')('PRODUCT.CODE_SKU'),\n          field: 'product.id',\n          grouping: {groupPriority: 0},\n          permission: true,\n          visible: getColumnStatusVisibility('product.id', true, avoidState),\n          enableHiding: false,\n          cellTemplate: createCodeSkuCellTemplate()\n        },\n        name: {\n          displayName: $filter('translate')('PRODUCT.NAME'),\n          headerTooltip: $filter('translate')('PRODUCT.NAME'),\n          field: 'name',\n          permission: true,\n          visible: getColumnStatusVisibility('name', true, avoidState),\n          enableHiding: false,\n          cellTemplate: createNameTemplate()\n        },\n        brand: {\n          displayName: $filter('translate')('PRODUCT.BRAND'),\n          headerTooltip: $filter('translate')('PRODUCT.BRAND'),\n          field: 'brand',\n          permission: true,\n          visible: getColumnStatusVisibility('brand', true, avoidState),\n          enableHiding: false,\n          cellTemplate: createBrandTemplate()\n        },\n        season: {\n          displayName: $filter('translate')('PRODUCT.SEASON'),\n          headerTooltip: $filter('translate')('PRODUCT.SEASON'),\n          field: 'season',\n          permission: true,\n          visible: getColumnStatusVisibility('season', true, avoidState),\n          enableHiding: false,\n          cellTemplate: createSeasonTemplate()\n        },\n        category: {\n          displayName: $filter('translate')('PRODUCT.CATEGORY'),\n          headerTooltip: $filter('translate')('PRODUCT.CATEGORY'),\n          field: 'category',\n          permission: true,\n          visible: getColumnStatusVisibility('category', true, avoidState),\n          enableHiding: false,\n          cellTemplate: createCategoryTemplate()\n        },\n        stock: {\n          displayName: $filter('translate')('PRODUCT.STOCK'),\n          headerTooltip: $filter('translate')('PRODUCT.STOCK'),\n          field: 'stock',\n          permission: true,\n          visible: getColumnStatusVisibility('stock', true, avoidState),\n          enableHiding: false,\n          cellTemplate: createStockTemplate()\n        }\n      });\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getColumnStatusVisibility(field, defaultValue, avoidState) {\n      if (vm.status.state.columns) {\n        var column = vm.status.state.columns.find(function (column) {\n          return column.name === field;\n        });\n        if (!avoidState && column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function getGridVisibleColumnFields() {\n      var fields = 'id,';\n      var all = true;\n\n      var keys = Object.keys(vm.columns);\n      var columns = keys.map(function (v) {\n        return vm.columns[v];\n      });\n\n      columns.forEach(function (column) {\n        if (!column.visible) {\n          all = false;\n        } else {\n          fields += column.field + ',';\n        }\n      });\n\n      if (all) {\n        return null;\n      } else {\n        return fields;\n      }\n    }\n\n    function getGridProductsPagePostData() {\n      var d = {};\n\n      // Configuration\n      d.pagination = 'datatable';\n      d.long_url_get = true;\n\n      // Pagination\n      d.length = vm.status.pageSize;\n      d.start = vm.status.pageSize * (vm.status.pageNumber - 1);\n\n      // Ordering\n      d.ordering = vm.status.ordering;\n\n      // Fields\n      d.fields = getGridVisibleColumnFields();\n\n      // Search\n      d.search = vm.status.search;\n\n      // Filters (from the directive nd-products-filters\n      angular.extend(d, vm.status.filtersParams);\n\n      return d;\n    }\n\n    var controller = new AbortController();\n\n    function getGridProductsPage() {\n      if (vm.loading) {\n        controller.abort();\n        controller = new AbortController();\n      }\n\n      vm.loading = true;\n      var url = api.urls.inventories.productVariants.replace('/:id/:option', '');\n\n      fetch(url, {\n        method: 'POST',\n        headers: {\n          'Authorization': 'Token ' + Session.token,\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(getGridProductsPagePostData()),\n        signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          vm.loading = false;\n          vm.uiGridInitialized = true;\n          vm.gridOptions.data = data.data;\n          vm.gridOptions.totalItems = data.recordsTotal;\n          $scope.$apply();\n\n        })\n        .catch(function (error) {\n          throw error;\n        });\n\n    }\n\n    function updateSelectedRows(changed_row) {\n      var idx = vm.keptSelectionArray.indexOf(changed_row.entity);\n      if (idx > -1) {\n        vm.keptSelectionArray.splice(idx, 1);\n      } else {\n        vm.keptSelectionArray.push(changed_row.entity);\n      }\n    }\n\n    function goToProduct(productId) {\n      $state.go('app.inventory.products.product.overview', {id: productId});\n      vm.cancel();\n    }\n\n    function createCodeSkuCellTemplate() {\n      return '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">' +\n        '<a style=\"cursor: pointer;\" ng-click=\"grid.appScope.vm.goToProduct(row.treeNode.children[0].row.entity.product.id)\">' +\n        '{{row.treeNode.children[0].row.entity.product.code}}' +\n        '</a>' +\n        '</div>' +\n\n        '<div class=\"cell-middle\" ng-show=\"row.treeLevel !== 0\">' +\n        '{{row.entity.sku}}' +\n        '</div>';\n    }\n\n    function createNameTemplate() {\n      return '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">' +\n        '{{row.treeNode.children[0].row.entity.product.name}}' +\n        '</div>' +\n\n        '<div class=\"cell-middle\" ng-show=\"row.treeLevel !== 0\">' +\n        '{{row.entity.full_name}}' +\n        '</div>';\n    }\n\n    function createBrandTemplate() {\n      return '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">' +\n        '{{row.treeNode.children[0].row.entity.product.brand}}' +\n        '</div>';\n    }\n\n    function createSeasonTemplate() {\n      return '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">' +\n        '{{row.treeNode.children[0].row.entity.product.season}}' +\n        '</div>';\n    }\n\n    function createCategoryTemplate() {\n      return '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">' +\n        '{{row.treeNode.children[0].row.entity.product.category}}' +\n        '</div>';\n    }\n\n    function createStockTemplate() {\n      return '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">' +\n        '{{row.treeNode.children[0].row.entity.product.total_stock}}' +\n        '</div>' +\n\n        '<div class=\"cell-middle\" ng-show=\"row.treeLevel !== 0\">' +\n        '{{row.entity.total_stock}}' +\n        '</div>';\n    }\n\n    function createThumbnailCellTemplate() {\n      return '<md-icon ng-if=\"!row.treeNode.children[0].row.entity.product.cover_thumbnail && row.treeLevel === 0\" md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail\"></md-icon>' +\n        '<img ng-if=\"row.treeNode.children[0].row.entity.product.cover_thumbnail && row.treeLevel === 0\" width=\"32px\" ng-src=\"{{row.treeNode.children[0].row.entity.product.cover_thumbnail}}\" lazy-src />';\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function confirm() {\n      $mdDialog.hide(vm.keptSelectionArray);\n    }\n\n    function variantQuerySearch(type) {\n      var deferred = $q.defer();\n      var searchText = '';\n      if (type === vm.TYPE_SIZE) {\n        searchText = vm.sizeSearchText;\n      } else if (type === vm.TYPE_COLOR) {\n        searchText = vm.colorSearchText;\n      }\n\n      searchText = searchText.substring(0, vm.SEARCH_MAX_LENGTH);\n\n      api.inventories.variants.get(\n        {\n          autocomplete: type,\n          search: searchText,\n          'serializer': 'VariantFullSerializer',\n        },\n        function (results) {\n          if (results.results) {\n            var variants = type === vm.TYPE_SIZE ? vm.status.filters.sizes : vm.status.filters.colors;\n            var variantIds = variants.map(function (variant) {\n              return variant.id;\n            });\n            deferred.resolve(results.results.filter(function (variant) {\n              return variantIds.indexOf(variant.id) === -1;\n            }));\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function clearFilter() {\n      $rootScope.$broadcast('ndProductsFilters::clearFilters');\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ProductSearchController', ProductSearchController);\n\n  /** @ngInject */\n  function ProductSearchController($scope, $rootScope, $mdDialog, $mdMedia, $compile, api, $document, $filter, $cookies, $mdSidenav, $timeout, apiResolver, Session, DTColumnBuilder, params, HTTP_STATUS, SEARCH_MAX_LENGTH) {\n\n    // Cons\n    $scope.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    $scope.search = '';\n    $scope.variants = [];\n    $scope.tabIndex = 0;\n    $scope.filterSite = '';\n    $scope.discountActive = false;\n    $scope.productsById = {};\n    $scope.productVariantsById = {};\n    $scope.sourceUnderMinimum = false;\n    $scope.targetUnderMinimum = false;\n    $scope.$mdMedia = $mdMedia;\n    $scope.sidenavLockedOpen = true;\n    $scope.status = {\n      state: {}, ordering: '', search: '', filtersParams: {}, notifications: 0, filters: {\n        brands: [],\n        categories: [],\n        subcategories: [],\n        seasons: [],\n        compositions: [],\n        status: [],\n        sites: [],\n        barcode: '',\n        sku: '',\n        sizes: [],\n        colors: [],\n        webCategories: [],\n        providers: [],\n        purchases: [],\n        cover: '',\n        tag: '',\n        stock: '',\n        visibleInEcommerce: '',\n        discountPrice: '',\n        stockBelowMinimum: false,\n        discountActive: false,\n        duplicatedProducts: false,\n        isNoos: false,\n        archived: false,\n        duplicatedBarcode: false,\n        duplicatedSku: false,\n        productCreatedStartDate: null,\n        productCreatedEndDate: null,\n        productUpdatedStartDate: null,\n        productUpdatedEndDate: null,\n        productPriceUpdatedStartDate: null,\n        productPriceUpdatedEndDate: null\n      }, pageNumber: 1 //pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    // Params\n    $scope.multipleProducts = angular.isDefined(params.multiple) ? params.multiple : true;\n    $scope.getVariants = angular.isDefined(params.getVariants) ? params.getVariants : false;\n    $scope.sourceWarehouse = angular.isDefined(params.sourceWarehouse) ? params.sourceWarehouse : null;\n    $scope.targetWarehouse = angular.isDefined(params.targetWarehouse) ? params.targetWarehouse : null;\n    $scope.hideBundles = angular.isDefined(params.hideBundles) ? params.hideBundles : false;\n    $scope.filterBrands = angular.isDefined(params.filterBrands) ? params.filterBrands : null;\n    $scope.filterCategories = angular.isDefined(params.filterCategories) ? params.filterCategories : null;\n    $scope.filterSeasons = angular.isDefined(params.filterSeasons) ? params.filterSeasons : null;\n    $scope.manageUids = angular.isDefined(params.manageUids) ? params.manageUids : null;\n    $scope.manageLots = angular.isDefined(params.manageLots) ? params.manageLots : null;\n\n    $scope.result = {\n      product: null,        // product object, not product_id\n      products: [],         // list of product objects, not of product_ids\n      productVariant: null, // productVariant object, not productVariant_ids\n      productVariants: []  // list of productVariant objects, not of productVariant_id\n    };\n    $scope.selectedProductDict = {};\n\n    $scope.selectedAmountsDict = {}; // productId: [amountSelected, amountVariants]\n    $scope.fetchingVariants = {};\n\n    $scope.showProductVariantSelector = false;\n    $scope.productsDict = {};\n    $scope.dtInstance = {};\n    $scope.dtVariantsInstance = {};\n    $scope.dtVariantsOptions = null;\n    $scope.dtOptions = {\n      ajax: {\n        dataSrc: 'data', url: api.baseUrl + 'inventories/products', type: 'get', headers: {\n          'Authorization': 'Token ' + Session.token\n        }, data: function(d) {\n          d.pagination = 'datatable';\n          d.serializer = 'ProductNamedSerializer';\n\n          // Manual filters (from the directive nd-products-filters)\n          angular.extend(d, $scope.status.filtersParams);\n\n          // Mandatory filters (from the view controller)\n          if (params.collectionId) {\n            d.presale = params.collectionId;\n          }\n          if ($scope.sourceUnderMinimum && $scope.targetUnderMinimum && $scope.sourceWarehouse && $scope.targetWarehouse) {\n            //d.under_minimum = [$scope.sourceWarehouse.id, $scope.targetWarehouse.id].join(',');\n            d.under_minimum = [$scope.sourceWarehouse, $scope.targetWarehouse].join(',');\n          } else if ($scope.sourceUnderMinimum && $scope.sourceWarehouse) {\n            //d.under_minimum = $scope.sourceWarehouse.id;\n            d.under_minimum = $scope.sourceWarehouse;\n          } else if ($scope.targetUnderMinimum && $scope.targetWarehouse) {\n            //d.under_minimum = $scope.targetWarehouse.id;\n            d.under_minimum = $scope.targetWarehouse;\n          }\n\n          if ($scope.filterBrands && $scope.filterBrands.length) {\n            d.brands = $scope.filterBrands.join(',');\n          }\n          if ($scope.filterCategories && $scope.filterCategories.length) {\n            d.categories = $scope.filterCategories.join(',');\n          }\n          if ($scope.filterSeasons && $scope.filterSeasons.length) {\n            d.seasons = $scope.filterSeasons.join(',');\n          }\n          if ($scope.hideBundles) {\n            d.hide_bundles = $scope.hideBundles;\n          }\n\n          if ($scope.manageUids !== null) {\n            d.manage_uids = $scope.manageUids;\n          }\n\n          if ($scope.manageLots !== null) {\n            d.manage_lots = $scope.manageLots;\n          }\n        }\n      },\n      rowId: 'id', //dom: '<\"top\"<\"left\"f<\"info\"i>><\"right\"<\"pagination\"p>>>rt',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      pagingType: 'simple',\n      pageLength: 25,\n      lengthMenu: [25, 50, 100, 200],\n      scrollX: false,\n      fixedHeader: false,\n      responsive: false, //scrollY: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      headerCallback: headerCallback,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      order: [[2, 'asc']],\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        data.status = $scope.status;\n        data.sourceUnderMinimum = $scope.sourceUnderMinimum;\n        data.targetUnderMinimum = $scope.targetUnderMinimum;\n        localStorage.setItem(Session.company.id + '::dataTableProductSearchDialogControllerV2', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableProductSearchDialogControllerV2'));\n        if (state) {\n          if (state.search && state.search.search) {\n            $scope.search = state.search.search;\n          }\n          if (angular.isDefined(state.status)) {\n            $scope.status = state.status;\n          }\n          $scope.sourceUnderMinimum = angular.isDefined(state.sourceUnderMinimum) ? state.sourceUnderMinimum : false;\n          $scope.targetUnderMinimum = angular.isDefined(state.targetUnderMinimum) ? state.targetUnderMinimum : false;\n        }\n        $timeout(function() {\n          $rootScope.$broadcast('ndGrid::statusLoaded');\n        }, 500);\n        return state;\n      }\n    };\n\n    $scope.dtColumns = [];\n    if ($scope.multipleProducts) {\n\n      if ($scope.getVariants) {\n        // When get also the variants, the checkbox is just an icon and there is not checkbox at header\n        $scope.dtColumns.push(DTColumnBuilder.newColumn('select')\n          .notSortable()\n          .withOption('searchable', false)\n          .withOption('orderable', false)\n          .renderWith(function(data, type, full) {\n            var result = '<div layout=\"column\">';\n            result += '<md-tooltip md-delay=\"500\">{{\"PRODUCTS.SELECT_DESELECT_ALL\" | translate}}</md-tooltip>';\n            result += '<md-progress-circular md-diameter=\"26\" class=\"md-accent\" ng-if=\"fetchingVariants[' + full.id + ']\"></md-progress-circular>';\n            result += '<md-icon class=\"mr-10 s26\" ng-if=\"!fetchingVariants[' + full.id + ']\" md-font-icon=\"{{getProductsCheckboxIcon(' + full.id + ')}}\" ng-class=\"getProductsCheckboxClass(' + full.id + ')\" ng-click=\"toggleAndSelectAllVariants(' + full.id + ')\"></md-icon>';\n            result += '<span class=\"variants-amount secondary-text\" ng-if=\"selectedAmountsDict[' + full.id + '] && selectedAmountsDict[' + full.id + '][0]\">{{selectedAmountsDict[' + full.id + '][0]}}/{{selectedAmountsDict[' + full.id + '][1]}}</span>';\n            result += '</div>';\n            return result;\n          }));\n      } else {\n        $scope.dtColumns.push(DTColumnBuilder.newColumn('select')\n          .withTitle('<md-checkbox class=\"mb-0\" ng-checked=\"isChecked()\"  md-indeterminate=\"isIndeterminate()\" ng-click=\"selectAll()\"></md-checkbox>')\n          .notSortable()\n          .withOption('searchable', false)\n          .withOption('orderable', false)\n          .renderWith(function(data, type, full) {\n            return '<md-checkbox class=\"m-0\" ng-checked=\"exists(' + full.id + ')\" ng-click=\"toggle(' + full.id + ')\"></md-checkbox>';\n          }));\n      }\n\n    }\n    $scope.dtColumns = $scope.dtColumns.concat([DTColumnBuilder.newColumn('cover_thumbnail').withTitle($filter('translate')('PRODUCT.IMAGE'))\n      .renderWith(function(data, type, full) {\n        if (full.cover_thumbnail) {\n          return '<img src=\"' + full.cover_thumbnail + '\">';\n        }\n        return '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg\"></md-icon>';\n      }), DTColumnBuilder.newColumn('code')\n      .withTitle($filter('translate')('PRODUCT.CODE'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        $scope.productsById[full.id] = full;\n        return '<span class=\"text-truncate\"><md-tooltip md-delay=\"500\">' + full.code + '</md-tooltip>' + full.code + '</span>';\n      }), DTColumnBuilder.newColumn('name')\n      .withTitle($filter('translate')('PRODUCT.NAME'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        return '<span class=\"text-truncate\"><md-tooltip md-delay=\"500\">' + full.name + '</md-tooltip>' + full.name + '</span>';\n      }), DTColumnBuilder.newColumn('total_stock')\n      .withTitle($filter('translate')('PRODUCT.TOTAL_STOCK'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        return '<span>' + full.total_stock + '</span>';\n      }), DTColumnBuilder.newColumn('brand__name')\n      .withTitle($filter('translate')('PRODUCT.BRAND'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        return '<span class=\"text-truncate\">' + full.brand + '</span>';\n      }), DTColumnBuilder.newColumn('season__name')\n      .withTitle($filter('translate')('PRODUCT.SEASON'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        return '<span>' + full.season + '</span>';\n      }), DTColumnBuilder.newColumn('category__name')\n      .withTitle($filter('translate')('PRODUCT.CATEGORY'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        return '<span>' + full.category + '</span>';\n      }), DTColumnBuilder.newColumn('subcategory__name')\n      .withTitle($filter('translate')('PRODUCT.SUBCATEGORY'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        return '<span>' + full.subcategory ? full.subcategory : '-' + '</span>';\n      }), DTColumnBuilder.newColumn('provider__name')\n      .withTitle($filter('translate')('PRODUCT.PROVIDER'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        return '<span>' + full.provider ? full.provider : '-' + '</span>';\n      })]);\n\n    $scope.dtVariantsColumns = [];\n    if ($scope.multipleProducts) {\n      $scope.dtVariantsColumns.push(DTColumnBuilder.newColumn('select')\n        .withTitle('<md-checkbox class=\"mb-0\" ng-checked=\"isVariantChecked()\"  md-indeterminate=\"isVariantIndeterminate()\" ng-click=\"selectAllVariant()\"></md-checkbox>')\n        .withOption('className', 'checkbox')\n        .withOption('sortable', false)\n        .withOption('searchable', false)\n        .withOption('orderable', false)\n        .withClass('w-30')\n        .renderWith(function(data, type, full) {\n          return '<md-checkbox class=\"m-0\" ng-checked=\"exists(' + full.id + ', true)\" ng-click=\"toggle(' + full.id + ', true)\"></md-checkbox>';\n        }));\n    }\n    $scope.dtVariantsColumns = $scope.dtVariantsColumns.concat([DTColumnBuilder.newColumn('cover_thumbnail').withTitle($filter('translate')('PRODUCT.IMAGE'))\n      .withOption('className', 'imageColumn')\n      .withOption('sortable', false)\n      .renderWith(function(data, type, full) {\n        $scope.productVariantsById[full.id] = full;\n        if (full.cover_thumbnail) {\n          return '<img class=\"w-50\" src=\"' + full.cover_thumbnail + '\"/>';\n        }\n        return '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg\"></md-icon>';\n      }), DTColumnBuilder.newColumn('size_name')\n      .withTitle($filter('translate')('PRODUCT.SIZE')), DTColumnBuilder.newColumn('color_name')\n      .withTitle($filter('translate')('PRODUCT.COLOR')), DTColumnBuilder.newColumn('barcode')\n      .withTitle($filter('translate')('PRODUCT.BARCODE'))\n      .renderWith(function(data, type, full) {\n        return data ? data : '-';\n      }), DTColumnBuilder.newColumn('sku')\n      .withTitle($filter('translate')('PRODUCT.SKU'))\n      .renderWith(function(data, type, full) {\n        return data ? data : '-';\n      })]);\n\n\n    // Methods\n    $scope.toggleSidenav = toggleSidenav;\n    $scope.showDialog = showDialog;\n    $scope.cancel = cancel;\n    // $scope.toggleRight = buildToggler('right');\n    // $scope.headerCallback = headerCallback;\n    $scope.filterByColumn = filterByColumn;\n    $scope.selectAll = selectAll;\n    $scope.selectAllVariant = selectAllVariant;\n    $scope.isIndeterminate = isIndeterminate;\n    $scope.isChecked = isChecked;\n    $scope.isVariantChecked = isVariantChecked;\n    $scope.exists = exists;\n    $scope.getProductsCheckboxIcon = getProductsCheckboxIcon;\n    $scope.getProductsCheckboxClass = getProductsCheckboxClass;\n    $scope.toggle = toggle;\n    $scope.toggleAndSelectAllVariants = toggleAndSelectAllVariants;\n    $scope.select = select;\n    $scope.unselectProduct = unselectProduct;\n    // $scope.selectProductVariant = selectProductVariant;\n    $scope.setVisibleTable = setVisibleTable;\n    $scope.onSelectorOpen = onSelectorOpen;\n    $scope.onSelectorClose = onSelectorClose;\n    $scope.reloadProducts = reloadProducts;\n    $scope.clearFilter = clearFilter;\n\n    // Initialization\n    initialize();\n\n    // Functions:\n\n    function initialize() {\n      $scope.orderProductsBackup = angular.copy($scope.orderProducts);\n    }\n\n    function clearFilter() {\n      $rootScope.$broadcast('ndProductsFilters::clearFilters');\n    }\n\n    function mapAndJoinList(list) {\n      if (!list || !list.length) {\n        return null;\n      }\n      return list.map(function(item) {\n        return item.id;\n      }).join();\n    }\n\n    function initComplete() {\n      var api = this.api();\n\n      var searchBox = angular.element('body').find('#product-search-input');\n\n      if ($scope.dtInstance && $scope.dtInstance.DataTable) {\n        $scope.dtInstance.DataTable.columns.adjust();\n\n        // Bind an external input as a table wide search box\n        if (searchBox.length > 0) {\n          searchBox.on('keyup', function(event) {\n            if ($scope.timeout) {\n              $timeout.cancel($scope.timeout);\n            }\n            $scope.timeout = $timeout(function() {\n              var input = event.target.value;\n              var regex = false;\n              var smart = false;\n              var caseInsen = true;\n              api.search(input, regex, smart, caseInsen).draw();\n            }, 500);\n          });\n        }\n      }\n\n      $scope.dtInstance.DataTable.columns.adjust().draw();\n    }\n\n    function initVariantsComplete() {\n      var api = this.api();\n      var searchBox = angular.element('body').find('#product-search-input');\n\n      $scope.dtVariantsInstance.DataTable.columns.adjust();\n      var length = $scope.dtVariantsInstance.DataTable.data().length;\n\n      updateAmounts($scope.clickedProduct.id, length);\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          if ($scope.timeout) {\n            $timeout.cancel($scope.timeout);\n          }\n          $scope.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function showDialog(ev) {\n      $mdDialog.show({\n        contentElement: '#product-search-dialog',\n        parent: angular.element($document.find('body')),\n        targetEvent: ev,\n        clickOutsideToClose: true\n      });\n    }\n\n    function filterByColumn(filter, column) {\n      $scope.dtInstance.DataTable.column(column).search(filter).draw();\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function headerCallback(header) {\n      if (!$scope.headerCompiled) {\n        // Use this headerCompiled field to only compile header once\n        $scope.headerCompiled = true;\n        $compile(angular.element(header).contents())($scope);\n      }\n    }\n\n    function headerVariantCallback(header) {\n      if (!$scope.headerVariantCompiled) {\n        // Use this headerCompiled field to only compile header once\n        $scope.headerVariantCompiled = true;\n        $compile(angular.element(header).contents())($scope);\n      }\n    }\n\n    function cancel() {\n      $scope.orderProducts = angular.copy($scope.orderProductsBackup);\n      $mdDialog.cancel();\n    }\n\n    function select() {\n      $mdDialog.hide($scope.result);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n\n        // Manage the product\n        if ($scope.multipleProducts) {\n          toggle(aData.id);\n          $scope.$apply();\n          /*if (exists(aData, false)) {\n            $scope.result.products.push(aData);\n          }*/\n        } else {\n          $scope.result.product = aData;\n        }\n\n        // Manage the variants\n        if ($scope.getVariants) {\n          $scope.clickedProduct = aData;\n          initVariantsTable();\n        } else if (!$scope.multipleProducts) {\n          $mdDialog.hide($scope.result);\n        }\n\n        updateAmounts(aData.id);\n      });\n\n      $('td:nth-child(1)', nRow).unbind('click');\n      return nRow;\n    }\n\n    function rowVariantCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        if ($scope.multipleProducts) {\n          toggle(aData.id, true);\n          updateAmounts(aData.product_id, $scope.dtVariantsInstance.DataTable.data().length);\n          $scope.$apply();\n        } else {\n          $scope.result.productVariant = aData;\n          $mdDialog.hide($scope.result);\n        }\n      });\n\n      $('td:nth-child(1)', nRow).unbind('click');\n\n      $scope.$apply();\n      return nRow;\n    }\n\n    function initVariantsTable() {\n      $scope.tabIndex = 1;\n\n      $scope.dtVariantsOptions = {\n        ajax: {\n          dataSrc: 'data', url: api.baseUrl + 'inventories/product-variants', type: 'get', headers: {\n            'Authorization': 'Token ' + Session.token\n          }, data: function(d) {\n            d.pagination = 'datatable';\n            d.serializer = 'ProductVariantNamedSerializer';\n            d.is_raw_material = false;\n\n            if ($scope.clickedProduct) {\n              d.product_id = $scope.clickedProduct.id;\n            }\n          }\n        },\n        rowId: 'id',\n        dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n        createdRow: createdRow,\n        rowCallback: rowVariantCallback,\n        headerCallback: headerVariantCallback,\n        initComplete: initVariantsComplete,\n        pagingType: 'full_numbers',\n        pageLength: 25,\n        scrollX: false,\n        fixedHeader: false,\n        responsive: false,\n        serverSide: true,\n        processing: true,\n        searchDelay: 750\n      };\n\n      $scope.dtVariantsInstance.DataTable.draw();\n      try {\n        $scope.$apply();\n      } catch (e) {\n      }\n    }\n\n    function selectAll() {\n      var table = $scope.dtInstance.DataTable;\n      if ($scope.lastPage === table.page.info().page) {\n        if ($scope.lastPageAllSelected) {\n          table.rows().data().toArray().forEach(function(productInTable) {\n            deselectProduct(productInTable);\n          });\n        } else {\n          selectAllProductsFromTable();\n        }\n        $scope.lastPageAllSelected = !$scope.lastPageAllSelected;\n      } else {\n        selectAllProductsFromTable();\n        $scope.lastPageAllSelected = true;\n      }\n      $scope.lastPage = table.page.info().page;\n    }\n\n    function selectAllProductsFromTable() {\n      $scope.dtInstance.DataTable.rows().data().map(function(product) {\n        if (!$scope.selectedProductDict[product.id]) {\n          $scope.selectedProductDict[product.id] = true;\n          $scope.result.products.push(product);\n        }\n      });\n    }\n\n    function deselectProduct(product) {\n      if ($scope.selectedProductDict[product.id]) {\n        var index = $scope.result.products.findIndex(function(p) {\n          return product.id === p.id;\n        });\n        if (index !== -1) {\n          $scope.result.products.splice(index, 1);\n        }\n        delete $scope.selectedProductDict[product.id];\n      }\n    }\n\n    function selectAllVariant() {\n      if ($scope.result.productVariants.filter(function(pv) {\n        return pv.product_id === $scope.clickedProduct.id;\n      }).length) {\n        for (var i = 0; i < $scope.result.productVariants.length; ++i) {\n          if ($scope.result.productVariants[i].product_id === $scope.clickedProduct.id) {\n            $scope.result.productVariants.splice(i, 1);\n            --i;\n          }\n        }\n\n        var productIndex = $scope.result.products.findIndex(function(p) {\n          return p.id === $scope.clickedProduct.id;\n        });\n\n        $scope.result.products.splice(productIndex, 1);\n      } else {\n        if ($scope.result.products.findIndex(function(p) {\n          return p.id === $scope.clickedProduct.id;\n        }) === -1) {\n          $scope.result.products.push($scope.clickedProduct);\n        }\n\n        $scope.dtVariantsInstance.DataTable.rows().data().map(function(product) {\n          $scope.result.productVariants.push(product);\n        });\n      }\n      updateAmounts($scope.clickedProduct.id);\n    }\n\n    function exists(item, variantsTable) {\n      if (variantsTable) {\n        return $scope.result.productVariants.findIndex(function(productVariant) {\n          return productVariant.id === item;\n        }) !== -1;\n      } else {\n        return $scope.selectedProductDict[item];\n      }\n    }\n\n    function getProductsCheckboxIcon(item) {\n      if ($scope.result.products.length) {\n        var index = $scope.result.products.findIndex(function(product) {\n          if (product) {\n            return product.id === item;\n          }\n        });\n        return index === -1 ? 'icon-checkbox-multiple-blank-outline' : 'icon-checkbox-multiple-marked';\n      }\n      return 'icon-checkbox-multiple-blank-outline';\n    }\n\n    function getProductsCheckboxClass(item) {\n      if ($scope.result.products.length) {\n        var index = $scope.result.products.findIndex(function(product) {\n          if (product) {\n            return product.id === item;\n          }\n        });\n        return index === -1 ? '' : 'md-accent';\n      }\n      return '';\n    }\n\n    /**\n     * Checks or unchecks the productVariant or/and the product according to variantsTable parameter\n     * Returns true if the item has been added, or false if the item has been removed\n     * @param itemId\n     * @param variantsTable\n     */\n    function toggle(itemId, variantsTable) {\n\n      if (variantsTable) {\n\n        var productVariant = $scope.productVariantsById[itemId];\n\n        if ($scope.multipleProducts) {\n          var index = $scope.result.productVariants.findIndex(function(pv) {\n            return pv.id === itemId;\n          });\n\n          if (index > -1) {\n            $scope.result.productVariants.splice(index, 1);\n\n            // Check if this was the last variant of the product. It it was, uncheck the product\n            var indexProductVariant = $scope.result.productVariants.findIndex(function(pv) {\n              return pv.product_id === productVariant.product_id;\n            });\n\n            if (indexProductVariant === -1) {\n              var indexProduct = $scope.result.products.findIndex(function(p) {\n                return p.id === productVariant.product_id;\n              });\n              if (indexProduct !== -1) {\n                // Update the amounts\n                delete $scope.selectedAmountsDict[$scope.result.products[indexProduct].id];\n                // Splice from result\n                $scope.result.products.splice(indexProduct, 1);\n              }\n            }\n\n            updateAmounts(productVariant.product_id);\n            return false;\n          } else {\n            $scope.result.productVariants.push(productVariant);\n            // Push also the product if it is not already in\n            var indexProduct = $scope.result.products.findIndex(function(p) {\n              return p.id === productVariant.product_id;\n            });\n            if (indexProduct === -1) {\n              //var product = Object.values($scope.dtInstance.DataTable.data()).slice(0, 25).find(function (pv) {\n              //  return pv.id === productVariant.product_id;\n              //});\n              var product = $scope.productsById[productVariant.product_id];\n\n              $scope.result.products.push(product);\n            }\n            updateAmounts(productVariant.product_id);\n            return true;\n          }\n        } else {\n          // Just add the variant and return the result\n          $scope.result.productVariant = productVariant;\n          $mdDialog.hide($scope.result);\n\n          updateAmounts(productVariant.product_id);\n          return true;\n        }\n      } else {\n\n        var product = $scope.productsById[itemId];\n\n        if ($scope.multipleProducts) {\n          if ($scope.selectedProductDict[itemId]) {\n            delete $scope.selectedProductDict[itemId];\n            $scope.result.products.splice(index, 1);\n\n            if ($scope.getVariants) {\n              // When toggle unchecks the product, remove its variants\n              for (var i = 0; i < $scope.result.productVariants.length; ++i) {\n                if ($scope.result.productVariants[i].product_id === itemId) {\n                  $scope.result.productVariants.splice(i, 1);\n                  --i;\n                }\n              }\n            }\n\n            delete $scope.selectedAmountsDict[itemId];\n\n            updateAmounts(product.product_id);\n            return false;\n          } else {\n            $scope.selectedProductDict[itemId] = true;\n            $scope.result.products.push(product);\n            updateAmounts(product.product_id);\n            return true;\n          }\n        } else {\n          $scope.result.product = product;\n          $mdDialog.hide($scope.result);\n\n          updateAmounts(product.product_id);\n          return true;\n        }\n      }\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function toggleAndSelectAllVariants(productId) {\n      if (!$scope.fetchingVariants[productId]) {\n\n        var productAdded = toggle(productId, false);\n\n        if (productAdded) {\n          $scope.fetchingVariants[productId] = true;\n\n          api.inventories.productVariants.list({\n            product_id: productId\n          }, function(results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n\n              var tempDict = {};\n\n              $scope.result.productVariants.forEach(function(pv) {\n                tempDict[pv.id] = pv.id;\n              });\n\n              results.results.forEach(function(productVariant) {\n                if (!tempDict[productVariant.id]) {\n                  $scope.result.productVariants.push(productVariant);\n                  tempDict[productVariant.id] = productVariant.id;\n                }\n              });\n\n              // Mark all as selected\n              $scope.selectedAmountsDict[productId] = [results.results.length, results.results.length];\n            }\n            $scope.fetchingVariants[productId] = false;\n          });\n        }\n      }\n    }\n\n    function unselectProduct() {\n\n    }\n\n    /**\n     * Returns true only when $scope.selected contains at least all the datatable data\n     * @returns {boolean|boolean|*}\n     */\n    function isChecked() {\n      if ($scope.dtInstance) {\n        var data = $scope.dtInstance.DataTable.rows().data();\n\n        for (var i = 0; i < data.length; ++i) {\n          if ($scope.result.products.indexOf(data[i].id) === -1) {\n            return false;\n          }\n        }\n        return true;\n      }\n    }\n\n    function isVariantChecked() {\n\n      var data = $scope.dtVariantsInstance.DataTable.rows().data();\n\n      for (var i = 0; i < data.length; ++i) {\n        if ($scope.result.productVariants.filter(function(pv) {\n          return pv.product_id === $scope.clickedProduct.id;\n        }).indexOf(data[i].id) === -1) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    function isIndeterminate() {\n      return !!$scope.result.products.length && !isChecked();\n    }\n\n    function isVariantIndeterminate() {\n      return !!$scope.result.productVariants.filter(function(pv) {\n        return pv.product_id === $scope.clickedProduct.id;\n      }).length && !isVariantChecked();\n    }\n\n    function setVisibleTable(table) {\n      $scope.tabIndex = table;\n\n      if (table === 1) {\n        $scope.clickedProduct = null;\n      }\n    }\n\n    /**\n     * Recount the variants of the productId. If length is informed, is updated\n     * @param productId\n     * @param length\n     */\n    function updateAmounts(productId, length) {\n      if (!$scope.selectedAmountsDict[productId]) {\n        $scope.selectedAmountsDict[productId] = [0, 0];\n      }\n\n      $scope.selectedAmountsDict[productId][0] = $scope.result.productVariants.filter(function(pv) {\n        return pv.product_id === productId;\n      }).length;\n\n      if (length) {\n        $scope.selectedAmountsDict[productId][1] = length;\n      }\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose(filter) {\n      // Clear the filter\n      filter = '';\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function reloadProducts(id, enabled) {\n      if (id == 'source') {\n        $scope.sourceUnderMinimum = enabled;\n      } else if (id == 'target') {\n        $scope.targetUnderMinimum = enabled;\n      }\n\n      $scope.dtInstance.DataTable.draw();\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ExchangeProductVariantsDialogController', ExchangeProductVariantsDialogController);\n\n  /** @ngInject */\n  function ExchangeProductVariantsDialogController($scope, $mdDialog, $document, variants, product, $q, Session, SEARCH_MAX_LENGTH, $filter) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.Session = Session;\n    vm.productVariants = angular.copy(variants);\n    vm.product = angular.copy(product);\n    vm.selectFilter = '';\n    vm.selectedId = null;\n    vm.selectedVariant = null;\n    vm.errorMessageKey = null;\n    vm.showWaringMessage = false;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.getProductVariantDetails = getProductVariantDetails;\n\n    initialize();\n\n    function initialize() {\n\n    }\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      vm.errorMessageKey = null;\n      if (!vm.selectedId) {\n        return;\n      }\n      vm.selectedVariant = vm.productVariants.find(function(variant) {\n        return variant.id == vm.selectedId;\n      });\n\n      if (!vm.showWaringMessage) {\n        vm.showWaringMessage = true;\n        return;\n      }\n      vm.showWaringMessage = false;\n\n\n      $mdDialog.hide(vm.selectedVariant);\n    }\n\n    /**\n     * On configuration selector open\n     */\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    /**\n     * On configuration selector close\n     */\n    function onSelectorClose() {\n      // Clear the filter\n      vm.selectFilter = '';\n\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function getProductVariantDetails(productVariant) {\n      var result = [];\n      if (productVariant.barcode) {\n        result.push($filter('translate')('PRODUCT.BARCODE').toLowerCase() + ' ' + productVariant.barcode);\n      }\n      if (productVariant.sku) {\n        result.push($filter('translate')('PRODUCT.SKU') + ' ' + productVariant.sku);\n      }\n      result.push('id: ' + productVariant.id);\n      return result.join(', ');\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('EcommerceCategoryTreeDialogController', EcommerceCategoryTreeDialogController);\n\n  /** @ngInject */\n  function EcommerceCategoryTreeDialogController($scope, $mdDialog, $mdToast, $filter, site, selectedCategories, api, HTTP_STATUS) {\n    var vm = this;\n\n    // Data\n    vm.site = site;\n    vm.loading = true;\n    vm.categories = [];\n    vm.filteredCategories = [];\n\n    // Methods\n    vm.close = close;\n    vm.exists = exists;\n    vm.toggle = toggle;\n\n    initialize();\n\n    // Functions\n    function initialize() {\n      api.ecommerce.categories.list({\n        site_id: site.id\n      }, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.categories = response.results;\n          indexFilterPath();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.loading = false;\n      });\n    }\n\n    function close() {\n      $mdDialog.hide();\n    }\n\n    function exists(category) {\n      return selectedCategories.map(function (c) {\n        return c.id;\n      }).indexOf(category.id) !== -1;\n    }\n\n    function toggle(category) {\n      var index = selectedCategories.map(function (c) {\n        return c.id;\n      }).indexOf(category.id);\n\n      if (index !== -1) {\n        selectedCategories.splice(index, 1);\n      } else {\n        selectedCategories.push(category);\n      }\n    }\n\n    function indexFilterPath() {\n      vm.categories.forEach(function (category) {\n        recursiveIndexFilterPath(category);\n      });\n    }\n\n    function recursiveIndexFilterPath(category) {\n      if (!category.children || category.children.length === 0) {\n        category.filterPath = category.name;\n        return;\n      }\n\n      var childrenFilterPath = [];\n      category.children.forEach(function (child) {\n        recursiveIndexFilterPath(child);\n        childrenFilterPath.push(child.filterPath);\n        category.filterPath = [category.name].concat(childrenFilterPath).join('|');\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ChangeCoverDialogController', ChangeCoverDialogController);\n\n  /** @ngInject */\n  function ChangeCoverDialogController($scope, $mdDialog, params, api, $mdToast, $filter) {\n    var vm = this;\n    // Data\n    vm.images = params.images;\n    vm.selectedImage = null;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.changeSelectedImage = changeSelectedImage;\n\n\n    init();\n    //Functions\n\n    function init() {\n      if (vm.images){\n        vm.selectedImage = vm.images.filter(function(image){\n          return image.is_cover;\n        })[0];\n      }\n    }\n\n    function changeSelectedImage(image) {\n      for (var img in vm.images){\n        vm.images[img].is_cover = false;\n      }\n      image.is_cover = true;\n      vm.selectedImage = image;\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      api.inventories.productImages.update({\n        id: vm.selectedImage.id,\n        option: 'make-cover'\n      }, function (response) {\n        $mdToast.show($mdToast.simple()\n          .textContent($filter('translate')('PRODUCT.IMAGE_SAVED'))\n          .position('top right'));\n        $mdDialog.hide(vm.selectedImage.url);\n      });\n\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('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('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('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('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.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('FinishPickingAndPackPickingOrderDialogController', FinishPickingAndPackPickingOrderDialogController);\n\n  /** @ngInject */\n  function FinishPickingAndPackPickingOrderDialogController($scope, $mdDialog, Session) {\n    var vm = this;\n\n    vm.processPacking = true;\n    vm.sendPackingOrder = getIsSendPackingOrderFromStorage();\n\n    // METHODS\n    vm.finish = finish;\n    vm.cancel = cancel;\n    vm.getIsSendPackingOrderFromStorage = getIsSendPackingOrderFromStorage;\n    vm.setIsSendPackingOrderToStorage = setIsSendPackingOrderToStorage;\n\n\n    function finish() {\n      setIsSendPackingOrderToStorage(vm.sendPackingOrder);\n      $mdDialog.hide({\n        processPacking: vm.processPacking,\n        sendPackingOrder: vm.sendPackingOrder\n      });\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function getIsSendPackingOrderFromStorage() {\n      return localStorage.getItem(Session.company.id + '::isSendPackingOrder') === 'true';\n    }\n\n    function setIsSendPackingOrderToStorage(sendPackingOrder) {\n      localStorage.setItem(Session.company.id + '::isSendPackingOrder', sendPackingOrder);\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('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('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('ShippingDialogController', ShippingDialogController);\n\n  /** @ngInject */\n  function ShippingDialogController($scope, $mdDialog, $filter, autocodes, hasParcels) {\n    var vm = this;\n\n    // DATA\n    vm.autocodes = autocodes;\n    vm.hasParcels = hasParcels;\n    // join list of strings into a single string separate with , except las value\n    vm.autocodesString = vm.autocodes.map(function (item) {\n      return item;\n    }).join(', ');\n    vm.translationData = {\n      autocodes: vm.autocodesString\n    };\n\n    // METHODS\n    vm.markAsShipped = markAsShipped;\n    vm.cancel = cancel;\n\n\n    function markAsShipped() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('FinishPackingOrderDialogController', FinishPackingOrderDialogController);\n\n  /** @ngInject */\n  function FinishPackingOrderDialogController($scope, $mdDialog, $filter, totalPacked, totalAmount) {\n    var vm = this;\n\n    // DATA\n    vm.totalPacked = totalPacked;\n    vm.totalAmount = totalAmount;\n\n    vm.translationData = {\n      packedAmount: vm.totalPacked,\n      totalAmount: vm.totalAmount\n    };\n\n    vm.mainTitle = getTitle();\n    vm.colorBadgeClass = getColorClass();\n    vm.statusName = getStatusName();\n\n    vm.allPicked = false;\n\n    // METHODS\n    vm.finish = finish;\n    vm.cancel = cancel;\n\n\n    function finish() {\n      $mdDialog.hide(vm.allPicked);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function getTitle() {\n      return $filter('translate')('PICKING.MARK_AS_PACKED');\n    }\n\n    function getColorClass() {\n      return 'md-blue-100-bg';\n    }\n\n    function getStatusName() {\n      return 'PACKING.PACKED';\n    }\n\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('LowStockReplenishmentsController', LowStockReplenishmentsController);\n\n  /** @ngInject */\n  function LowStockReplenishmentsController($scope, $mdDialog, $filter, $state, ConfigurationData) {\n    // Data\n    var vm = this;\n    vm.currentNavItem = \"\";\n    $scope.$parent.vm.currentNavItem = 'replenishments';\n    vm.inventoryConfiguration = ConfigurationData.results[0];\n\n    // Methods\n    vm.openAnalysisInformationDialog = openAnalysisInformationDialog;\n\n    function openAnalysisInformationDialog() {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('LOW_STOCK.ANALYSIS_DIALOG_TITLE'))\n        .htmlContent($filter('translate')('LOW_STOCK.ANALYSIS_DIALOG_BODY', {\n          analysisPeriodDays: vm.inventoryConfiguration.analysis_period_days,\n          orderFrequency: vm.inventoryConfiguration.order_frequency_days,\n          replenishmentWarehouse: vm.inventoryConfiguration.replenishment_warehouse_name\n        }))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('LOW_STOCK.GO_TO_CONFIGURATION'))\n        .cancel($filter('translate')('GENERAL.CLOSE'));\n\n      $mdDialog.show(confirm).then(function () {\n          $state.go('app.inventory.configuration.stocks_optimization');\n        }, function () {\n          // Cancel\n        }\n      );\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('LowStockPurchasesController', LowStockPurchasesController);\n\n  /** @ngInject */\n  function LowStockPurchasesController($scope, $mdDialog, $filter, $state) {\n    // Data\n    var vm = this;\n    vm.currentNavItem = \"\";\n    $scope.$parent.vm.currentNavItem = 'purchases';\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndProductLabelDesignCardController', ndProductLabelDesignCardController)\n    .directive('ndProductLabelDesignCard', ndProductLabelDesignCard);\n\n  /** @ngInject */\n  function ndProductLabelDesignCard() {\n    return {\n      restrict: 'E',\n      scope: {\n        productLabelDesigns: '=',\n        productLabelDesign: '=',\n        pricingTiers: '='\n      },\n      controller: 'ndProductLabelDesignCardController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/labels-generator/directives/nd-product-label-design-card/nd-product-label-design-card.html',\n      link: function(scope, element, attrs) {\n\n      }\n    };\n  }\n\n  /** @ngInject */\n  function ndProductLabelDesignCardController(\n    $scope,\n    $filter,\n    $state,\n    $mdSelect,\n    Session,\n    api,\n    ProductLabelDesign,\n    HTTP_STATUS) {\n\n    var vm = this;\n    var ZOOM_FACTOR = 1.5;\n\n    // Data\n    vm.hasCustomLabelFeature = !Session.hasSubscription || Session.hasFeature('inventory.labels-generator.custom-labels');\n    vm.closed = true;\n    vm.productLabelDesigns = $scope.productLabelDesigns;\n    vm.productLabelDesign = $scope.productLabelDesign;\n    vm.pricingTiers = $scope.pricingTiers;\n    vm.productLabelDesignScopeListener = null;\n    vm.previewProductVariant = {\n      code: 'SA120449',\n      sku: 'SA120449-B-40',\n      product_name: 'Demo product',\n      color: 'Black',\n      colorCode: 'B',\n      size: 'L',\n      sizeCode: '4',\n      price: 59.95,\n      barcode: '1234567890128',\n      origin_code: 'OR12345-6789-0',\n      description: 'Description',\n      description_long: 'Long description',\n      brand_name: 'Brand',\n      category_name: 'Category',\n      subcategory_name: 'Subcategory',\n      provider: 'Demo provider',\n      customText: 'Custom Text'\n    };\n    vm.fieldsClosed = true;\n    vm.layoutClosed = true;\n    vm.saving = false;\n    vm.newProductLabelDesign = new ProductLabelDesign();\n    vm.productLabelDesignBackup = angular.copy(vm.productLabelDesign);\n\n\n    // Methods\n    vm.getLabelPreviewStyle = getLabelPreviewStyle;\n    vm.getLabelRowStyle = getLabelRowStyle;\n    vm.getSheetPreviewMarginStyle = getSheetPreviewMarginStyle;\n    vm.getTableRows = getTableRows;\n    vm.getTableCols = getTableCols;\n    vm.isSkiped = isSkiped;\n    vm.getFieldFromPreviewProductVariant = getFieldFromPreviewProductVariant;\n    vm.getStyleFromPreviewProductVariant = getStyleFromPreviewProductVariant;\n    vm.getPreviewBarcodeStyle = getPreviewBarcodeStyle;\n    vm.moveFieldForward = moveFieldForward;\n    vm.moveFieldBackward = moveFieldBackward;\n    vm.layoutSelected = layoutSelected;\n    vm.saveDesign = saveDesign;\n    vm.saveAsNewDesign = saveAsNewDesign;\n    vm.onProductLabelDesignChange = onProductLabelDesignChange;\n    vm.setSkipped = setSkipped;\n    vm.upgradePlan = upgradePlan;\n    vm.getPartNumber = getPartNumber;\n    vm.getButterflyCellStyle = getButterflyCellStyle;\n    vm.getButterflyRowStyle = getButterflyRowStyle;\n\n    // Functions\n    function getLabelPreviewStyle() {\n      var labelWidth = vm.productLabelDesign.getLabelWidth();\n      var labelHeight = vm.productLabelDesign.getLabelHeight();\n      var result = 'width:' + labelWidth + 'mm; min-width:' + labelWidth + 'mm; max-width:' + labelWidth + 'mm; ';\n      result += 'height:' + labelHeight + 'mm; min-height:' + labelHeight + 'mm; max-height:' + labelHeight + 'mm; ';\n      result += 'padding: '\n        + vm.productLabelDesign.label_top_margin + 'mm '\n        + vm.productLabelDesign.label_right_margin + 'mm '\n        + vm.productLabelDesign.label_bottom_margin + 'mm '\n        + vm.productLabelDesign.label_left_margin + 'mm;';\n      return result;\n    }\n\n    function getSheetPreviewMarginStyle() {\n      return 'padding: '\n        + (vm.productLabelDesign.page_top_margin | 0) + 'px '\n        + (vm.productLabelDesign.page_right_margin | 0) + 'px '\n        + (vm.productLabelDesign.page_bottom_margin | 0) + 'px '\n        + (vm.productLabelDesign.page_left_margin | 0) + 'px !important';\n    }\n\n    function getLabelRowStyle() {\n      var width = vm.productLabelDesign.getLabelWidth(true) + 'px !important;';\n      var height = vm.productLabelDesign.getLabelHeight(true) + 'px !important;';\n      var result = '';\n      result += 'width: ' + width;\n      result += 'min-width: ' + width;\n      result += 'max-width: ' + width;\n      result += 'height: ' + height;\n      result += 'min-height: ' + height;\n      result += 'max-height: ' + height;\n      return result;\n    }\n\n\n    function getTableRows() {\n      var rows = [];\n      for (var i = 0; i < vm.productLabelDesign.rows; ++i) {\n        rows.push(i);\n      }\n      return rows;\n    }\n\n    function getTableCols() {\n      var cols = [];\n      for (var i = 0; i < vm.productLabelDesign.columns; ++i) {\n        cols.push(i);\n      }\n      return cols;\n    }\n\n    function isSkiped(row, column) {\n      return row * vm.productLabelDesign.columns + column + 1 < vm.productLabelDesign.start_at;\n    }\n\n    function getFieldFromPreviewProductVariant(field) {\n      switch (field.field_name) {\n        case 'code':\n          return vm.previewProductVariant.code;\n        case 'name':\n          return vm.previewProductVariant.product_name;\n        case 'sku':\n          return vm.previewProductVariant.sku;\n        case 'barcode_number':\n          return vm.previewProductVariant.barcode;\n        case 'color':\n          return vm.previewProductVariant.color;\n        case 'brand':\n          return vm.previewProductVariant.brand_name;\n        case 'category':\n          return vm.previewProductVariant.category_name;\n        case 'subcategory':\n          return vm.previewProductVariant.subcategory_name;\n        case 'color__code':\n          return field.custom_label + ' ' + vm.previewProductVariant.colorCode;\n        case 'color__name_code':\n          return field.custom_label + ' ' + vm.previewProductVariant.colorCode + ' - ' + vm.previewProductVariant.color;\n        case 'size':\n          return field.custom_label + ' ' + vm.previewProductVariant.size;\n        case 'size__code':\n          return field.custom_label + ' ' + vm.previewProductVariant.sizeCode;\n        case 'size__name_code':\n          return field.custom_label + ' ' + vm.previewProductVariant.sizeCode + ' - ' + vm.previewProductVariant.size;\n        case 'price':\n          var pricingTier = vm.pricingTiers.find(function(item) {\n            return item.id == vm.productLabelDesign.pricing_tier;\n          });\n\n          var currency = pricingTier && pricingTier.currency ? pricingTier.currency : Session.company.currency;\n          return field.custom_label + ' ' + $filter('price')(vm.previewProductVariant.price) + $filter('currencyCharacter')(currency);\n        case 'origin_code':\n          return vm.previewProductVariant.origin_code;\n        case 'description':\n          return vm.previewProductVariant.description;\n        case 'description_long':\n          return vm.previewProductVariant.description_long;\n        case 'variant_1_code_variant_2_name':\n          return vm.previewProductVariant.colorCode + ' ' + vm.previewProductVariant.size;\n        case 'variant_1_name_variant_2_code':\n          return vm.previewProductVariant.color + ' ' + vm.previewProductVariant.sizeCode;\n        case 'provider':\n          return vm.previewProductVariant.provider;\n        case 'custom_text':\n          return vm.previewProductVariant.customText;\n\n\n      }\n      return '';\n    }\n\n    function getStyleFromPreviewProductVariant(field) {\n      var result = '';\n\n      if (field.field_name !== 'barcode' && field.field_name !== 'spacer') {\n        result += 'font-size: ' + field.font_size + 'pt; ';\n        result += 'text-align: ' + field.text_align + '; ';\n\n        if (field.bold) {\n          result += 'font-weight: bold; ';\n        }\n        if (field.italic) {\n          result += 'font-style: italic; ';\n        }\n        if (field.underline) {\n          result += 'text-decoration: underline; ';\n        }\n      } else if (field.field_name === 'spacer') {\n        result += 'height: ' + field.spacer_height + 'mm; min-height: ' + field.spacer_height + 'mm; max-height: ' + field.spacer_height + 'mm; ';\n      }\n\n      return result;\n    }\n\n    function getPreviewBarcodeStyle() {\n      var barcode = vm.productLabelDesign.getFieldByFieldName('barcode');\n\n      var labelWidth = vm.productLabelDesign.getLabelWidth();\n      var labelHeight = vm.productLabelDesign.getLabelHeight();\n      var result = '';\n\n      if (barcode.barcode_align === 'left' || barcode.barcode_align === 'right') {\n\n        var imgHeight = labelHeight;\n        if (!barcode.barcode_height) {\n          var imgWidth = (labelWidth - vm.productLabelDesign.label_right_margin - vm.productLabelDesign.label_left_margin) * 0.2;\n          var imgHeight = labelHeight - vm.productLabelDesign.label_top_margin - vm.productLabelDesign.label_bottom_margin;\n        } else {\n          imgHeight = barcode.barcode_height;\n        }\n\n        if (barcode.barcode_vertical) {\n          var swap = angular.copy(imgHeight);\n          imgHeight = angular.copy(imgWidth);\n          imgWidth = angular.copy(swap);\n        }\n\n        result = 'width:' + imgWidth + 'mm; min-width:' + imgWidth + 'mm; max-width:' + imgWidth + 'mm; ';\n        result += 'height:' + imgHeight + 'mm; min-height:' + imgHeight + 'mm; max-height:' + imgHeight + 'mm; ';\n        result += 'position: relative; right: ' + (barcode.barcode_vertical ? imgHeight : 0) + 'mm; ';\n        result += 'transform: rotate(' + (barcode.barcode_vertical ? (barcode.barcode_align === 'left' ? 90 : 270) : 0) + 'deg); ';\n        result += 'transform-origin: center center; ';\n      } else if (barcode.barcode_align === 'top' || barcode.barcode_align === 'bottom') {\n\n        if (barcode.barcode_height) {\n          imgHeight = barcode.barcode_height;\n        }\n\n        if (barcode.barcode_vertical) {\n          var swap = angular.copy(imgHeight);\n          imgHeight = angular.copy(imgWidth);\n          imgWidth = angular.copy(swap);\n        }\n\n        result = 'width: 100%; min-width: 100%; max-width: 100%; ';\n        result += 'height:' + imgHeight + 'mm; min-height:' + imgHeight + 'mm; max-height:' + imgHeight + 'mm; ';\n        result += 'position: relative; right: ' + (barcode.barcode_vertical ? imgHeight : 0) + 'mm; ';\n        result += 'transform: rotate(' + (barcode.barcode_vertical ? (barcode.barcode_align === 'left' ? 90 : 270) : 0) + 'deg); ';\n        result += 'transform-origin: center center; ';\n      }\n      return result;\n    }\n\n    function moveFieldForward(event, index) {\n      vm.productLabelDesign.moveFieldForward(index);\n    }\n\n    function moveFieldBackward(event, index) {\n      vm.productLabelDesign.moveFieldBackward(index);\n    }\n\n    function layoutSelected() {\n      if (vm.productLabelDesign.isCustomLayout()) {\n        vm.productLabelDesign.label_top_margin = 3;\n        vm.productLabelDesign.label_bottom_margin = 3;\n      } else {\n        vm.productLabelDesign.label_top_margin = 1;\n        vm.productLabelDesign.label_bottom_margin = 1;\n      }\n    }\n\n    function onProductLabelDesignChange(previousPricingTier) {\n      if (vm.productLabelDesign === vm.newProductLabelDesign) {\n        vm.productLabelDesign = new ProductLabelDesign({\n          pricing_tier: previousPricingTier\n        });\n        vm.productLabelDesigns.push(vm.productLabelDesign);\n      } else {\n        setDefaultProductLabelDesign();\n      }\n      vm.productLabelDesignBackup = new ProductLabelDesign(vm.productLabelDesign);\n      emitProductLabelDesign();\n    }\n\n    function setDefaultProductLabelDesign() {\n      localStorage.setItem(Session.company.id + '::LabelsGeneratorController::defaultProductLabelDesignId', vm.productLabelDesign.id);\n    }\n\n    function emitProductLabelDesign() {\n      // Have to emit an event becasue the productLabelDesign is not bound to the parent controller, I don't know why\n      $scope.$emit('ndProductLabelDesignCardController::productLabelDesign', vm.productLabelDesign);\n    }\n\n    function saveDesign() {\n      if (vm.saving) {\n        return;\n      }\n      if (vm.productLabelDesign.id) {\n        update();\n      } else {\n        save();\n      }\n    }\n\n    function saveAsNewDesign() {\n      if (vm.saving) {\n        return;\n      }\n\n      var tmpProductLabelDesign = angular.copy(vm.productLabelDesign);\n      delete tmpProductLabelDesign.id;\n      tmpProductLabelDesign.fields.forEach(function(field) {\n        delete field.id;\n      });\n\n      vm.saving = true;\n      api.inventories.productLabelDesigns.save(\n        tmpProductLabelDesign,\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            vm.productLabelDesign = angular.extend(vm.productLabelDesign, new ProductLabelDesign(results));\n            vm.productLabelDesigns.push(vm.productLabelDesignBackup);\n            vm.productLabelDesignBackup = new ProductLabelDesign(vm.productLabelDesign);\n            setDefaultProductLabelDesign();\n            emitProductLabelDesign();\n          }\n          vm.saving = false;\n        }\n      );\n    }\n\n    function save() {\n      vm.saving = true;\n      api.inventories.productLabelDesigns.save(\n        vm.productLabelDesign,\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            vm.productLabelDesign = angular.extend(vm.productLabelDesign, new ProductLabelDesign(results));\n            setDefaultProductLabelDesign();\n            emitProductLabelDesign();\n          }\n          vm.saving = false;\n        }\n      );\n    }\n\n    function update() {\n      vm.saving = true;\n      api.inventories.productLabelDesigns.update(\n        vm.productLabelDesign,\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.productLabelDesign = angular.extend(vm.productLabelDesign, new ProductLabelDesign(results));\n            var index = vm.productLabelDesigns.findIndex(function(productLabelDesign) {\n              return productLabelDesign.id === vm.productLabelDesign.id;\n            });\n            if (index > -1) {\n              vm.productLabelDesigns[index] = vm.productLabelDesign;\n            }\n            emitProductLabelDesign();\n          }\n          vm.saving = false;\n        }\n      );\n    }\n\n    function setSkipped(row, column) {\n      vm.productLabelDesign.setStartAt(row, column);\n    }\n\n    function upgradePlan(event) {\n      if (!vm.hasCustomLabelFeature) {\n        event.stopPropagation();\n        $state.go('app.account.upgrade_plan', {\n          source: 'inventory.labels-generator.custom-labels'\n        });\n      }\n    }\n\n    function getPartNumber(index) {\n      if (vm.productLabelDesign.page_layout === 's_butterfly' || vm.productLabelDesign.page_layout === 'c_butterfly') {\n        return [null, null, 1, 2, 3][index];\n      }\n      if (vm.productLabelDesign.page_layout === 'lc_butterfly') {\n        return [1, 2, 3, 4, 5][index];\n      }\n    }\n\n    function getButterflyCellWidth(index) {\n      var withMM = 0;\n      if (vm.productLabelDesign.page_layout === 's_butterfly' || vm.productLabelDesign.page_layout === 'c_butterfly') {\n        if (index < 2) {\n          withMM = 0;\n        } else {\n          withMM = vm.productLabelDesign.multilabel_width[index - 2];\n        }\n      }\n      else if (vm.productLabelDesign.page_layout === 'lc_butterfly') {\n        withMM = vm.productLabelDesign.multilabel_width[index];\n      }\n      return 'width: calc( withMMmm * ZOOM_FACTOR);'.replace(/withMM/g, withMM).replace(/ZOOM_FACTOR/g, ZOOM_FACTOR);\n    }\n\n    function getButterflyCellStyle(index) {\n      var style = '';\n      style += getButterflyCellWidth(index);\n      // More styles here\n      return style;\n    }\n\n    function getButterflyRowHeight(index) {\n      return 'height: calc( heightMMmm * ZOOM_FACTOR);'.replace(/heightMM/g, vm.productLabelDesign.label_height).replace(/ZOOM_FACTOR/g, ZOOM_FACTOR);\n    }\n\n    function getButterflyRowStyle(){\n      var style = '';\n      style += getButterflyRowHeight();\n      // More styles here\n      return style;\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('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.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.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  '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('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('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('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\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.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('NewPresaleDialogController', NewPresaleDialogController);\n\n  /** @ngInject */\n  function NewPresaleDialogController($mdDialog, $mdToast, $filter, $document, api, collection, seasons, brands, SEARCH_MAX_LENGTH) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.collection = collection;\n    vm.seasons = seasons;\n    vm.brands = brands;\n    vm.selectedTab = 0;\n    vm.newSeason = {};\n    vm.savingSeason = false;\n    vm.newBrand = {};\n    vm.savingBrand = false;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.saveSeason = saveSeason;\n    vm.saveBrand = saveBrand;\n\n\n    // Functions\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n\n      api.wholesale.presales.save(\n        vm.collection,\n        function (response) {\n          \n          vm.collection.id = response.id;\n          $mdDialog.hide({\n            collection: vm.collection,\n            newSeason: vm.newSeason,\n            newBrand: vm.newBrand\n          });\n\n        }\n      );\n\n    }\n\n    function saveSeason(){\n      vm.savingSeason = true;\n      api.inventories.seasons.save(\n        vm.newSeason,\n        function(results){\n          if(results.id){\n            vm.newSeason = results;\n            vm.savingSeason = false;\n            vm.seasons.push(vm.newSeason);\n            vm.collection.season = vm.newSeason.id;\n            vm.selectedTab = 0;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.SEASON_CREATED')).position('top right'));\n          }\n          else{\n            vm.savingSeason = false;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      )\n    }\n\n    function saveBrand(){\n      vm.savingBrand = true;\n      api.inventories.brands.save(\n        vm.newBrand,\n        function(results){\n          if(results.id){\n            vm.newBrand = results;\n            vm.savingBrand = false;\n            vm.brands.push(vm.newBrand);\n            vm.collection.brand = vm.newBrand.id;\n            vm.selectedTab = 0;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.BRAND_CREATED')).position('top right'));\n          }\n          else{\n            vm.savingBrand = false;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      )\n    }\n\n    /**\n     * On configuration selector open\n     */\n    function onSelectorOpen(){\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e)\n      {\n        e.stopPropagation();\n      });\n    }\n\n    /**\n     * On configuration selector close\n     */\n    function onSelectorClose(){\n      // Clear the filter\n      vm.selectFilter = '';\n\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesalePresalePurchasesController', WholesalePresalePurchasesController);\n\n  /** @ngInject */\n  function WholesalePresalePurchasesController($scope, $stateParams, $state, $http, $timeout, $filter, $compile, DTColumnBuilder,\n                                                     $translate, api, Session, PresaleData, PURCHASE_ORDER_STATUSES, PURCHASE_ORDER_STATUS_COLORS,\n                                                     SEARCH_MAX_LENGTH){\n\n    $scope.$parent.vm.currentNavItem = \"purchases\";\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.customers = {};\n    vm.presale = PresaleData;\n    vm.orderStatuses = PURCHASE_ORDER_STATUSES;\n    vm.orderStatusColors = PURCHASE_ORDER_STATUS_COLORS;\n\n    vm.dtOptions = {\n      ajax        : {\n        dataSrc: \"data\",\n        url: api.urls.inventories.purchaseOrders.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function(d){\n          d.pagination = 'datatable';\n          d.presale = vm.presale.id;\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      initComplete: initComplete,\n      pagingType  : 'full_numbers',\n      lengthMenu  : [10, 25, 50, 100],\n      pageLength  : 25,\n      //scrollY     : 'auto',\n      autoWidth : false,\n      responsive: true,\n      serverSide  : true,\n      processing  : true,\n      searchDelay : 750,\n      language: {\n        url: 'app/main/apps/wholesale/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n        DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('PURCHASES.SERIAL_NUMBER')).renderWith(function (data, type, full) {\n          return '<a ui-sref=\"app.inventory.purchases.purchase.products({id:' + full.id + ', idCollection:' +  vm.presale.id + '})\">' + data + '</a>';\n        }),\n        DTColumnBuilder.newColumn('status').withTitle($filter('translate')('PURCHASES.STATUS')).renderWith(function(data, type, full) {\n          return '<span class=\"status-badge ' + vm.orderStatusColors[data] + '\">' + $filter('translate')('PURCHASES.' + PURCHASE_ORDER_STATUSES[data]) + '</span>';\n        }),\n        DTColumnBuilder.newColumn('contact_name').withTitle($filter('translate')('PURCHASE.CONTACT')),\n        /*DTColumnBuilder.newColumn('target_warehouse__name').withTitle($filter('translate')('PURCHASES.TARGET_WAREHOUSE')).renderWith(function(data, type, full) {\n          return vm.warehousesById[full.target_warehouse].name;\n        }),\n        DTColumnBuilder.newColumn('season').withTitle($filter('translate')('PURCHASES.SEASON')).renderWith(function(data, type, full) {\n          return vm.seasonsById[data].name;\n        }),*/\n        DTColumnBuilder.newColumn('created_at').withTitle($filter('translate')('PURCHASES.CREATION_DATE')).renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        /*DTColumnBuilder.newColumn('expected_at').withTitle($filter('translate')('PURCHASES.EXPECTED_DATE')).renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),*/\n        DTColumnBuilder.newColumn('amount').withTitle($filter('translate')('TRANSFERS.ITEMS'))\n      ];\n\n    // Methods\n\n\n    // Initialize\n    initialize();\n\n\n    // Functions\n    function initialize(){\n\n    }\n\n    // Functions\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Go to presale detail\n     *\n     * @param id\n     */\n    function gotoOrderDetail(id){\n      $state.go('app.inventory.purchases.purchase.details', {id: id, idCollection: vm.presale.id});\n    }\n\n    function initComplete()\n    {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#search-input');\n\n      // Bind an external input as a table wide search box\n      if ( searchBox.length > 0 )\n      {\n        searchBox.on('keyup', function (event)\n        {\n          var vm = $scope.vm;\n\n          if(vm.timeout){\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function(){\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesalePresaleProductsController', WholesalePresaleProductsController);\n\n  /** @ngInject */\n  function WholesalePresaleProductsController($scope, $state, $mdDialog, $document, $stateParams, $timeout, $filter,\n                                                 $compile, DTColumnBuilder, $translate, api, Session, PresaleData,\n                                                 CategoriesData, CompositionsData, SEARCH_MAX_LENGTH) {\n\n    $scope.$parent.vm.currentNavItem = \"products\";\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.categories = {};\n    vm.compositions = {};\n    vm.presale = PresaleData;\n    CategoriesData.results.forEach(function (category) {\n      vm.categories[category.id] = category\n    });\n    CompositionsData.results.forEach(function (composition) {\n      vm.compositions[composition.id] = composition\n    });\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.products.replace('/:id/:option', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          d.presale = vm.presale.id;\n          d.serializer = 'ProductNamedSerializer';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      order: [7, 'desc'],\n      createdRow: createdRow,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function (settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableWholesalePresalesPresaleProductController', JSON.stringify(data));\n      },\n      stateLoadCallback: function (settings, callback) {\n        return JSON.parse(localStorage.getItem(Session.company.id + '::dataTableWholesalePresalesPresaleProductController'));\n      }\n    };\n\n    vm.defaultRow = '<span class=\"text-italic hint-text\">' + $filter('translate')('GENERAL.EMPTY') + '</span>';\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('cover').withTitle($filter('translate')('PRODUCT.IMAGE')).withOption('className', 'imageColumn').withOption('width', '50px')\n      .renderWith(function (data, type, full) {\n        if (angular.isUndefined(full.cover_thumbnail)) return null;\n\n        if (full.cover_thumbnail) {\n          return '<img class=\"thumbnail-40\" src=\"' + full.cover_thumbnail + '\">'\n        }\n        return '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg\"></md-icon>';\n\n      }),\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('PRODUCT.CODE'))\n        .renderWith(function (data, type, full) {\n          if (angular.isUndefined(full.code)) return null;\n          return '<a ui-sref=\"app.inventory.products.product.overview({id:' + full.id + '})\">' + full.code + '</a>';\n        }),\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('PRODUCT.NAME'))\n        .renderWith(function (data, type, full) {\n          if (!full.name) return '';\n          const name = (full.name.length > 30) ? full.name.substr(0, 30) + '&hellip;' : full.name;\n          return (full.name.length > 30) ? ('<md-tooltip md-direction=\"right\">' + full.name + '</md-tooltip>' + name) : full.name;\n        }),\n      DTColumnBuilder.newColumn('season').withTitle($filter('translate')('PRODUCT.SEASON')),\n      DTColumnBuilder.newColumn('category').withTitle($filter('translate')('PRODUCTS.CATEGORY')),\n      DTColumnBuilder.newColumn('subcategory').withTitle($filter('translate')('PRODUCTS.SUBCATEGORY')),\n      DTColumnBuilder.newColumn('provider').withTitle($filter('translate')('PRODUCTS.PROVIDER'))\n        .renderWith(function (data, type, full) {\n          if (!data) return '';\n          const name = (data.length > 30) ? data.substr(0, 30) + '&hellip;' : data;\n          return (data.length > 30) ? ('<md-tooltip md-direction=\"right\">' + data + '</md-tooltip>' + name) : data;\n        }),\n      DTColumnBuilder.newColumn('updated_at').withTitle($filter('translate')('PRODUCT.UPDATED_AT'))\n        .renderWith(function (data, type, full) {\n          return $filter('date')(data, 'short');\n        })\n    ];\n\n    vm.defaultRow = '<span class=\"text-italic hint-text\">' + $filter('translate')('GENERAL.EMPTY') + '</span>';\n\n    // Methods\n    vm.newProduct = newProduct;\n    vm.openProductSearchDialog = openProductSearchDialog;\n\n\n    // Initialize\n    initialize();\n\n\n    // Functions\n    function initialize() {\n\n    }\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function newProduct(product) {\n      if (Session.hasPermission('wholesale.presales.presale.products.create')) {\n        $state.go(\"app.wholesale.presales.presale.products.new\", {id: vm.presale.id});\n      }\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#search-input');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function openProductSearchDialog(ev) {\n      if (Session.hasPermission('wholesale.presales.presale.products.add')) {\n        $mdDialog.show({\n          controller: 'ProductSearchController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-search/product-search.html',\n          parent: angular.element($document.find('body')),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          locals: {\n            params: {\n              multiple: true\n            }\n          }\n        }).then(function (result) {\n\n          api.wholesale.presales.save({\n            product_id: result.product ? result.product.id : null,\n            product_ids: result.products ? result.products.map(function (p) {\n              return p.id;\n            }) : null,\n            id: vm.presale.id,\n            option: 'add-product'\n          }, function (response, callback, status) {\n            if (status === 200) {\n              vm.presale = response;\n              initialize();\n              vm.dtInstance.DataTable.draw();\n            }\n          });\n\n        });\n      }\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.manufacture',\n      [\n        // 3rd Party Dependencies\n        'datatables',\n        'flow',\n        'nvd3',\n        'textAngular',\n        'xeditable',\n        'app.services.session',\n        'wipImageZoom',\n        'dndLists',\n        'mm.iban'\n      ]\n    )\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider\n      .state('app.manufacture', {\n        abstract: true,\n        url: '/manufacture'\n      })\n\n      /**\n       * RAW MATERIALS\n       */\n\n      /*.state('app.inventory.products', {\n        url: '/products',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/products/products.html',\n            controller: 'InventoryProductsController as vm'\n          }\n        },\n        params: {\n          reload: null\n        },\n        resolve: {\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          },\n          TableType: function() {\n            return 'products';\n          }\n        },\n        bodyClass: 'inventory'\n      })*/\n\n      .state('app.manufacture.materials', {\n        url: '/materials',\n        views: {\n          /*'content@app': {\n            templateUrl: 'app/main/apps/manufacture/views/materials/materials.html',\n            controller: 'ManufactureMaterialsController as vm'\n          }*/\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/products/products.html',\n            controller: 'InventoryProductsController as vm'\n          }\n        },\n        params: {\n          reload: null\n        },\n        resolve: {\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          },\n          TableType: function() {\n            return 'm';\n          }\n        },\n        bodyClass: 'inventory'\n      })\n\n      /**\n       * PRODUCTIONS\n       */\n      .state('app.manufacture.productions', {\n        url: '/productions',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/manufacture/views/productions/productions.html',\n            controller: 'ProductionsController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {serializer: 'WarehouseSimpleSerializer'});\n          },\n          SeasonsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list', {});\n          }\n        },\n        bodyClass: 'productions'\n      })\n\n      /**\n       * PRODUCTION BASE NEW\n       */\n\n      .state('app.manufacture.productions.new', {\n        url: '/new',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/manufacture/views/production/production.html',\n            controller: 'ManufactureProductionController as vm'\n          }\n        },\n        resolve: {\n          ProductionData: function (apiResolver, $stateParams) {\n            return null;\n          },\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n        },\n        bodyClass: 'manufacture-production-new'\n      })\n\n      /**\n       * NEW PRODUCTION\n       */\n\n      .state('app.manufacture.productions.new.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.manufacture.productions.new': {\n            templateUrl: 'app/main/apps/manufacture/views/production/tabs/details.html',\n            controller: 'ManufactureProductionDetailsController as vm'\n          }\n        },\n        resolve: {\n          SerialNumberTypesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n          },\n          InventoryConfigurationData: function (apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        },\n        bodyClass: 'manufacture-production-new-details'\n      })\n\n      /**\n       * PRODUCTION  BASE\n       */\n\n      .state('app.manufacture.productions.production', {\n        url: '/:id',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/manufacture/views/production/production.html',\n            controller: 'ManufactureProductionController as vm'\n          }\n        },\n        params: {\n          idCollection: null\n        },\n        resolve: {},\n        bodyClass: 'manufacture-production'\n      })\n\n      /**\n       * PRODUCTION DETAILS\n       */\n\n      .state('app.manufacture.productions.production.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.manufacture.productions.production': {\n            templateUrl: 'app/main/apps/manufacture/views/production/tabs/details.html',\n            controller: 'ManufactureProductionDetailsController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          SeasonsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list', {});\n          },\n          ProductionData: function (apiResolver, $stateParams) {\n            return apiResolver.resolve('manufactures.productionOrders@get', {id: $stateParams.id});\n          },\n          SerialNumberTypesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n          },\n          InventoryConfigurationData: function (apiResolver) {\n            return null;\n          }\n        },\n        bodyClass: 'manufacture-production-details'\n      })\n\n      /**\n       * PRODUCTION PRODUCTS\n       */\n\n      .state('app.manufacture.productions.production.products', {\n        url: '/products',\n        views: {\n          'subcontent@app.manufacture.productions.production': {\n            templateUrl: 'app/main/apps/manufacture/views/production/tabs/products.html',\n            controller: 'ManufactureProductionProductsController as vm'\n          }\n        },\n        resolve: {\n          ProductionOrderData: function (apiResolver, $stateParams) {\n            return apiResolver.resolve('manufactures.productionOrders@get', {id: $stateParams.id});\n          }\n        },\n        bodyClass: 'manufacture-production-products'\n      })\n\n      /**\n       * PRODUCTION MATERIALS\n       */\n\n      .state('app.manufacture.productions.production.materials', {\n        url: '/materials',\n        views: {\n          'subcontent@app.manufacture.productions.production': {\n            templateUrl: 'app/main/apps/manufacture/views/production/tabs/materials.html',\n            controller: 'ManufactureProductionMaterialsController as vm'\n          }\n        },\n        resolve: {\n          ProductionOrderData: function (apiResolver, $stateParams) {\n            return apiResolver.resolve('manufactures.productionOrders@get', {id: $stateParams.id});\n          }\n        },\n        bodyClass: 'manufacture-production-materials'\n      })\n\n      ;\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/apps/manufacture');\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.manufacture')\n    .controller('WholesalePresalePreordersController', WholesalePresalePreordersController);\n\n  /** @ngInject */\n  function WholesalePresalePreordersController($scope, $stateParams, $state, $http, $timeout, $filter, $compile, DTColumnBuilder,\n                                                     $translate, api, Session, PresaleData, SALE_ORDER_STATUSES, SALE_ORDER_STATUS_COLORS, SEARCH_MAX_LENGTH,\n                                               $interval){\n\n    $scope.$parent.vm.currentNavItem = \"preorders\";\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    var PULLING_FREQUENCE = 5000;\n\n    // Data\n    vm.presale = PresaleData;\n    vm.orderStatuses = SALE_ORDER_STATUSES;\n    vm.orderStatusColors = SALE_ORDER_STATUS_COLORS;\n    vm.selected = [];\n    vm.dtInstance = {};\n    vm.creatingPurchases = false;\n\n    vm.dtOptions = {\n      ajax        : {\n        dataSrc: \"data\",\n        url: api.urls.inventories.saleOrders.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function(d){\n          d.pagination = 'datatable';\n          d.presale = vm.presale.id;\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      headerCallback: headerCallback,\n      initComplete: initComplete,\n      pagingType  : 'full_numbers',\n      lengthMenu  : [10, 25, 50, 100],\n      pageLength  : 25,\n      //scrollY     : 'auto',\n      //scrollX     : true,\n      autoWidth : false,\n      responsive: false,\n      serverSide  : true,\n      processing  : true,\n      searchDelay : 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n        DTColumnBuilder.newColumn('select')\n          .withTitle(\"<md-checkbox class='mb-0' ng-click='vm.selectAll()'></md-checkbox>\")\n          .withOption('className', 'checkbox')\n          .notSortable().withOption(\"searchable\", false).withOption(\"orderable\", false).withOption(\"sortable\", false).notSortable().withOption('width', '20px')\n          .renderWith(function (data, type, full) {\n            return '<md-checkbox class=\"m-0\" ng-checked=\"vm.exists(' + full.id + ')\" ng-click=\"vm.toggle(' + full.id + ')\"></md-checkbox>';\n        }),\n        DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('SALE.SERIAL_NUMBER')).renderWith(function (data, type, full) {\n          return '<a ui-sref=\"app.wholesale.sales.sale.products({id:' + full.id + '})\">' + data + '</a>';\n        }),\n        DTColumnBuilder.newColumn('status').withTitle($filter('translate')('SALE.STATUS')).renderWith(function (data, type, full) {\n          return '<span class=\"status ' + vm.orderStatusColors[data] + '\">' + $filter('translate')('SALES.' + SALE_ORDER_STATUSES[data]) + '</span>';\n        }),\n        DTColumnBuilder.newColumn('customer__name').withTitle($filter('translate')('SALE.CONTACT')).renderWith(function (data, type, full) {\n          return full.customer_name ? full.customer_name : '-';\n        }),\n        DTColumnBuilder.newColumn('showroom__name').withTitle($filter('translate')('SALES.SALES_WAREHOUSE')).renderWith(function (data, type, full) {\n          return full.showroom_name;\n        }).notSortable(),\n        DTColumnBuilder.newColumn('sales_agent__first_name').withTitle($filter('translate')('SALES.SALES_AGENT')).renderWith(function (data, type, full) {\n          return full.sales_agent_name;\n        }),\n        DTColumnBuilder.newColumn('created_at').withTitle($filter('translate')('SALE.CREATION_DATE')).renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        DTColumnBuilder.newColumn('start_date').withTitle($filter('translate')('SALE.START_SHIPPING_DATE')).renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        DTColumnBuilder.newColumn('cancel_date').withTitle($filter('translate')('SALE.CANCEL_DATE')).renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        DTColumnBuilder.newColumn('amount').withTitle($filter('translate')('SALES.ITEMS')).notSortable(),\n        DTColumnBuilder.newColumn('subtotal').withTitle($filter('translate')('SALES.SUBTOTAL'))\n      ];\n\n    // Methods\n    vm.toggle = toggle;\n    vm.exists = exists;\n    vm.selectAll = selectAll;\n    vm.createPurchases = createPurchases;\n    vm.createPendingPurchases = createPendingPurchases;\n    vm.newPreorder = newPreorder;\n    vm.getCreatePurchasesStatus = getCreatePurchasesStatus;\n    vm.pullCreatePurchasesStatus = pullCreatePurchasesStatus;\n\n    // Initialize\n    initialize();\n\n\n    // Functions\n    function initialize(){\n      getCreatePurchasesStatus();\n    }\n\n    // Functions\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function headerCallback(header) {\n      if (!$scope.headerCompiled) {\n        // Use this headerCompiled field to only compile header once\n        $scope.headerCompiled = true;\n        $compile(angular.element(header).contents())($scope);\n      }\n    }\n\n    function initComplete()\n    {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#search-input');\n\n      // Bind an external input as a table wide search box\n      if ( searchBox.length > 0 )\n      {\n        searchBox.on('keyup', function (event)\n        {\n          var vm = $scope.vm;\n\n          if(vm.timeout){\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function(){\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function toggle(item) {\n      var idx = vm.selected.indexOf(item);\n      if (idx > -1) {\n        vm.selected.splice(idx, 1);\n      }\n      else {\n        vm.selected.push(item);\n      }\n    }\n\n    function exists(item) {\n      return vm.selected.indexOf(item) > -1;\n    }\n\n    function selectAll() {\n      if (vm.selected.length) {\n        while (vm.selected.length) {\n          vm.selected.pop();\n        }\n      } else {\n        vm.dtInstance.DataTable.rows().data().map(function (preorder) {\n          vm.selected.push(preorder.id);\n        });\n      }\n    }\n\n    function createPurchases(){\n      if(vm.creatingPurchases){\n        return\n      }\n      vm.creatingPurchases = true;\n\n      api.inventories.purchaseOrders.save({\n        option: 'create-from-presale',\n        presale_order_ids: vm.selected,\n        presale_collection_id: vm.presale.id\n      }, function(response, callback, status){\n        if(status === 200){\n          $state.go('app.wholesale.presales.presale.purchases')\n        }\n        getCreatePurchasesStatus();\n      });\n    }\n\n    function createPendingPurchases(){\n      if(vm.creatingPurchases){\n        return\n      }\n      vm.creatingPurchases = true;\n\n      api.inventories.purchaseOrders.save({\n        option: 'create-from-pending-presale',\n        presale_collection_id: vm.presale.id\n      }, function(response, callback, status){\n        if(status === 200){\n          $state.go('app.wholesale.presales.presale.purchases')\n        }\n        getCreatePurchasesStatus();\n      })\n    }\n\n    function newPreorder(){\n      $state.go('app.wholesale.sales.new.details', {presaleId: vm.presale.id});\n    }\n\n    function getCreatePurchasesStatus(){\n      api.manufactures.collections.get({\n        option: 'check-create-purchases',\n        id: vm.presale.id\n      }, function (result, callback, status) {\n        vm.creatingPurchases = result.creating_purchase_orders;\n        if (vm.creatingPurchases){\n          pullCreatePurchasesStatus();\n        }\n      });\n    }\n\n    function pullCreatePurchasesStatus(){\n      vm.pullingInterval = $interval(function () {\n        api.manufactures.collections.get({\n          option: 'check-create-purchases',\n          id: vm.presale.id\n        }, function (result, callback, status) {\n          if (result.creating_purchase_orders === false){\n            $interval.cancel(vm.pullingInterval);\n            vm.creatingPurchases = false;\n          }\n        });\n      }, PULLING_FREQUENCE);\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.manufacture')\n    .controller('WholesalePresaleDetailsController', WholesalePresaleDetailsController);\n\n  /** @ngInject */\n  function WholesalePresaleDetailsController($scope, $mdDialog, $mdToast, $filter, $document, api,\n                                                  HTTP_STATUS, PresaleData, BrandsData, SeasonsData, PricingTiersData, Session, SEARCH_MAX_LENGTH) {\n\n    $scope.$parent.vm.currentNavItem = \"details\";\n    $scope.Session = Session;\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.presale = angular.copy(PresaleData);\n    vm.brands = BrandsData.results;\n    vm.seasons = SeasonsData.results;\n    vm.selectFilter = '';\n    vm.generateClicked = false;\n    vm.pricingTiers = PricingTiersData.results;\n\n    // Methods\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.newBrandAdded = newBrandAdded;\n    vm.newSeasonAdded = newSeasonAdded;\n    vm.generateCSV = generateCSV;\n    vm.generatePDF = generatePDF;\n\n    // Initialize\n\n\n    // Functions\n    function save() {\n      Session.hasPermission('wholesale.presales.presale.details.update')\n      {\n        api.wholesale.presales.update(\n          vm.presale,\n          function (response, callback, status) {\n            if (status == 200) {\n              PresaleData.code = response.code;\n              PresaleData.brand = response.brand;\n              PresaleData.season = response.season;\n              vm.presale.code = response.code;\n              vm.presale.brand = response.brand;\n              vm.presale.season = response.season;\n              $scope.collectionForm.$setPristine();\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PRESALE.PRESALE_COLLECTION_SAVED')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        )\n      }\n    }\n\n    function cancel() {\n      vm.presale = angular.copy(PresaleData);\n      $scope.collectionForm.$setPristine();\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose() {\n      vm.selectFilter = '';\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function newBrandAdded(newBrand) {\n      vm.presale.brand = newBrand.id;\n    }\n\n    function newSeasonAdded(newSeason) {\n      vm.presale.season = newSeason.id;\n    }\n\n    function generatePDF() {\n      api.wholesale.presales.get(\n        {\n          id:  vm.presale.id,\n          option: 'export-pdf',\n          wholesale_pricing_tier_id: vm.selectedWholesalePricingTier,\n          retail_pricing_tier_id: vm.selectedRetailPricingTier\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('PURCHASE.PURCHASE_CATALOG'))\n                .htmlContent($filter('translate')('PURCHASE.PURCHASE_CATALOG_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.printing = false;\n        });\n\n\n      //.replace(':id', vm.presale.id);\n      //var params = angular.element.param({\n      //  wholesale_pricing_tier_id: vm.selectedWholesalePricingTier,\n      //  retail_pricing_tier_id: vm.selectedRetailPricingTier\n      //})\n      //Session.setTokenCookie();\n      //window.open(url + '?' + params);\n\n    }\n\n    function generateCSV() {\n      if (!vm.selectedWholesalePricingTier || !vm.selectedRetailPricingTier) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PURCHASE.PLEASE_SELECT_PRICING_TIERS')).position('top right'));\n      }\n      if (vm.selectedWholesalePricingTier && vm.selectedRetailPricingTier) {\n        var url = api.urls.wholesale.presalesCSV.replace(':id', vm.presale.id);\n        var params = angular.element.param({\n          wholesale_pricing_tier_id: vm.selectedWholesalePricingTier,\n          retail_pricing_tier_id: vm.selectedRetailPricingTier\n        })\n        Session.setTokenCookie();\n        window.open(url + '?' + params);\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.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('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('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('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(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// 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\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('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.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.pages.validate-sign-up-two', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('signup.pages_validate_sign_up_two', {\n      url: '/validate-sign-up-two/:lang/:token',\n      views: {\n        'content@signup': {\n          templateUrl: 'app/main/pages/sign-up/validate-sign-up-two/validate-sign-up-two.html',\n          controller: 'ValidateSignUpTwoController as vm'\n        }\n      },\n      bodyClass: 'signuptwo'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/sign-up');\n  }\n})();\n\n(function () {\n  \"use strict\";\n\n  angular\n    .module(\"app.pages.validate-sign-up-two\")\n    .controller(\"CompleteSignUpTwoDialogController\", CompleteSignUpTwoDialogController);\n\n  /** @ngInject */\n  function CompleteSignUpTwoDialogController(\n    SignupGetResult,\n    SignupGetStatus,\n    ERROR_CODES,\n    api,\n    HTTP_STATUS,\n    SignupTwo,\n    $mdDialog\n  ) {\n    var vm = this;\n\n    // DATA\n    vm.signupGetResult = SignupGetResult;\n    vm.signupGetStatus = SignupGetStatus;\n    vm.signUpLoaded = false;\n    vm.generationInProgress = false;\n    vm.closeDialog = false;\n\n    // METHODS\n    vm.getFormVersion = getFormVersion;\n    vm.getErrorMessage = getErrorMessage;\n    vm.formDoneCallback = formDoneCallback;\n\n    initialize();\n\n    // FUNCTIONS\n    function initialize() {\n      getSignUp();\n    }\n\n    function getSignUp() {\n      if (vm.signupGetStatus === HTTP_STATUS.HTTP_200_OK) {\n        vm.signUp = new SignupTwo(vm.signupGetResult);\n        vm.signUpLoaded = true;\n      } else if (vm.signupGetStatus === HTTP_STATUS.HTTP_400_BAD_REQUEST) {\n        if (vm.signupGetResult.error === ERROR_CODES.ERROR_01003_TOKEN_IS_NULL) {\n          vm.error = ERROR_CODES.ERROR_01003_TOKEN_IS_NULL;\n        } else if (vm.signupGetResult.error === ERROR_CODES.ERROR_01004_TOKEN_NOT_FOUND) {\n          vm.error = ERROR_CODES.ERROR_01004_TOKEN_NOT_FOUND;\n        } else if (vm.signupGetResult.error === ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED) {\n          vm.error = ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED;\n          vm.errorVerifiedAt = new Date(vm.signupGetResult.verified_at);\n        } else if (vm.signupGetResult.error === ERROR_CODES.ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS) {\n          vm.error = ERROR_CODES.ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS;\n        } else if (vm.signupGetResult.error === ERROR_CODES.ERROR_01010_DATA_GENERATION_IN_PROGRESS) {\n          vm.signUp = new SignupTwo({id: vm.signupGetResult.id});\n          vm.signUpLoaded = true;\n          vm.generationInProgress = true;\n        }\n      } else {\n        vm.error = ERROR_CODES.ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS;\n      }\n    }\n\n    function getErrorMessage() {\n      if (vm.error === ERROR_CODES.ERROR_01003_TOKEN_IS_NULL || vm.error === ERROR_CODES.ERROR_01004_TOKEN_NOT_FOUND) {\n        return 'SIGNUP.URL_NOT_VALID_MSG';\n      }\n      if (vm.error === ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED) {\n        return 'SIGNUP.TOKEN_ALREADY_VALIDATED_MSG';\n      }\n      if (vm.error === ERROR_CODES.ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS) {\n        return 'SIGNUP.ERROR_WHILE_GENERATING_DATA';\n      }\n      /*if (vm.error === ERROR_CODES.ERROR_01010_DATA_GENERATION_IN_PROGRESS) {\n        return 'SIGNUP.THERE_IS_A_VALIDATION_IN_PROGRESS';\n      }*/\n      if (vm.error === ERROR_CODES.ERROR_01011_DATA_ALREADY_GENERATED) {\n        return 'SIGNUP.THIS_SIGNUP_ALREADY_GENERATED';\n      }\n      return '';\n    }\n\n    function getFormVersion() {\n      return vm.signUp.form_version;\n    }\n\n    function formDoneCallback() {\n      $mdDialog.hide({signupFinished: vm.signUp.finished});\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.wholesale')\n    .controller('SalesController', SalesController);\n\n  /** @ngInject */\n  function SalesController($scope, $rootScope, $q, $mdDateRangePicker, $state, $mdSidenav, $timeout, $filter,\n                           api, Session, SALE_ORDER_STATUSES, SALE_ORDER_STATUS_COLORS, SEARCH_MAX_LENGTH, $translate,\n                           WarehousesData, SeasonsData, INVOICE_TYPES, HTTP_STATUS, UiGridService) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.TYPE_CUSTOMER = 'customer';\n    vm.TYPE_SALES_AGENT = 'agent';\n\n    // Data\n    vm.status = null;\n    vm.currentNavItem = getCurrentNavItem();\n    vm.totalsByStatus = {};\n    vm.loading = false;\n\n    // Filters data\n    vm.orderStatuses = [];\n    vm.orderStatusColors = SALE_ORDER_STATUS_COLORS;\n    vm.warehouses = WarehousesData.results;\n    vm.seasons = SeasonsData.results;\n    vm.salesTypes = [];\n    vm.showDateFilter = false;\n    vm.customerSearchText = '';\n    vm.selectedCustomer = null;\n    vm.salesAgentSearchText = '';\n    vm.filterSalesAgent = null;\n    vm.filterSalesAgentInstance = null;\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleSidenavDesktop = toggleSidenavDesktop;\n    vm.filterDates = filterDates;\n    vm.customerQuerySearch = customerQuerySearch;\n    vm.enableBarcodeListener = enableBarcodeListener;\n    vm.disableBarcodeListener = disableBarcodeListener;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.clearFilter = clearFilter;\n    vm.salesAgentQuerySearch = salesAgentQuerySearch;\n    vm.selectSalesAgent = selectSalesAgent;\n    vm.getSelectedSalesAgentName = getSelectedSalesAgentName;\n    vm.handleNavClick = handleNavClick;\n    vm.getCurrentNavItem = getCurrentNavItem;\n    vm.reloadSales = reloadSales;\n    vm.updateMultiselectFilters = updateMultiselectFilters;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.status = {\n        state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n          type: 'all',\n          salesAgents: [],\n          customers: [],\n          brands: [],\n          categories: [],\n          subcategories: [],\n          seasons: [],\n          statuses: [],\n          targetWarehouses: [],\n          sourceWarehouses: [],\n          providers: [],\n          startDate: null,\n          endDate: null\n        }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n      };\n\n      if (vm.currentNavItem !== 'all') {\n        vm.status.filters.statuses = [vm.currentNavItem];\n      }\n\n      vm.orderStatuses = Object.keys(SALE_ORDER_STATUSES).map(function(key) {\n        return { code: key, name: SALE_ORDER_STATUSES[key] };\n      });\n\n      vm.salesTypes = [{\n        value: 'all', name: 'GENERAL.ALL'\n      }, {\n        value: 'sales', name: 'SALES.SALES'\n      }, {\n        value: 'presales', name: 'PRESALES.PRESALES'\n      }];\n\n      getTotals();\n    }\n\n    function filterDates() {\n      vm.status.filters.startDate = null;\n      vm.status.filters.endDate = null;\n      $mdDateRangePicker.show({\n        model: {\n          dateStart: vm.status.filters.startDate, dateEnd: vm.status.filters.endDate\n        }\n      }).then(function(result) {\n        vm.status.filters.startDate = result.dateStart;\n        vm.status.filters.endDate = result.dateEnd;\n        reloadSales();\n      });\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function toggleSidenavDesktop(sidenavId) {\n      vm.sidenavLockedOpen = !vm.sidenavLockedOpen;\n      $timeout(function() {\n        $rootScope.$broadcast('ndGrid::sizeChanged');\n      }, 400);\n    }\n\n    function enableBarcodeListener() {\n      $rootScope.ndBarcodeListenerEnabled = true;\n    }\n\n    function disableBarcodeListener() {\n      $rootScope.ndBarcodeListenerEnabled = false;\n    }\n\n    function getFilterNotifications() {\n      var result = 0;\n      if (vm.currentNavItem == 'all') {\n        result += vm.status.filters.statuses && vm.status.filters.statuses.length > 0 ? 1 : 0;\n      }\n      result += vm.status.filters.sourceWarehouses && vm.status.filters.sourceWarehouses.length > 0 ? 1 : 0;\n      result += vm.status.filters.targetWarehouses && vm.status.filters.targetWarehouses.length > 0 ? 1 : 0;\n      result += vm.status.filters.categories && vm.status.filters.categories.length > 0 ? 1 : 0;\n      result += vm.status.filters.subcategories && vm.status.filters.subcategories.length > 0 ? 1 : 0;\n      result += vm.status.filters.brands && vm.status.filters.brands.length > 0 ? 1 : 0;\n      result += vm.status.filters.seasons && vm.status.filters.seasons.length > 0 ? 1 : 0;\n      result += vm.status.filters.customers && vm.status.filters.customers.length > 0 ? 1 : 0;\n      result += vm.status.filters.salesAgents && vm.status.filters.salesAgents.length > 0 ? 1 : 0;\n      result += vm.status.filters.type && vm.status.filters.type != 'all' ? 1 : 0;\n      result += (vm.status.filters.startDate || vm.status.filters.endDate) ? 1 : 0;\n      return result;\n    }\n\n    function clearFilter() {\n      if (vm.currentNavItem === 'all') {\n        vm.status.filters.statuses = [];\n      }\n      vm.status.filters.type = 'all';\n      vm.status.filters.targetWarehouses = [];\n      vm.status.filters.sourceWarehouses = [];\n      vm.status.filters.categories = [];\n      vm.status.filters.subcategories = [];\n      vm.status.filters.brands = [];\n      vm.status.filters.seasons = [];\n      vm.status.filters.customers = [];\n      vm.status.filters.salesAgents = [];\n      vm.status.filters.startDate = null;\n      vm.status.filters.endDate = null;\n      vm.salesAgentSearchText = '';\n      vm.filterSalesAgent = null;\n      vm.customerSearchText = null;\n      vm.selectedCustomer = null;\n      reloadSales();\n    }\n\n    function customerQuerySearch() {\n      var deferred = $q.defer();\n      vm.customerSearchText = vm.customerSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.inventories.contacts.get({\n        search: vm.customerSearchText\n      }, function(results) {\n        if (results.results) {\n          deferred.resolve(results.results);\n        } else {\n          deferred.resolve([]);\n        }\n      });\n      return deferred.promise;\n    }\n\n    function salesAgentQuerySearch() {\n      var deferred = $q.defer();\n\n      vm.salesAgentSearchText = vm.salesAgentSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.account.users.get({\n        search: vm.salesAgentSearchText\n      }, function(results) {\n        if (results.results) {\n          deferred.resolve(results.results);\n        } else {\n          deferred.resolve([]);\n        }\n      });\n      return deferred.promise;\n    }\n\n    function selectSalesAgent(salesAgent) {\n      if (typeof salesAgent === 'object') {\n        if (salesAgent) {\n          vm.filterSalesAgentInstance = salesAgent;\n          vm.filterSalesAgent = salesAgent.id;\n        } else {\n          vm.filterSalesAgentInstance = null;\n          vm.filterSalesAgent = null;\n        }\n      }\n    }\n\n    function getSelectedSalesAgentName() {\n      if (vm.filterSalesAgentInstance) {\n        return vm.filterSalesAgentInstance.first_name + ' ' + vm.filterSalesAgentInstance.last_name;\n      }\n      return null;\n    }\n\n    function reloadSales() {\n      if (vm.reloadSalesTimeout) {\n        $timeout.cancel(vm.reloadSalesTimeout);\n      }\n      vm.reloadSalesTimeout = $timeout(function() {\n        $rootScope.$broadcast('ndGrid::filtersChanged');\n        getTotals();\n      }, 1000);\n    }\n\n    function handleNavClick(option) {\n      vm.loading = true;\n      vm.currentNavItem = option;\n      if (vm.currentNavItem !== 'all') {\n        // This is because to simplify we aggregated some status\n        if (vm.currentNavItem === '1') {\n          vm.status.filters.statuses = ['1,11'];\n        } else if (vm.currentNavItem === '2') {\n          vm.status.filters.statuses = ['2,3'];\n        } else if (vm.currentNavItem === '4') {\n          vm.status.filters.statuses = ['4,5'];\n        } else if (vm.currentNavItem === '7') {\n          vm.status.filters.statuses = ['7,8'];\n        } else {\n          vm.status.filters.statuses = [vm.currentNavItem];\n        }\n      } else {\n        vm.status.filters.statuses = [];\n      }\n\n      localStorage.setItem(Session.company.id + '::' + $state.current.name + '::SalesController::currentNavItem', option);\n      reloadSales();\n    }\n\n    function getCurrentNavItem() {\n      if (localStorage.getItem(Session.company.id + '::' + $state.current.name + '::SalesController::currentNavItem')) {\n        return localStorage.getItem(Session.company.id + '::' + $state.current.name + '::SalesController::currentNavItem');\n      }\n      return 1;\n    }\n\n    function getTotals() {\n      vm.loading = true;\n      api.inventories.saleOrders.list({\n        option: 'totals'\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.totalsByStatus = {};\n          response.status_counts.forEach(function(counter) {\n            vm.totalsByStatus[counter['status']] = counter['count'];\n          });\n          // This is because to simplify we aggregated some status\n          vm.totalsByStatus['1'] = (parseInt(vm.totalsByStatus['1']) || 0) + (parseInt(vm.totalsByStatus['11']) || 0);\n          vm.totalsByStatus['2'] = (parseInt(vm.totalsByStatus['2']) || 0) + (parseInt(vm.totalsByStatus['3']) || 0);\n          vm.totalsByStatus['4'] = (parseInt(vm.totalsByStatus['4']) || 0) + (parseInt(vm.totalsByStatus['5']) || 0);\n          vm.totalsByStatus['7'] = (parseInt(vm.totalsByStatus['7']) || 0) + (parseInt(vm.totalsByStatus['8']) || 0);\n        }\n        vm.loading = false;\n      });\n    }\n\n    function updateMultiselectFilters(filter) {\n      if (filter === vm.TYPE_CUSTOMER && vm.selectedCustomer) {\n        vm.status.filters.customers.push(angular.copy(vm.selectedCustomer));\n        vm.selectedCustomer = null;\n        vm.customerSearchText = '';\n      } else if (filter === vm.TYPE_SALES_AGENT && vm.selectedSalesAgent) {\n        vm.status.filters.salesAgents.push(angular.copy(vm.selectedSalesAgent));\n        vm.selectedSalesAgent = null;\n        vm.salesAgentSearchText = '';\n      }\n      reloadSales();\n      getTotals();\n    }\n\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesaleSaleController', WholesaleSaleController);\n\n  /** @ngInject */\n  function WholesaleSaleController($scope, SALE_ORDER_STATUS_COLORS, $mdSidenav, $stateParams, $state, $mdMedia,\n                                   $mdDialog, $mdToast, $filter, api, SALE_ORDER_STATUSES, SALE_ORDER_STATUSES_REVERSE,\n                                   Session, HTTP_STATUS) {\n\n    // Data\n    var vm = this;\n    vm.isNewSale = !$state.params.id;\n    vm.isPreorderPage = $state.params.presaleId;\n    vm.sale = null;\n    vm.currentNavItem = '';\n    vm.pendingBarcodes = [];\n    vm.orderStatusColors = SALE_ORDER_STATUS_COLORS;\n    vm.saleOrderStatus = SALE_ORDER_STATUSES_REVERSE;\n\n    // Methods\n    vm.getStatusLabel = getStatusLabel;\n    vm.deleteSale = deleteSale;\n    vm.toggleSidenav = toggleSidenav;\n    vm.cancelSale = cancelSale;\n    vm.finish = finishSaleDialog;\n    vm.getStatusColorClass = getStatusColorClass;\n\n    initialize();\n\n    function initialize() {\n      $scope.changeOrderStatus = $scope.$on('changeOrderStatus::orderType', function(event, data) {\n        changeOrderStatus(data.status);\n      });\n\n      // Unregister Events\n      $scope.$on('$destroy', function() {\n        $scope.changeOrderStatus();\n      });\n    }\n\n    function changeOrderStatus(status) {\n      vm.sale.status = status;\n    }\n\n    function getStatusLabel() {\n      return $filter('translate')('SALES.' + SALE_ORDER_STATUSES[vm.sale.status]);\n    }\n\n    function getStatusColorClass() {\n      return vm.orderStatusColors[vm.sale.status];\n    }\n\n\n    function toggleSidenav(sidenavId) {\n      if (!$mdMedia('gt-md')) {\n        $mdSidenav(sidenavId).toggle();\n      } else {\n        vm.barcodeLogOpened = !vm.barcodeLogOpened;\n      }\n    }\n\n    function deleteSale() {\n      if (Session.hasPermission('wholesale.sales.delete')) {\n        api.inventories.saleOrders.delete(\n          { id: vm.sale.id },\n          function(response) {\n            $state.go('app.wholesale.sales');\n          }\n        );\n      }\n    }\n\n    function cancelSale() {\n      if (Session.hasPermission('wholesale.sales.delete')) {\n        api.inventories.saleOrderStatus.update(\n          { id: vm.sale.id, option: 'cancel' },\n          function(response) {\n            $state.go('app.wholesale.sales');\n          }\n        );\n      }\n    }\n\n    function finishSaleDialog() {\n      if (Session.hasPermission('inventory.purchases.delete')) {\n\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('SALE.FINISH_SALE_DIALOG_TITLE'))\n          .htmlContent($filter('translate')('SALE.FINISH_SALE_DIALOG_BODY'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('SALE.FINISH'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          finishSale();\n        });\n      }\n    }\n\n    function finishSale() {\n\n      if (vm.changingStatus){\n        return;\n      }\n\n      vm.changingStatus = true;\n\n      api.inventories.saleOrderStatus.update({\n        id: vm.sale.id, option: 'finish'\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('SALE.SALE_FINISHED'))\n            .position('top right'));\n\n          changeOrderStatus(vm.saleOrderStatus['SALE_ORDER_STATUS_SHIPPED']);\n        } else {\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n            .position('top right'));\n        }\n        vm.changingStatus = false;\n      });\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesalePresalesController', WholesalePresalesController);\n\n  /** @ngInject */\n  function WholesalePresalesController($scope, $state, $timeout, $filter, $mdSidenav, $compile, $mdDialog, api,\n                                       Session, DTColumnBuilder, BrandsData, SeasonsData, $translate, SEARCH_MAX_LENGTH) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Dataapi\n\n    vm.timeout = null;\n    vm.dtInstance = {};\n    vm.brands = {};\n    vm.seasons = {};\n    vm.filtersNotifications = 0;\n\n    BrandsData.results.forEach(function(brand) {\n      vm.brands[brand.id] = brand;\n    });\n    SeasonsData.results.forEach(function(season) {\n      vm.seasons[season.id] = season;\n    });\n\n    vm.status = {\n      filters: {\n        filterBrands: '',\n        filterSeasons: ''\n      }\n    };\n    vm.storageLabel = 'PresalesWholesale::filters';\n\n\n    vm.brandsList = BrandsData.results;\n    vm.seasonsList = SeasonsData.results;\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.wholesale.presales.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      order: [[0, 'desc']],\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      language: {\n        url: 'app/main/apps/wholesale/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('PRESALES.PRESALE_COLLECTION'))\n        .renderWith(function(data, type, full) {\n          return '<a ui-sref=\"app.wholesale.presales.presale.details({idPresale:' + full.id + '})\">' + full.code + '</a>';\n        }),\n      DTColumnBuilder.newColumn('brand__name').withTitle($filter('translate')('PRODUCT.BRAND'))\n        .renderWith(function(data, type, full) {\n          return full.brand_name;\n        }),\n      DTColumnBuilder.newColumn('season__name').withTitle($filter('translate')('PRODUCT.SEASON'))\n        .renderWith(function(data, type, full) {\n          return full.season_name;\n        }),\n      DTColumnBuilder.newColumn('total_products').withTitle($filter('translate')('PRODUCTS.PRODUCTS')).notSortable(),\n      DTColumnBuilder.newColumn('total_orders').withTitle($filter('translate')('PRESALES.PRESALES')).notSortable()\n    ];\n\n    // Methods\n    vm.initialize = initialize;\n    vm.filterByColumn = filterByColumn;\n    vm.newCollection = newCollection;\n    vm.toggleSidenav = toggleSidenav;\n    vm.clearFilter = clearFilter;\n    vm.updateFilterNotifications = updateFilterNotifications;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      $scope.$watch('vm.status.filters.filterBrands', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.status.filters.filterBrands, 1);\n          saveStatus();\n        }\n        updateFilterNotifications();\n      }, false);\n\n      $scope.$watch('vm.status.filters.filterSeasons', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.status.filters.filterSeasons, 2);\n          saveStatus();\n        }\n        updateFilterNotifications();\n      }, false);\n      loadStatus();\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function updateFilterNotifications() {\n      if (angular.isUndefined(vm.filtersNotifications)) {\n        return;\n      }\n      var result = 0;\n      Object.keys(vm.status.filters).forEach(function(filter) {\n        if (typeof vm.status.filters[filter] === 'string') {\n          result += vm.status.filters[filter] === '' ? 0 : 1;\n        } else if (typeof vm.status.filters[filter] === 'boolean') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'number') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'object') {\n          result += vm.status.filters[filter] && vm.status.filters[filter].length ? 1 : 0;\n        }\n      });\n      vm.filtersNotifications = result;\n    }\n\n    function clearFilter() {\n      vm.status.filters.filterBrands = '';\n      vm.status.filters.filterSeasons = '';\n    }\n\n    function loadStatus() {\n      var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::' + vm.storageLabel));\n      if (loadedStatus) {\n        angular.merge(vm.status, loadedStatus);\n        updateFilterNotifications();\n      }\n    }\n\n    function saveStatus() {\n      localStorage.setItem(Session.company.id + '::' + vm.storageLabel, JSON.stringify(vm.status));\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#collection-search');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Filters by filter param in datatable's column parameter\n     * @param filter\n     * @param column\n     */\n    function filterByColumn(filter, column) {\n      vm.dtInstance.DataTable.column(column).search(filter).draw();\n    }\n\n    function newCollection(ev) {\n      if (Session.hasPermission('wholesale.presales.create')) {\n        $mdDialog.show({\n          controller: 'NewPresaleDialogController as vm',\n          templateUrl: 'app/main/apps/wholesale/views/presales/dialogs/new-presale.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          //fullscreen: $scope.customFullscreen,\n          resolve: {\n            collection: function() {\n              return {};\n            },\n            seasons: function() {\n              return SeasonsData.results;\n            },\n            brands: function() {\n              return BrandsData.results;\n            }\n          }\n        }).then(function(response) {\n          // Save buton clicked\n          // Add the new season to the dict\n          if (response.newSeason && response.newSeason.id)\n            vm.seasons[response.newSeason.id] = response.newSeason;\n\n          // Add the new brand to the dics\n          if (response.newBrand && response.newBrand.id)\n            vm.brands[response.newBrand.id] = response.newBrand;\n\n          $state.go('app.wholesale.presales.presale.details', { idPresale: response.collection.id });\n\n        }, function() {\n          // Cancel button clicked\n        });\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.manufacture')\n    .controller('WholesalePresaleController', WholesalePresaleController);\n\n  /** @ngInject */\n  function WholesalePresaleController($state, $mdDialog, $filter, api, $mdToast, Session, PresaleData) {\n    var vm = this;\n\n\n    // Data\n    vm.presale = angular.copy(PresaleData);\n    vm.currentNavItem = \"\";\n\n    // Methods\n    vm.deleteCollection = deleteCollection;\n\n    // Functions\n    function deleteCollection(ev) {\n      if (Session.hasPermission('wholesale.presales.delete')) {\n\n        $mdDialog.show({\n          controller: function ($scope, $mdDialog, $filter) {\n\n            $scope.text = '';\n            $scope.securityWord = $filter('translate')('PRESALE.DELETE_COLLECTION').toLowerCase();\n\n            $scope.cancel = cancel;\n            $scope.hide = hide;\n            $scope.checkSecurityWord = checkSecurityWord;\n\n            function cancel() {\n              $mdDialog.cancel();\n            }\n\n            function hide() {\n              $mdDialog.hide();\n            }\n            function checkSecurityWord(){\n              return $scope.text.toLowerCase() != $scope.securityWord;\n            }\n\n          },\n          templateUrl: 'app/main/apps/wholesale/views/presale/dialogs/delete-presale.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          fullscreen: false\n        })\n          .then(function (answer) {\n            api.wholesale.presales.delete(\n              vm.presale,\n              function (result) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')(\"PRESALE.COLLECTION_DELETED\")).position('top right'));\n                $state.go('app.wholesale.presales');\n              }\n            );\n          }, function () {\n          });\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.wholesale')\n    .controller('DeliveriesController', DeliveriesController);\n\n  /** @ngInject */\n  function DeliveriesController($scope, $rootScope, $compile, $q, $mdDateRangePicker, $state, $mdSidenav, $timeout, $filter, api, DTColumnBuilder, msUtils,\n                                Session, SALE_ORDER_STATUSES, SALE_ORDER_STATUS_COLORS, ORDER_DELIVERY_STATUSES, SALE_ORDER_DELIVERY_STATUS_COLORS,\n                                SEARCH_MAX_LENGTH, $translate, WarehousesData) {\n\n    var ARRAY_ITEMS_SEPARATOR = ',';\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.dtInstance = {};\n    vm.orderStatuses = SALE_ORDER_STATUSES;\n    vm.orderStatusColors = SALE_ORDER_DELIVERY_STATUS_COLORS;\n    vm.search = null;\n    vm.filterDateRange = {\n      dateStart: null,\n      dateEnd: null\n    };\n\n    vm.filterStatus = [];\n    vm.statusList = getStatusListByDict();\n    vm.filterSourceWarehouse = '';\n    vm.warehouses = WarehousesData.results;\n    vm.warehousesById = {};\n    vm.providerSearchText = '';\n    vm.selectedProvider = null;\n\n    vm.dicFilterColumns = {\n      filterStatus: 1,\n      filterSourceWarehouse: 2\n    };\n\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.saleOrderDeliveries.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n          d.filter_status = vm.filterStatus.join(ARRAY_ITEMS_SEPARATOR);\n          d.filter_source_warehouse = vm.filterSourceWarehouse;\n          if (vm.selectedProvider) {\n            d.customer_id = vm.selectedProvider.id;\n          }\n          prepareDateAndTimeFilterData(d);\n        }\n      },\n      order: [[0, 'desc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      autoWidth: false,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      //scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        if (vm.filterDateRange.dateStart) {\n          data.dateStart = vm.filterDateRange.dateStart.getTime();\n        }\n        if (vm.filterDateRange.dateEnd) {\n          data.dateEnd = vm.filterDateRange.dateEnd.getTime();\n        }\n        if (vm.selectedProvider) {\n          data.selectedProvider = vm.selectedProvider;\n        }\n        localStorage.setItem(Session.company.id + '::dataTableDeliveriesController', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableDeliveriesController'));\n\n        if (state) {\n          if (state.dateStart) {\n            vm.filterDateRange.dateStart = new Date(state.dateStart);\n          }\n          if (state.dateEnd) {\n            vm.filterDateRange.dateEnd = new Date(state.dateEnd);\n          }\n          if (state.selectedProvider) {\n            vm.selectedProvider = state.selectedProvider;\n          }\n          if (state.search && state.search.search) {\n            vm.search = state.search.search;\n          }\n          if (state.columns[vm.dicFilterColumns.filterStatus].search.search.indexOf(',') === -1) {\n            if (state.columns[vm.dicFilterColumns.filterStatus].search.search === '') {\n              vm.filterStatus = [];\n            } else {\n              vm.filterStatus = [state.columns[vm.dicFilterColumns.filterStatus].search.search];\n            }\n          } else {\n            vm.filterStatus = state.columns[vm.dicFilterColumns.filterStatus].search.search.split(',');\n          }\n          vm.filterSourceWarehouse = state.columns[vm.dicFilterColumns.filterSourceWarehouse].search.search;\n        }\n        return state;\n      }\n    };\n    vm.dtColumns = [];\n\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleInArray = msUtils.toggleInArray;\n    vm.exists = msUtils.exists;\n    vm.rowCallback = rowCallback;\n    vm.createdRow = createdRow;\n    vm.filterByColumn = filterByColumn;\n    vm.filterDates = filterDates;\n    vm.getStatusListByDict = getStatusListByDict;\n    vm.providerQuerySearch = providerQuerySearch;\n    vm.enableBarcodeListener = enableBarcodeListener;\n    vm.disableBarcodeListener = disableBarcodeListener;\n    vm.updateProviderFilter = updateProviderFilter;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.clearFilter = clearFilter;\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize() {\n\n      vm.warehouses.map(function(warehouse) {\n        vm.warehousesById[warehouse.id] = warehouse;\n      });\n\n      vm.dtColumns = [\n        DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('SALE.SERIAL_NUMBER')).renderWith(function(data, type, full) {\n          return '<a ui-sref=\"app.wholesale.sales.sale.deliveries.delivery({id:' + full.sale_order + ', orderDeliveryId:' + full.id + '})\">' + data + '</a><br><small>' + full.sale_order_autocode + '</small>';\n        }),\n        DTColumnBuilder.newColumn('status').withTitle($filter('translate')('SALE.STATUS')).renderWith(function(data, type, full) {\n          return '<span class=\"status ' + SALE_ORDER_DELIVERY_STATUS_COLORS[data] + '\">' + $filter('translate')('SALE.' + ORDER_DELIVERY_STATUSES[data]) + '</span>';\n        }),\n        DTColumnBuilder.newColumn('customer_name').withTitle($filter('translate')('SALE.CONTACT')).notSortable(),\n        DTColumnBuilder.newColumn('warehouse_name').withTitle($filter('translate')('SALE.FROM_WAREHOUSE')).notSortable(),\n        DTColumnBuilder.newColumn('shipped_at').withTitle($filter('translate')('SALE.SHIPPED_AT')).renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        DTColumnBuilder.newColumn('received_at').withTitle($filter('translate')('SALE.RECEIVED_AT')).renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }).notSortable(),\n        DTColumnBuilder.newColumn('invoice__autocode').withTitle($filter('translate')('SALE.INVOICE')).renderWith(function(data, type, full) {\n          if (full.invoice) {\n            return '<div class=\"green-500-fg\">' + full.invoice + '</div>';\n          } else {\n            return '<div class=\"invoice-ko\"></div>';\n          }\n        }),\n        DTColumnBuilder.newColumn('invoice__payment_status').withTitle($filter('translate')('INVOICES.PAYMENT'))\n          .renderWith(function(data, type, full) {\n            if (full.invoice_payment_status == 20) {\n              return '<span class=\"green-500-fg\">' + $filter('translate')('INVOICE.PAID') + '</span>';\n            }\n            return '<span class=\"red-500-fg\">' + $filter('translate')('INVOICE.PENDING') + '</span>';\n          }),\n        DTColumnBuilder.newColumn('private_notes').withTitle($filter('translate')('SALE.PRIVATE_NOTES')).renderWith(function(data, type, full) {\n          if (data && data.length > 20) {\n            var shortNotes = data.substring(0, 20) + '...';\n            return '<span>' + shortNotes + '</span>' +\n              '<md-tooltip>' + data + '</md-tooltip>';\n          }\n          return data;\n        }),\n        DTColumnBuilder.newColumn('notes').withTitle($filter('translate')('SALE.NOTES')).renderWith(function(data, type, full) {\n          if (data && data.length > 20) {\n            var shortNotes = data.substring(0, 20) + '...';\n            return '<span>' + shortNotes + '</span>' +\n              '<md-tooltip>' + data + '</md-tooltip>';\n          }\n          return data;\n        })\n      ];\n\n      $scope.$watch('vm.filterStatus', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterStatus, vm.dicFilterColumns.filterStatus);\n        }\n      }, false);\n\n      $scope.$watch('vm.filterSourceWarehouse', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterSourceWarehouse, vm.dicFilterColumns.filterSourceWarehouse);\n        }\n      }, false);\n\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#sale-search');\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function() {\n            var input = vm.search;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * Toggle sidenav\n     * @param sidenavId\n     */\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function prepareDateAndTimeFilterData(d) {\n      if (vm.filterDateRange.dateStart) {\n        d.startDate = angular.copy(vm.filterDateRange.dateStart);\n        d.startDate.setHours(0);\n        d.startDate = d.startDate.toISOString();\n      } else {\n        d.startDate = null;\n      }\n\n      if (vm.filterDateRange.dateEnd) {\n        d.endDate = angular.copy(vm.filterDateRange.dateEnd);\n        d.endDate.setHours(0);\n        d.endDate.setHours(d.endDate.getHours() + 24);\n        d.endDate = d.endDate.toISOString();\n      } else {\n        d.endDate = null;\n      }\n    }\n\n    function filterDates() {\n      $mdDateRangePicker.show({\n        model: vm.filterDateRange\n      }).then(function(result) {\n        vm.filterDateRange = result;\n        vm.dtInstance.DataTable.draw();\n      }).catch(function() {\n        console.log('Cancelled');\n      });\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        $state.go('app.wholesale.sales.sale.delivery', { id: aData.sale_order, orderDeliveryId: aData.id });\n      });\n      return nRow;\n    }\n\n    //http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Applies the filter parameter to the column parameter\n     * @param filter\n     * @param column\n     */\n    function filterByColumn(filter, column) {\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.column(column).search(filter).draw();\n      }\n    }\n\n    /**\n     * Creates a list of status from TRANSFER_ORDER_STATUSES cons\n     * @returns {Array}\n     */\n    function getStatusListByDict() {\n      var result = [];\n      for (var id in ORDER_DELIVERY_STATUSES) {\n        result.push({ code: id, name: ORDER_DELIVERY_STATUSES[id] });\n      }\n      return result;\n    }\n\n    function enableBarcodeListener() {\n      $rootScope.ndBarcodeListenerEnabled = true;\n    }\n\n    function disableBarcodeListener() {\n      $rootScope.ndBarcodeListenerEnabled = false;\n    }\n\n    function getFilterNotifications() {\n      var result = 0;\n      result += vm.filterStatus && vm.filterStatus.length > 0 ? 1 : 0;\n      result += vm.filterSourceWarehouse !== '' ? 1 : 0;\n      result += vm.selectedProvider != null ? 1 : 0;\n      result += (vm.filterDateRange.dateEnd || vm.filterDateRange.dateStart) ? 1 : 0;\n\n      return result;\n    }\n\n    function clearFilter() {\n      vm.filterStatus = [];\n      vm.filterSourceWarehouse = '';\n      vm.selectedProvider = null;\n      vm.providerSearchText = null;\n      vm.filterDateRange.dateStart = null;\n      vm.filterDateRange.dateEnd = null;\n\n      vm.dtInstance.DataTable.draw();\n    }\n\n    function updateProviderFilter(provider) {\n       if (angular.isUndefined(provider)) {\n          vm.selectedProvider = null;\n       }\n      if (typeof provider === 'object') {\n        if (provider && provider.id && (provider.name || provider.first_name)) {\n          vm.selectedProvider = provider;\n        } else {\n          vm.selectedProvider = null;\n        }\n      }\n      vm.dtInstance.DataTable.draw();\n    }\n\n    function providerQuerySearch() {\n      var deferred = $q.defer();\n      vm.providerSearchText = vm.providerSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.inventories.contacts.get(\n        {\n          search: vm.providerSearchText\n        },\n        function(results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.wholesale')\n    .controller('WholesaleB2BEcommercesController', WholesaleB2BEcommercesController);\n\n  /** @ngInject */\n  function WholesaleB2BEcommercesController(\n    $state,\n    $scope,\n    $mdDialog,\n    $filter,\n    $mdToast,\n    $document,\n    $timeout,\n    $mdSidenav,\n    $compile,\n    api,\n    Session,\n    DTColumnBuilder,\n    HTTP_STATUS\n  ) {\n\n    var vm = this;\n\n    $scope.Session = Session;\n    vm.hasSubscription = Session.hasSubscription;\n    vm.hasMultipleB2B = Session.hasMultipleB2B();\n    vm.countB2bEcommerces = null;\n\n    // Data\n    vm.dtInstance = {};\n    vm.search = null;\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.wholesale.b2bEcommerces.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableEcommercesController', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableEcommercesController'));\n        return state;\n      }\n    };\n    vm.dtColumns = [];\n    vm.showOldCreateB2bButton = false;\n\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.rowCallback = rowCallback;\n    vm.createdRow = createdRow;\n    vm.filterByColumn = filterByColumn;\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize() {\n      vm.dtColumns = [\n        DTColumnBuilder.newColumn('slug')\n          .withTitle($filter('translate')('B2B_ECOMMERCE.SLUG'))\n          .renderWith(function(data, type, full) {\n            return data;\n          }),\n        DTColumnBuilder.newColumn('domain')\n          .withTitle($filter('translate')('B2B_ECOMMERCE.PUBLIC_URL'))\n          .renderWith(function(data, type, full) {\n            return data;\n          }),\n        DTColumnBuilder.newColumn('warehouse_name')\n          .withTitle($filter('translate')('B2B_ECOMMERCE.WAREHOUSE'))\n          .renderWith(function(data, type, full) {\n            return data;\n          }),\n        DTColumnBuilder.newColumn('pricing_tier_name')\n          .withTitle($filter('translate')('B2B_ECOMMERCE.PRICING_TIER'))\n          .renderWith(function(data, type, full) {\n            return data;\n          })\n      ];\n    }\n\n    function initComplete() {\n      var api = this.api();\n      var searchBox = angular.element('body').find('#ecommerce-search');\n      vm.showOldCreateB2bButton = !vm.hasSubscription && (vm.hasMultipleB2B || api.data().length === 0);\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function() {\n            var input = vm.search;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        $state.go('app.wholesale.b2b_ecommerces.b2b_ecommerce', { id: aData.id });\n      });\n      return nRow;\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function filterByColumn(filter, column) {\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.column(column).search(filter).draw();\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesaleB2BEcommerceController', WholesaleB2BEcommerceController);\n\n  /** @ngInject */\n  function WholesaleB2BEcommerceController(\n    $state,\n    $scope,\n    $mdDialog,\n    $filter,\n    $mdToast,\n    $document,\n    api,\n    Session,\n    B2BEcommerce,\n    ContractedPlanLimit,\n    B2BEcommercesData,\n    WarehousesData,\n    SeasonsData,\n    PricingTiersData,\n    ContractedPlanLimitData,\n    B2B_ECOMMECE_MENU_TYPES,\n    HTTP_STATUS,\n    SEARCH_MAX_LENGTH\n  ) {\n    var vm = this;\n    $scope.Session = Session;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.b2bEcommerce = B2BEcommercesData ?\n      new B2BEcommerce(angular.copy(B2BEcommercesData)) :\n      new B2BEcommerce();\n    vm.searchWarehouse = '';\n    vm.searchPricingTier = '';\n    vm.warehouses = WarehousesData.results;\n    vm.pricingTiers = PricingTiersData.results;\n    vm.B2B_ECOMMECE_MENU_TYPES = B2B_ECOMMECE_MENU_TYPES;\n    vm.saveingB2bEcommerce = false;\n\n    vm.collections = [];\n    vm.seasons = [];\n    vm.categories = [];\n    vm.contractedPlanLimit = null;\n\n    // Methods\n    vm.saveB2bEcommerce = saveB2bEcommerce;\n    vm.cancelChanges = cancelChanges;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.getLeatTimePreview = getLeatTimePreview;\n    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 {\n          var parsedDiscount = parseFloat(\n            angular.isString(posOrderProductVariant.discount)\n              ? posOrderProductVariant.discount.replace(',', '.')\n              : posOrderProductVariant.discount\n          );\n\n          if (!isNaN(parsedDiscount)) {\n            posOrderProductVariant.discount = Math.max(parsedDiscount, 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          } else {\n            posOrderProductVariant.discount = null;\n            posOrderProductVariant.discount_price_excl_tax = null;\n            posOrderProductVariant.discount_price_incl_tax = null;\n          }\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        } else {\n          posOrderProductVariant.discount = null;\n          posOrderProductVariant.discount_price_incl_tax = null;\n          posOrderProductVariant.discount_price_excl_tax = null;\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  angular\n    .module('app.inventory')\n    .controller('TransfersController', TransfersController);\n\n  /** @ngInject */\n  function TransfersController($scope, $rootScope, $compile, $state, $mdSidenav, $timeout, $filter, api, DTColumnBuilder, msUtils, Session, TRANSFER_ORDER_STATUSES, TRANSFER_ORDER_STATUSES_REVERSE, HTTP_STATUS, TRANSFER_ORDER_STATUS_COLORS, SEARCH_MAX_LENGTH, $translate, WarehousesData, UiGridService) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.status = null;\n    vm.loading = false;\n    vm.currentNavItem = getCurrentNavItem();\n    vm.totalsByStatus = {};\n    vm.orderStatuses = [];\n    vm.orderStatusColors = TRANSFER_ORDER_STATUS_COLORS;\n\n    // Filters data\n    vm.transferTypes = [];\n    vm.warehouses = WarehousesData.results;\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleSidenavDesktop = toggleSidenavDesktop;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.reloadTransfers = reloadTransfers;\n    vm.handleNavClick = handleNavClick;\n    vm.getCurrentNavItem = getCurrentNavItem;\n    vm.clearFilter = clearFilter;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.status = {\n        state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n          type: null,\n          statuses: [],\n          targetWarehouses: [],\n          sourceWarehouses: []\n        }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n      };\n\n      if (vm.currentNavItem !== 'all') {\n        vm.status.filters.statuses = [vm.currentNavItem];\n      }\n\n      vm.orderStatuses = Object.keys(TRANSFER_ORDER_STATUSES).map(function(key) {\n        return { code: key, name: TRANSFER_ORDER_STATUSES[key] };\n      });\n\n      vm.transfersTypes = [{\n        value: null, name: 'TRANSFERS.ALL_TRANSFER_TYPES'\n      }, {\n        value: 'transfer', name: 'TRANSFERS.ONLY_TRANSFERS'\n      }, {\n        value: 'replenishment', name: 'TRANSFERS.ONLY_REPLENISHMENTS'\n      }];\n\n      getTotals();\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function toggleSidenavDesktop(sidenavId) {\n      vm.sidenavLockedOpen = !vm.sidenavLockedOpen;\n      $timeout(function() {\n        $rootScope.$broadcast('ndGrid::sizeChanged');\n      }, 400);\n    }\n\n    function reloadTransfers() {\n      if (vm.reloadTransfersTimeout) {\n          $timeout.cancel(vm.reloadTransfersTimeout);\n      }\n      vm.reloadTransfersTimeout = $timeout(function(){\n          $rootScope.$broadcast('ndGrid::filtersChanged');\n          getTotals();\n      }, 1000);\n    }\n\n    function handleNavClick(option) {\n      vm.loading = true;\n      vm.currentNavItem = option;\n      if (vm.currentNavItem !== 'all') {\n        vm.status.filters.statuses = [vm.currentNavItem];\n      } else {\n        vm.status.filters.statuses = [];\n      }\n      localStorage.setItem(Session.company.id + '::' + $state.current.name + '::TransfersController::currentNavItem', option);\n      reloadTransfers();\n    }\n\n    function getCurrentNavItem() {\n      if (localStorage.getItem(Session.company.id + '::' + $state.current.name + '::TransfersController::currentNavItem')) {\n        return localStorage.getItem(Session.company.id + '::' + $state.current.name + '::TransfersController::currentNavItem');\n      }\n      return 1;\n    }\n\n    function getTotals() {\n      vm.loading = true;\n      api.inventories.transferOrders.list({\n        option: 'totals'\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.totalsByStatus = {};\n          response.status_counts.forEach(function(counter) {\n            vm.totalsByStatus[counter['status']] = counter['count'];\n          });\n        }\n        vm.loading = false;\n      });\n    }\n\n    function getFilterNotifications() {\n      var result = 0;\n      if (vm.currentNavItem == 'all') {\n        result += vm.status.filters.statuses && vm.status.filters.statuses.length > 0 ? 1 : 0;\n      }\n      result += vm.status.filters.targetWarehouses && vm.status.filters.targetWarehouses.length > 0 ? 1 : 0;\n      result += vm.status.filters.sourceWarehouses && vm.status.filters.sourceWarehouses.length > 0 ? 1 : 0;\n      result += vm.status.filters.type !== null ? 1 : 0;\n      return result;\n    }\n\n    function clearFilter() {\n      if (vm.currentNavItem === 'all') {\n        vm.status.filters.statuses = [];\n      }\n      vm.status.filters.type = null;\n      vm.status.filters.targetWarehouses = [];\n      vm.status.filters.sourceWarehouses = [];\n      reloadTransfers();\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryTransferController', InventoryTransferController);\n\n  /** @ngInject */\n  function InventoryTransferController(api,\n                                       $scope,\n                                       $state,\n                                       $mdMedia,\n                                       $mdSidenav,\n                                       $filter,\n                                       TRANSFER_ORDER_STATUSES,\n                                       TRANSFER_ORDER_STATUSES_REVERSE,\n                                       TRANSFER_ORDER_STATUS_COLORS,\n                                       Session) {\n\n    // Data\n    var vm = this;\n    vm.isNewTransfer = !$state.params.id;\n    vm.isReplenishment = !!$state.params.type;\n    vm.transfer = null;\n    vm.currentNavItem = \"\";\n    vm.TRANSFER_ORDER_STATUSES_REVERSE = TRANSFER_ORDER_STATUSES_REVERSE;\n    vm.pendingBarcodes = [];\n\n    // Methods\n    vm.gotoTransfers = gotoTransfers;\n    vm.getStatusLabel = getStatusLabel;\n    vm.delete = deleteTransfer;\n    vm.toggleSidenav = toggleSidenav;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.showDeleteButton = showDeleteButton;\n\n    initialize();\n\n    function initialize() {\n      $scope.changeOrderStatus = $scope.$on('changeOrderStatus::orderType', function(event, data) {\n        changeOrderStatus(data.status);\n      });\n\n      // Unregister Events\n      $scope.$on('$destroy', function () {\n        $scope.changeOrderStatus();\n      });\n    }\n\n      function changeOrderStatus(status) {\n        vm.transfer.status = status;\n      }\n\n    // Functions\n    function gotoTransfers() {\n      $state.go('app.inventory.transfers');\n    }\n\n    function getStatusColorClass(status) {\n      return TRANSFER_ORDER_STATUS_COLORS[status];\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('TRANSFERS.' + TRANSFER_ORDER_STATUSES[status]);\n    }\n\n    function toggleSidenav(sidenavId){\n      if(!$mdMedia('gt-md')){\n        $mdSidenav(sidenavId).toggle();\n      }else{\n        vm.barcodeLogOpened = !vm.barcodeLogOpened;\n      }\n    }\n\n    function showDeleteButton() {\n      if (!vm.transfer) {\n        return;\n      }\n      return (vm.transfer.status === 1 && vm.transfer.is_replenishment) || (vm.transfer.status === 2 && !vm.transfer.is_replenishment);\n    }\n\n    function deleteTransfer() {\n      if (Session.hasPermission('inventory.transfers.delete')) {\n        api.inventories.transferOrders.delete(\n          {\n            id:vm.transfer.id\n          },\n          function (response) {\n            $state.go('app.inventory.transfers');\n          }\n        )\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.inventory')\n    .controller('StocktakingsController', StocktakingsController);\n\n  /** @ngInject */\n  function StocktakingsController($scope, $compile, $state, $mdSidenav, $timeout, $filter, api, DTColumnBuilder, msUtils,\n                                  Session, STOCKTAKING_STATUSES, STOCKTAKING_STATUS_COLORS, SEARCH_MAX_LENGTH, $translate,\n                                  WarehousesData) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.dtInstance = {};\n    vm.orderStatuses = STOCKTAKING_STATUSES;\n    vm.stocktakingStatuses = [\n      STOCKTAKING_STATUSES.DRAFT,\n      STOCKTAKING_STATUSES.APPLIED\n    ];\n\n    vm.orderStatusColors = STOCKTAKING_STATUS_COLORS;\n    vm.search = null;\n\n    vm.filterStatus = '';\n    vm.statusList = getStatusListByDict();\n    vm.filterWarehouse = '';\n    vm.warehouses = WarehousesData.results;\n    vm.warehousesById = {};\n    vm.dicFilterColumns = {\n      filterStatus: 1,\n      filterWarehouse: 6\n    };\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.stocktakings.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n          if (vm.search) {\n            d.search.value = vm.search;\n          }\n        }\n      },\n      order: [[2, 'desc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      autoWidth: false,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableStocktakingsController', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableStocktakingsController'));\n        if (state) {\n          if (state.search && state.search.search) {\n            vm.search = state.search.search;\n          }\n\n          if (state.columns[vm.dicFilterColumns.filterStatus].search.search.indexOf(',') === -1) {\n            if (state.columns[vm.dicFilterColumns.filterStatus].search.search === '') {\n              vm.filterStatus = [];\n            } else {\n              vm.filterStatus = [state.columns[vm.dicFilterColumns.filterStatus].search.search];\n            }\n          } else {\n            vm.filterStatus = state.columns[vm.dicFilterColumns.filterStatus].search.search.split(',');\n          }\n          vm.filterWarehouse = state.columns[vm.dicFilterColumns.filterWarehouse].search.search;\n        }\n        return state;\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('STOCKTAKINGS.REFERENCE')),\n      DTColumnBuilder.newColumn('status')\n        .withTitle($filter('translate')('STOCKTAKINGS.STATUS'))\n        .renderWith(function(data, type, full) {\n          return '<span class=\"status-badge ' + vm.orderStatusColors[data] + '\">' + $filter('translate')('STOCKTAKINGS.' + STOCKTAKING_STATUSES[data]) + '</span>';\n        }),\n      DTColumnBuilder.newColumn('created_at')\n        .withTitle($filter('translate')('STOCKTAKINGS.CREATION_DATE'))\n        .renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n      DTColumnBuilder.newColumn('created_by_instance')\n        .withTitle($filter('translate')('CUSTOMERS.CREATED_BY'))\n        .renderWith(function(data, type, full) {\n          var fullname = data.first_name + ' ' + data.last_name;\n          return (\n            '<div layout=\"row\" layout-align=\"start center\"><nd-user-picture fullname=\"\\'' +\n            fullname +\n            '\\'\"  class=\"mr-8\"></nd-user-picture> ' +\n            fullname +\n            '</div> '\n          );\n        })\n        .withOption('orderData', 4),\n      DTColumnBuilder.newColumn('created_by')\n        .withTitle('')\n        .notVisible(),\n      DTColumnBuilder.newColumn('partial')\n        .withTitle($filter('translate')('STOCKTAKINGS.TYPE'))\n        .renderWith(function(data, type, full) {\n          if (!full.partial) {\n            return $filter('translate')('STOCKTAKINGS.TYPE_TOTAL');\n          } else {\n            var text = '<span translate=\\'STOCKTAKINGS.TYPE_PARTIAL\\'></span>';\n            var result = '';\n            if (full.brand) {\n              result += full.brand_instance.name;\n            }\n\n            if (full.category) {\n              if (result !== '') result += ' / ';\n              result += full.category_instance.name;\n            }\n\n            if (full.subcategory) {\n              if (result !== '') result += ' / ';\n              result += full.subcategory_instance.name;\n            }\n\n            if (full.collection) {\n              if (result !== '') result += ' / ';\n              result += full.collection_instance.code;\n            }\n\n            if (full.season) {\n              if (result !== '') result += ' / ';\n              result += full.season_instance.name;\n            }\n\n            if (result !== '') {\n              return text + '<md-tooltip> ' + result + ' </md-tooltip>';\n            } else {\n              return text;\n            }\n\n\n          }\n        }),\n      DTColumnBuilder.newColumn('source_warehouse')\n        .withTitle($filter('translate')('STOCKTAKINGS.WAREHOUSE'))\n        .renderWith(function(data, type, full) {\n          if (full.source_warehouse_instance) {\n            return full.source_warehouse_instance.name;\n          }\n          return '';\n        }),\n      DTColumnBuilder.newColumn('applied_at')\n        .withTitle($filter('translate')('STOCKTAKINGS.APPLIED_DATE'))\n        .renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        })\n    ];\n    if (Session.hasPermissions('inventory.stocktakings.stocktaking.products.show_previous_amount')) {\n      vm.dtColumns.push(DTColumnBuilder.newColumn('product_variants_previous_amount')\n        .withTitle($filter('translate')('STOCKTAKINGS.PREVIOUS'))\n        .renderWith(function(data, type, full) {\n          if (full.status == vm.orderStatuses.DRAFT) {\n            return '<span class=\"secondary-text\">' + data + '</span>';\n          }\n          return data;\n        }).notSortable()\n      );\n    }\n    vm.dtColumns.push(\n      DTColumnBuilder.newColumn('product_variants_amount')\n        .withTitle($filter('translate')('STOCKTAKINGS.DIFFERENCE'))\n        .renderWith(function(data, type, full) {\n          if (full.status == vm.orderStatuses.DRAFT) {\n            var difference = data - full.product_variants_previous_amount;\n            return '<span class=\"secondary-text\">' + difference + '</span>';\n          }\n          return data;\n        }).notSortable()\n    );\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.rowCallback = rowCallback;\n    vm.createdRow = createdRow;\n    vm.getStatusListByDict = getStatusListByDict;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.clearFilter = clearFilter;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.warehouses.map(function(warehouse) {\n        vm.warehousesById[warehouse.id] = warehouse;\n      });\n\n      $scope.$watch('vm.filterStatus', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterStatus, vm.dicFilterColumns.filterStatus);\n        }\n      }, false);\n\n      $scope.$watch('vm.filterWarehouse', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterWarehouse, vm.dicFilterColumns.filterWarehouse);\n        }\n      }, false);\n\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#stocktaking-search');\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function() {\n            var input = vm.search;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * Toggle sidenav\n     * @param sidenavId\n     */\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        $state.go('app.inventory.stocktakings.stocktaking.products', { id: aData.id });\n      });\n      return nRow;\n    }\n\n    //http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Applies the filter parameter to the column parameter\n     * @param filter\n     * @param column\n     */\n    function filterByColumn(filter, column) {\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.column(column).search(filter).draw();\n      }\n    }\n\n    function getFilterNotifications() {\n      var result = 0;\n      result += vm.filterStatus && vm.filterStatus.length > 0 ? 1 : 0;\n      result += vm.filterWarehouse != '' ? 1 : 0;\n\n      return result;\n    }\n\n    function clearFilter() {\n      vm.filterStatus = '';\n      vm.filterWarehouse = '';\n      vm.dtInstance.DataTable.draw();\n    }\n\n    /**\n     * Creates a list of status from STOCKTAKING_STATUSES cons\n     * @returns {Array}\n     */\n    function getStatusListByDict() {\n      var result = [];\n      for (var i in vm.stocktakingStatuses) {\n        var id = vm.stocktakingStatuses[i];\n        result.push({ code: id, name: STOCKTAKING_STATUSES[id] });\n      }\n      return result;\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryStocktakingController', InventoryStocktakingController);\n\n  /** @ngInject */\n  function InventoryStocktakingController(api, $state, $filter, $mdDialog, STOCKTAKING_STATUSES, STOCKTAKING_STATUS_COLORS, Session) {\n\n    // Data\n    var vm = this;\n    vm.STOCKTAKING_STATUSES = STOCKTAKING_STATUSES;\n\n    vm.isNewStocktaking = !$state.params.id;\n    vm.stocktaking = null;\n    vm.currentNavItem = \"\";\n    vm.showStocktakingHistoric = false;\n    vm.stocktakingHistoricArray = [];\n    vm.stocktakingHistoricNext = null;\n    vm.orderStatusColors = STOCKTAKING_STATUS_COLORS;\n\n\n    // Methods\n    vm.gotoStocktakings = gotoStocktakings;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColor = getStatusColor;\n    vm.delete = deleteStocktaking;\n    vm.isEditable = isEditable;\n    vm.showStocktakingHistoricFunc = showStocktakingHistoricFunc;\n\n    // Functions\n    function gotoStocktakings() {\n      $state.go('app.inventory.stocktakings');\n    }\n\n    function getStatusColor(status) {\n      return vm.orderStatusColors[status];\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('STOCKTAKINGS.' + STOCKTAKING_STATUSES[status]);\n\n    }\n\n    function isEditable() {\n      return vm.stocktaking.status === STOCKTAKING_STATUSES.DRAFT &&\n        vm.stocktaking.changing_status == false && vm.stocktaking.pending_to_apply == false;\n    }\n\n    function deleteStocktaking() {\n      if (Session.hasPermission('inventory.stocktakings.delete_draft')) {\n\n        if (vm.saving || vm.stocktaking.changing_status){\n          return;\n        }\n\n        vm.saving = true;\n\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('STOCKTAKING.DELETE_STOCKTAKING'))\n          .htmlContent($filter('translate')('STOCKTAKING.DELETE_STOCKTAKING_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function () {\n          api.inventories.stocktakings.delete(\n            {id: vm.stocktaking.id},\n            function (response) {\n              $state.go('app.inventory.stocktakings');\n            }\n          );\n        }, function () {\n          vm.saving = false;\n        });\n      }\n    }\n\n    function showStocktakingHistoricFunc(){\n      return vm.currentNavItem === 'products' && vm.showStocktakingHistoric;\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryStocksController', InventoryStocksController);\n\n  /** @ngInject */\n  function InventoryStocksController($scope, $rootScope, $http, $document, $state, $timeout, $q, $mdSidenav, $mdMedia, $filter, $mdDialog,\n                                     $compile, api, Session, DTColumnBuilder, STOCK_FILTER_STATES, WarehousesData, CategoriesData, SitesData,\n                                     SubcategoriesData, BrandsData, SeasonsData, CONTACT_TYPES_REVERSE, SEARCH_MAX_LENGTH) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstance = {};\n    vm.products = {};\n    vm.searchInput = '';\n    vm.checkboxesStatuses = {};\n    vm.warehouses = WarehousesData.results;\n    vm.selectedWarehouses = [];\n    vm.view = $state.params.view == 'totals' ? 2 : 1;\n    vm.firstRow = true;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filtersParams: {},\n      notifications: 0,\n      filters: {\n        brands: [],\n        categories: [],\n        subcategories: [],\n        seasons: [],\n        compositions: [],\n        status: [],\n        sites: [],\n        barcode: '',\n        sku: '',\n        sizes: [],\n        colors: [],\n        webCategories: [],\n        providers: [],\n        purchases: [],\n        cover: '',\n        tag: '',\n        stock: '',\n        visibleInEcommerce: '',\n        discountPrice: '',\n        stockBelowMinimum: false,\n        discountActive: false,\n        duplicatedProducts: false,\n        isNoos: false,\n        archived: false,\n        duplicatedBarcode: false,\n        duplicatedSku: false,\n        productCreatedStartDate: null,\n        productCreatedEndDate: null,\n        productUpdatedStartDate: null,\n        productUpdatedEndDate: null,\n        productPriceUpdatedStartDate: null,\n        productPriceUpdatedEndDate: null\n      },\n      pageNumber: 1\n      //pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.baseUrl + 'inventories/products',\n        type: 'post',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n          d.serializer = 'ProductStockSerializer';\n          d.long_url_get = true;\n          d.order = null;\n          d.warehouses = vm.selectedWarehouses.map(function(w) {\n            return w.id;\n          }).join(',');\n\n          // Filters (from the directive nd-products-filters\n          angular.extend(d, vm.status.filtersParams);\n\n          vm.firstRow = true;\n        }\n      },\n      className: 'text-center',\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [1, 2, 5, 10, 25],\n      pageLength: 5,\n      scrollY: 'auto',\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      displayStart: 0,\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        data.status = vm.status;\n        localStorage.setItem(Session.company.id + '::dataTableInventoryStocksControllerV5', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableInventoryStocksControllerV5'));\n        if (state) {\n          if (state.search && state.search.search) {\n            vm.search = state.search.search;\n          }\n          if (angular.isDefined(state.status)) {\n            vm.status = state.status;\n          }\n          vm.filterStock = localStorage.getItem(Session.company.id + '::dataTableInventoryStocksControllerV5::filterStock') ? localStorage.getItem(Session.company.id + '::dataTableInventoryStocksControllerV5::filterStock') : '';\n        }\n        $timeout(function() {\n          $rootScope.$broadcast('ndGrid::statusLoaded');\n        }, 500);\n        return state;\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('code').withOption('className', 'no-padding').renderWith(function(data, type, full) {\n        vm.products[full.id] = full;\n\n        if (vm.view == 1) {\n          return '<nd-product-stock-kpis show-info=\"true\" edit-transfers=\"true\" product=\"vm.products[' + full.id + ']\" warehouses=\"vm.selectedWarehouses\" allow-edition=\"true\"></nd-product-stock-kpis>';\n        } else {\n          if (vm.firstRow) {\n            vm.firstRow = false;\n            return '<nd-stock-overview  header=\"true\" product=\"vm.products[' + full.id + ']\" warehouses=\"vm.selectedWarehouses\"></nd-stock-overview>';\n          } else {\n            return '<nd-stock-overview  product=\"vm.products[' + full.id + ']\" warehouses=\"vm.selectedWarehouses\"></nd-stock-overview>';\n          }\n        }\n      })\n    ];\n\n    // Methods\n    vm.gotoProductDetail = gotoProductDetail;\n    vm.initialize = initialize;\n    vm.toggleSidenav = toggleSidenav;\n    vm.exists = exists;\n    vm.toggle = toggle;\n    vm.inStockChanged = inStockChanged;\n    vm.barcodeListenerCallback = barcodeListenerCallback;\n    vm.reloadProducts = reloadProducts;\n    vm.clearFilter = clearFilter;\n    vm.updateFilterNotifications = updateFilterNotifications;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      var selectedWarehouses = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableInventoryStocksWarehousesV4Controller'));\n      if (selectedWarehouses) {\n        var availableWarehousesIds = WarehousesData.results.map(function(warehouse) {\n          return warehouse.id;\n        });\n        selectedWarehouses = selectedWarehouses.filter(function(warehouse) {\n          return availableWarehousesIds.indexOf(warehouse.id) > -1;\n        });\n        vm.selectedWarehouses = selectedWarehouses;\n      } else {\n        vm.warehouses.map(function(warehouse) {\n          vm.selectedWarehouses.push(warehouse);\n        });\n      }\n    }\n\n    function updateFilterNotifications() {\n      if (angular.isUndefined(vm.filtersNotifications)) {\n        return;\n      }\n\n      var result = 0;\n      Object.keys(vm.status.filters).forEach(function(filter) {\n        if (typeof vm.status.filters[filter] === 'string') {\n          result += vm.status.filters[filter] === '' ? 0 : 1;\n        } else if (typeof vm.status.filters[filter] === 'boolean') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'number') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'object') {\n          result += vm.status.filters[filter] && vm.status.filters[filter].length ? 1 : 0;\n        }\n      });\n      vm.filtersNotifications = result;\n    }\n\n    function gotoProductDetail(id) {\n      $state.go('app.inventory.products.product.details', { id: id });\n    }\n\n    function initComplete() {\n\n      var api = this.api(),\n        searchBox = angular.element('body').find('#product-search');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 1000);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function StockDetailsController($scope, $mdDialog, product, warehouses, status) {\n\n      $scope.product = product;\n      $scope.warehouses = warehouses;\n      $scope.status = status;\n\n      $scope.hide = function() {\n        $mdDialog.hide();\n      };\n      $scope.cancel = function() {\n        $mdDialog.cancel();\n      };\n      $scope.answer = function(answer) {\n        $mdDialog.hide(answer);\n      };\n\n      $scope.changeStatus = function(status) {\n        $scope.status = status;\n      };\n\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function removeFalsyItems(item) {\n      return !!item;\n    }\n\n    function extractItemsId(item) {\n      return item.id;\n    }\n\n    function contains(warehouse) {\n      return vm.selectedWarehouses.findIndex(function(w) {\n        return w.id == warehouse.id;\n      });\n    }\n\n    function exists(warehouse) {\n      return contains(warehouse) > -1;\n    }\n\n    function toggle(warehouse) {\n      var index = contains(warehouse);\n      if (index > -1) {\n        vm.selectedWarehouses.splice(index, 1);\n      } else {\n        vm.selectedWarehouses.push(warehouse);\n      }\n\n      if (!!vm.timeout) {\n        $timeout.cancel(vm.timeout);\n      }\n\n      vm.timeout = $timeout(function() {\n        vm.dtInstance.DataTable.draw();\n        vm.timeout = null;\n      }, 1000);\n\n      localStorage.removeItem(Session.company.id + '::dataTableInventoryStocksWarehousesV4Controller');\n      localStorage.setItem(Session.company.id + '::dataTableInventoryStocksWarehousesV4Controller', JSON.stringify(vm.selectedWarehouses));\n    }\n\n    function hasSomeItemWithSameId(array, origin) {\n      if (!origin || !array) {\n        return true;\n      }\n\n      return array.some(function(item) {\n        return item.id === origin.id;\n      });\n    }\n\n    function barcodeListenerCallback(barcode) {\n      vm.search = barcode;\n      vm.dtInstance.DataTable.search(barcode, false, false, true).draw();\n    }\n\n    function inStockChanged() {\n      localStorage.setItem(Session.company.id + '::dataTableInventoryStocksControllerV2::filterStock', vm.filterStock);\n      vm.dtInstance.DataTable.draw();\n    }\n\n    function reloadProducts() {\n      vm.dtInstance.DataTable.draw();\n    }\n\n    function clearFilter() {\n      $rootScope.$broadcast('ndProductsFilters::clearFilters');\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.inventory')\n    .controller('PurchasesCalendarController', PurchasesCalendarController);\n\n  /** @ngInject */\n  function PurchasesCalendarController($scope, $http, $compile, $state, $mdSidenav, $timeout, $filter, api, DTColumnBuilder, msUtils,\n                               Session, $translate, BrandsData, SeasonsData, CategoriesData, SubcategoriesData, SEARCH_MAX_LENGTH) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.dtInstance = {};\n    vm.search = null;\n\n    vm.filterBrands = null;\n    vm.filterCategories = null;\n    vm.filterSubcategories = null;\n    vm.filterSeasons = null;\n    vm.brands = BrandsData.results;\n    vm.seasons = SeasonsData.results;\n    vm.categories = CategoriesData.results;\n    vm.subcategories = SubcategoriesData.results;\n    vm.calendarType='purchases'\n\n    vm.purchaseOrderProducts = [];\n    vm.currentYear = new Date().getFullYear();\n    vm.loading = false;\n    vm.popsByMonth = {};\n    vm.dicFilterColumns = {\n      filterStatus: 1,\n      filterTargetWarehouse: 3\n    };\n\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.prevYear = prevYear;\n    vm.nextYear = nextYear;\n    vm.loadOrderProductPurchases = loadOrderProductPurchases;\n    vm.getPopsOrPodps = getPopsOrPodps;\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize(){\n\n      var recovered_filters = JSON.parse(localStorage.getItem(Session.company.id + '::purchasesCalendarFiltersController'));\n      if (recovered_filters != null && angular.isDefined(recovered_filters.year)) {\n        vm.currentYear = recovered_filters.year;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.search)) {\n        vm.search = recovered_filters.search;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.brand)) {\n        vm.filterBrands = recovered_filters.brand;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.category)) {\n        vm.filterCategories = recovered_filters.category;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.subcategory)) {\n        vm.filterSubcategories = recovered_filters.subcategory;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.season)) {\n        vm.filterSeasons = recovered_filters.season;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.type)) {\n        vm.calendarType = recovered_filters.type;\n      }\n\n      loadOrderProductPurchases();\n\n      $scope.$watch('vm.search', function(newValue, oldValue){\n        if(newValue !== oldValue){loadOrderProductPurchases()}}, false);\n      $scope.$watch('vm.filterBrands', function(newValue, oldValue){\n        if(newValue !== oldValue){loadOrderProductPurchases()}}, false);\n      $scope.$watch('vm.filterCategories', function(newValue, oldValue){\n        if(newValue !== oldValue){loadOrderProductPurchases()}}, false);\n      $scope.$watch('vm.filterSubcategories', function(newValue, oldValue){\n        if(newValue !== oldValue){loadOrderProductPurchases()}}, false);\n      $scope.$watch('vm.filterSeasons', function(newValue, oldValue){\n        if(newValue !== oldValue){loadOrderProductPurchases()}}, false);\n      $scope.$watch('vm.calendarType', function(newValue, oldValue){\n        if(newValue !== oldValue){saveFiltersStatus()}}, false);\n\n    }\n\n    function prevYear(){\n      if(vm.loading){\n        return;\n      }\n      vm.currentYear -= 1;\n      loadOrderProductPurchases();\n    }\n\n    function nextYear(){\n      if(vm.loading){\n        return;\n      }\n      vm.currentYear += 1;\n      loadOrderProductPurchases();\n    }\n\n    function getPopsOrPodps(){\n      if(vm.calendarType=='purchases'){\n        return vm.popsByMonth;\n      }else{\n        return vm.podpsByMonth;\n      }\n    }\n\n    function loadOrderProductPurchases(){\n      if(vm.loading){\n        return;\n      }\n\n      vm.loading = true;\n\n      api.inventories.purchaseOrderProducts.get({\n        option: 'calendar',\n        year: vm.currentYear,\n        brand: vm.filterBrands && vm.filterBrands.length ? vm.filterBrands.join() : null,\n        category: vm.filterCategories && vm.filterCategories.length ? vm.filterCategories.join() : null,\n        subcategory: vm.filterSubcategories && vm.filterSubcategories.length ? vm.filterSubcategories.join() : null,\n        season: vm.filterSeasons && vm.filterSeasons.length ? vm.filterSeasons.join() : null,\n        search: vm.search\n      }, function(response, callback, status){\n        \n        // Preparing Purchase Order Products to be more optim\n        vm.popByProductId = {};\n        vm.popsByMonth = {};\n        vm.purchaseOrderProducts = response.purchases;\n        vm.purchaseOrderProducts.forEach(function(pop){\n          pop.start_date = new Date(pop.start_date)\n          if(angular.isUndefined(vm.popsByMonth[pop.month])){\n            vm.popsByMonth[pop.month] = [];\n          }\n          if(angular.isUndefined(vm.popByProductId[pop.product])){\n            vm.popsByMonth[pop.product] = pop;\n          }\n          pop.type='purchase'\n          vm.popsByMonth[pop.month].push(pop);\n        });\n\n        // Preparing Purchase Order Delivery Products to be more optim\n        vm.podpsByMonth = {};\n        vm.purchaseOrderDeliveryProducts = response.deliveries;\n        vm.purchaseOrderDeliveryProducts.forEach(function(podp){\n\n          var pop = vm.popsByMonth[podp.order_product_variant__purchase_order_product__product];\n          podp.cover = angular.isDefined(pop) && angular.isDefined(pop.cover) ? pop.cover : null;\n          podp.product = podp.order_product_variant__purchase_order_product__product;\n          podp.product_code = podp.order_product_variant__purchase_order_product__product_code;\n          podp.product_name = podp.order_product_variant__purchase_order_product__product_name;\n          podp.start_date = new Date(podp.order_delivery__expected_at);\n          podp.amount = podp.received_amount__sum;\n          podp.month = new Date(podp.order_delivery__expected_at).getMonth() + 1;\n          podp.purchase_order = podp.order_delivery__purchase_order;\n          podp.order_delivery = podp.order_delivery;\n          podp.autocode = podp.order_delivery__autocode;\n\n          if(angular.isUndefined(vm.podpsByMonth[podp.month])){\n            vm.podpsByMonth[podp.month] = [];\n          }\n          podp.type='delivery'\n          vm.podpsByMonth[podp.month].push(podp);\n        });\n        \n        vm.loading = false;\n      });\n\n      saveFiltersStatus();\n    }\n\n    function saveFiltersStatus(){\n      localStorage.setItem(Session.company.id + '::purchasesCalendarFiltersController', JSON.stringify({\n        year: vm.currentYear,\n        brand: vm.filterBrands,\n        category: vm.filterCategories,\n        subcategory: vm.filterSubcategories,\n        season: vm.filterSeasons,\n        search: vm.search,\n        type: vm.calendarType\n      }));\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\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  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('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\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  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.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\n  angular\n    .module('app.integration_apps')\n    .controller('AppsController', AppsController);\n\n  /** @ngInject */\n  function AppsController($scope, $filter, api, $mdToast, HTTP_STATUS) {\n    var vm = this;\n\n    // Data\n    vm.integrationApps = [];\n\n    // Methods\n\n    initialize();\n\n    // Functions\n    function initialize() {\n      api.integrationApps.apps.list({}, function (response, fn, status) {\n        if (status !== HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          return;\n        }\n\n        vm.integrationApps = response.results;\n      });\n    }\n\n    $scope.$on('reload_cards', function () {\n      initialize();\n    });\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('EcommerceSortingController', EcommerceSortingController);\n\n  /** @ngInject */\n  function EcommerceSortingController($scope, $mdMenu, $mdToast, $state, $timeout, $mdSidenav, $mdMedia, $filter, SitesData,\n                                      $mdDialog, $document, $compile, $stateParams, api, Session, DTColumnBuilder, CategoriesData,\n                                      SubcategoriesData, BrandsData, SeasonsData, $translate,\n                                      PERMISSIONS, HTTP_STATUS, SEARCH_MAX_LENGTH) {\n    var vm = this;\n    // Cons\n    vm.PERMISSIONS = PERMISSIONS;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstanceProducts = {};\n    vm.changes = false;\n    vm.items = [];\n    vm.selected = [];\n    vm.saving = false;\n    vm.filterBrands = null;\n    vm.brandsList = BrandsData.results;\n    vm.filterCategories = null;\n    vm.categoriesList = CategoriesData.results;\n    vm.filterSubcategories = null;\n    vm.subcategoriesList = SubcategoriesData.results;\n    vm.filterSeasons = null;\n    vm.seasonsList = SeasonsData.results;\n    vm.sitesList = SitesData.results;\n    vm.filterSites = null;\n    vm.duplicatedProducts = false;\n    vm.isNoos = false;\n    vm.discountActive = false;\n    vm.productsDict = {};\n    vm.orderedProductsDict = {};\n    vm.orderedProductsList = [];\n    vm.gridOpts = {\n      columns: 6\n    };\n\n    vm.dtOptionsProducts = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.baseUrl + 'inventories/products',\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          d.serializer = 'ProductSortingSerializer';\n          d.is_raw_material = false;\n          d.long_url_get = true;\n\n          if (vm.filterBrands) {\n            d.brand = vm.filterBrands;\n          }\n          if (vm.filterCategories) {\n            d.category = vm.filterCategories;\n          }\n          if (vm.filterSubcategories) {\n            d.subcategory = vm.filterSubcategories;\n          }\n          if (vm.filterSeasons) {\n            d.season = vm.filterSeasons;\n          }\n          if (vm.filterSites) {\n            d.site_id = vm.filterSites;\n          }\n          if (vm.duplicatedProducts) {\n            d.duplicated = true;\n          }\n          if (vm.isNoos) {\n            d.is_noos = true;\n          }\n          if (vm.discountActive) {\n            d.discount_active = true;\n          }\n        }\n      },\n      rowId: 'id',\n      //order: [9, 'desc'],\n      dom: 'rt<\"bottom\"<\"right\"<\"pagination\"p>>>',\n      createdRow: createdRow,\n      initComplete: initComplete,\n      pagingType: 'simple',\n      lengthMenu: [100, 500],\n      pageLength: 100,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      scrollY: true,\n      //scrollX: true,\n      //scrollCollapse: true,\n      //autoWidth: true,\n      //fixedColumns:   {\n      //  leftColumns: 1\n      //},\n      stateSaveCallback: function (settings, data) {\n        data.brand = vm.filterBrands;\n        data.category = vm.filterCategories;\n        data.subcategory = vm.filterSubcategories;\n        data.season = vm.filterSeasons;\n        data.site_id = vm.filterSites;\n        data.duplicated = vm.duplicatedProducts;\n        data.is_noos = vm.isNoos;\n        data.discount_active = vm.discountActive;\n        localStorage.setItem(Session.company.id + '::dataTableEcommerceSortingController', JSON.stringify(data));\n      },\n      stateLoadCallback: function (settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableEcommerceSortingController'));\n        if (state) {\n          vm.filterBrands = state.brand;\n          vm.filterCategories = state.category;\n          vm.filterSubcategories = state.subcategory;\n          vm.filterSeasons = state.season;\n          vm.filterSites = state.site_id;\n          vm.duplicatedProducts = state.duplicated;\n          vm.isNoos = state.is_noos;\n          vm.discountActive = state.discount_active;\n        }\n        return state;\n      }\n    };\n\n    vm.dtColumnsProducts = [\n      DTColumnBuilder.newColumn('id').renderWith(function (data, type, full) {\n\n        vm.productsDict[data] = full;\n\n        if (full.cover_thumbnail) {\n          return '<div class=\"product\" layout=\"row\" dnd-dragend=\"vm.dragEnd(vm.productsDict[' + data + '])\" layout-align=\"start center\" ng-class=\"{\\'exists\\': vm.exists(' + data + ')}\" ' +\n            'dnd-draggable=\"vm.productsDict[' + data + ']\">' +\n            '<img class=\"w-50 h-50\" src=\"' + full.cover_thumbnail + '\">' +\n            '<span class=\"p-5 pl-10\">' + full.code + '</span>' +\n            '</div>';\n        } else {\n          return '<div class=\"product\" layout=\"row\" dnd-dragend=\"vm.dragEnd(vm.productsDict[' + data + '])\" layout-align=\"start center\" ng-class=\"{\\'exists\\': vm.exists(' + data + ')}\" ' +\n            'dnd-draggable=\"vm.productsDict[' + data + ']\">' +\n            '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg w-50 h-50 m-5\"></md-icon>' +\n            '<span class=\"p-5 pl-10\">' + full.code + '</span>' +\n            '</div>';\n        }\n      })\n    ];\n\n    // Methods\n    vm.initialize = initialize;\n    vm.toggleSidenav = toggleSidenav;\n    vm.addProduct = addProduct;\n    vm.savePositions = savePositions;\n    vm.clearPositions = clearPositions;\n    vm.dragEnd = dragEnd;\n    vm.exists = exists;\n    vm.cleanProduct = cleanProduct;\n    vm.addAllList = addAllList;\n    vm.sortProducts = sortProducts;\n    vm.openMenu = openMenu;\n    vm.checkSubcategory = checkSubcategory;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function dragEnd(product) {\n      vm.changes = true;\n      vm.orderedProductsDict[product.id] = product;\n      return product;\n    }\n\n    function cleanProduct(product) {\n\n      vm.changes = true;\n\n      for (var i = 0; i < vm.orderedProductsList.length; i++) {\n        if (product.id == vm.orderedProductsList[i].id) {\n          vm.orderedProductsList.splice(i, 1);\n          delete vm.orderedProductsDict[product.id];\n        }\n      }\n\n      /*if(vm.saving){\n        return true;\n      }\n\n      vm.saving = true;\n\n      api.inventories.products.save({\n        option: 'clean-sorting',\n        id: product.id\n      }, function(response, callback, status){\n\n        for(var i=0; i<vm.orderedProductsList.length; i++){\n          if(product.id == vm.orderedProductsList[i].id){\n            vm.orderedProductsList.splice(i, 1);\n            delete vm.orderedProductsDict[product.id];\n          }\n        }\n        vm.saving = false;\n      });*/\n    }\n\n    function savePositions() {\n\n      if (vm.saving) {\n        return true;\n      }\n\n      vm.saving = true;\n\n      vm.orderedProductsList.forEach(function (product, index) {\n        product.position = index;\n      });\n\n      api.inventories.products.save({\n        option: 'sorting',\n        products: vm.orderedProductsList\n      }, function (response, callback, status) {\n        vm.saving = false;\n        vm.changes = false;\n      });\n    }\n\n    function clearPositions() {\n\n      vm.changes = true;\n      vm.orderedProductsList = [];\n      vm.orderedProductsDict = {};\n\n      /*if(vm.saving){\n        return true;\n      }\n\n      vm.saving = true;\n\n      vm.orderedProductsList.forEach(function(product, index){\n        product.position = null;\n      });\n\n      api.inventories.products.save({\n        option: 'sorting',\n        products: vm.orderedProductsList\n      }, function(response, callback, status){\n        vm.orderedProductsList = [];\n        vm.saving = false;\n      });*/\n    }\n\n    function addProduct(product) {\n      vm.changes = true;\n      vm.orderedProductsDict[product.id] = product;\n      vm.orderedProductsList.push(product);\n    }\n\n    function addAllList() {\n      vm.changes = true;\n      for (var key in vm.productsDict) {\n        var product = vm.productsDict[key];\n        if (!vm.orderedProductsDict[product.id]) {\n          vm.orderedProductsDict[product.id] = product;\n          vm.orderedProductsList.push(product);\n        }\n      }\n    }\n\n    function exists(productId) {\n      return !!vm.orderedProductsDict[productId];\n    }\n\n    function initialize() {\n\n      var filters = {};\n      filters.serializer = 'ProductSortingSerializer';\n      filters.position = true;\n\n      /*filters.is_raw_material = false;\n\n      if(vm.filterBrands){\n        filters.brand = vm.filterBrands;\n      }\n      if(vm.filterCategories){\n        filters.category = vm.filterCategories;\n      }\n      if(vm.filterSubcategories){\n        filters.subctegory = vm.filterSubcategories;\n      }\n      if(vm.filterSeasons){\n        filters.season = vm.filterSeasons;\n      }\n      if (vm.filterSites) {\n        filters.site_id = vm.filterSites;\n      }\n      if (vm.duplicatedProducts) {\n        filters.duplicated = true;\n      }\n      if (vm.isNoos) {\n        filters.is_noos = true;\n      }\n      if (vm.discountActive) {\n        filters.discount_active = true;\n      }*/\n\n      api.inventories.products.get(filters, function (response, callback, status) {\n        vm.orderedProductsList = response.results;\n        vm.orderedProductsList.sort(function (a, b) {\n          if (a.position < b.position) return -1;\n          if (a.position > b.position) return 1;\n          return 0;\n        });\n        vm.orderedProductsList.forEach(function (product) {\n          vm.orderedProductsDict[product.id] = product;\n        });\n      });\n\n      $scope.$watch('vm.filterBrands', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      $scope.$watch('vm.filterSeasons', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      $scope.$watch('vm.filterCategories', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      $scope.$watch('vm.filterSubcategories', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      $scope.$watch('vm.filterSites', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      $scope.$watch('vm.isNoos', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      $scope.$watch('vm.discountActive', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      $scope.$watch('vm.duplicatedProducts', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      /*var loadedColumns = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableInventoryProductsColumnsController'));\n      if (loadedColumns) {\n        for (var key in loadedColumns) {\n          if (vm.columns[key]) {\n            vm.columns[key].selected = loadedColumns[key].selected;\n          }\n        }\n      }*/\n\n    }\n\n    function initComplete() {\n\n      var api = this.api(),\n        searchBox = angular.element('body').find('#product-search');\n\n      vm.dtInstanceProducts.DataTable.columns.adjust();\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function openMenu($mdMenu, ev) {\n      $mdMenu.open(ev);\n    }\n\n    function sortProducts(type) {\n      if (type == 'category') {\n        vm.orderedProductsList.sort(function (a, b) {\n          if (a.category_position == b.category_position) {\n            if (a.subcategory_position > b.subcategory_position) {\n              return 1;\n            }\n            if (a.subcategory_position < b.subcategory_position) {\n              return -1;\n            }\n            return 0;\n          } else {\n            if (a.category_position > b.category_position) {\n              return 1;\n            }\n            if (a.category_position < b.category_position) {\n              return -1;\n            }\n            return 0;\n          }\n        });\n      } else if (type == 'subcategory') {\n        vm.orderedProductsList.sort(function (a, b) {\n          if (a.subcategory_position > b.subcategory_position) {\n            return 1;\n          }\n          if (a.subcategory_position < b.subcategory_position) {\n            return -1;\n          }\n          return 0;\n        });\n      } else if (type == 'brand') {\n        vm.orderedProductsList.sort(function (a, b) {\n          if (a.brand_position > b.brand_position) {\n            return 1;\n          }\n          if (a.brand_position < b.brand_position) {\n            return -1;\n          }\n          return 0;\n        });\n      } else if (type == 'season') {\n        vm.orderedProductsList.sort(function (a, b) {\n          if (a.season_position > b.season_position) {\n            return 1;\n          }\n          if (a.season_position < b.season_position) {\n            return -1;\n          }\n          return 0;\n        });\n      }\n    }\n\n    function checkSubcategory(category) {\n      var subcategories = $filter('filter')(vm.subcategoriesList, {'category': {'id': category}});\n      var hasSubcategory = $filter('filter')(subcategories, {'id': vm.filterSubcategories});\n      vm.filterSubcategories = hasSubcategory.length == 0 ? null : vm.filterSubcategories;\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('EcommerceSitesController', EcommerceSitesController);\n\n  /** @ngInject */\n  function EcommerceSitesController(\n    $scope,\n    $state,\n    $timeout,\n    $filter,\n    $compile,\n    $mdDialog,\n    api,\n    DTColumnBuilder,\n    $translate,\n    Session,\n    SEARCH_MAX_LENGTH,\n    ContractedPlanLimit,\n    ContractedPlanLimitData\n  ) {\n    var vm = this;\n\n    //Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Dataapi\n    vm.hasSubscription = Session.hasSubscription;\n    vm.contractedPlanLimit = null;\n    vm.timeout = null;\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.ecommerce.sites.replace('/:id', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('name')\n        .withTitle($filter('translate')('SITES.SITE_NAME'))\n        .renderWith(function(data, type, full) {\n          var result = '<div layout=\"row\" layout-align=\"start center\"><nd-ecommerce-icon class=\"mr-8\" platform=\"' + full.platform + '\"></nd-ecommerce-icon>' + data;\n          if (full.sync_stock_only) {\n            result += '<span class=\"text-boxed yellow-bg black-fg ml-16\">{{ \"SITE.SYNC_STOCK_ONLY\" | translate}}</span>';\n          }\n          result += '</div>';\n          return result;\n        }),\n      DTColumnBuilder.newColumn('site_products')\n        .notSortable()\n        .withTitle($filter('translate')('SITE.PRODUCTS')),\n      DTColumnBuilder.newColumn('created_at').withTitle($filter('translate')('SITES.CREATED_AT'))\n        .renderWith(function(data, type, full) {\n          return $filter('date')(data, 'short');\n        }),\n      DTColumnBuilder.newColumn('last_sync').withTitle($filter('translate')('SITES.LAST_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  '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  angular\n    .module('app.contacts')\n    .controller('ContactController', ContactController);\n\n  /** @ngInject */\n  function ContactController($scope, $state, $mdSidenav, $filter, $mdToast, ContactData, $mdDialog, Session, CONTACT_TYPES, CONTACT_TYPES_REVERSE, api) {\n\n    var vm = this;\n    $scope.$state = $state;\n    $scope.CONTACT_TYPE_CUSTOMER = CONTACT_TYPES_REVERSE.CONTACT_TYPE_CUSTOMER;\n    vm.contact = ContactData;\n    vm.contactType = CONTACT_TYPES[vm.contact.type];\n    vm.isNew = $state.params.id === 'add';\n\n    vm.personDeletedWatcher = $scope.$on('personDeleted', function(event, deletedPersonId) {\n      if (vm.contact && Array.isArray(vm.contact.persons)) {\n        vm.contact.persons = vm.contact.persons.filter(function(person) {\n          return person.id !== deletedPersonId;\n        });\n      }\n    });\n\n    vm.personSavedWatcher = $scope.$on('personSaved', function(event, newPerson) {\n      if (vm.contact && Array.isArray(vm.contact.persons)) {\n        var existingPersonIndex = vm.contact.persons.findIndex(function(person) {\n          return person.id === newPerson.id;\n        });\n        if (existingPersonIndex !== -1) {\n          vm.contact.persons[existingPersonIndex] = newPerson;\n        }\n        else if (newPerson.id) {\n          vm.contact.persons.push(newPerson);\n        }\n      } else if (vm.contact) {\n        vm.contact.persons = [newPerson];\n      }\n    });\n    $scope.$on('$destroy', function() {\n        vm.personDeletedWatcher();\n        vm.personSavedWatcher();\n      });\n\n  }\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.analytics')\n        .controller('AnalyticsWholesaleDashboardController', AnalyticsWholesaleDashboardController);\n\n    /** @ngInject */\n    function AnalyticsWholesaleDashboardController($filter, $state, $scope, $timeout, $interval, $mdSidenav, WarehousesData, Session)\n    {\n\n        // Data\n        var vm = this;\n        vm.Session = Session;\n        vm.selectedWarehouses = $state.params.warehouseIds == undefined ? [] : ( $state.params.warehouseIds == \"\" ? [] : $state.params.warehouseIds.split(','));\n        vm.warehouseId = $state.params.warehouseId == undefined ? null : $state.params.warehouseId;\n\n        vm.warehouses = WarehousesData.results;\n        vm.date = new Date();\n        vm.channels = null;\n        vm.selectedChannel = null;\n        vm.selectStoreTimeout = null;\n\n        // Methods\n        vm.selectChannel = selectChannel;\n        vm.changeTabToRealtime = changeTabToRealtime;\n        vm.changeTabToPerformance = changeTabToPerformance;\n        vm.contains = contains;\n        vm.toggle = toggle;\n        vm.exists = exists;\n\n        // Initialization\n        initialize();\n\n        // Functions\n        function initialize(){\n\n            vm.selectedWarehouses = $state.params.warehouseIds == undefined ? [] : ( $state.params.warehouseIds == \"\" ? [] : $state.params.warehouseIds.split(','));\n\n            vm.channels = [\n                {type: 'global', id: null, name: 'ALL_CHANNELS', separator: true},\n                /*{type: 'is_wholesale_showroom', name: 'ALL_SHOWROOMS'},\n                {type: 'is_wholesale_b2b_ecommerce', name: 'ALL_B2BECOMMERCE'},*/\n            ];\n\n            vm.warehouses.map(function(warehouse){\n              var channel = {\n                  code:'store',\n                  id: warehouse.id,\n                  name: warehouse.name\n              };\n              vm.channels.push(channel);\n              if(vm.selectedWarehouses.length==1 && vm.selectedWarehouses[0] == warehouse.id){\n                  vm.selectedChannel = channel;\n              }\n            });\n\n            if(vm.selectedWarehouses.length == 0){\n                vm.selectedChannel = vm.channels[0];\n            }else if(vm.selectedWarehouses.length > 1){\n                vm.selectedChannel = null;\n            }\n        }\n\n        function selectChannel(channel){\n            vm.selectedChannel = channel;\n        }\n\n        function changeTabToRealtime(){\n            $state.go('app.analytics.wholesale_dashboard.realtime', {warehouseId:vm.warehouseId});\n        }\n\n        function changeTabToPerformance(){\n            $state.go('app.analytics.wholesale_dashboard.performance', {warehouseId:vm.warehouseId});\n        }\n\n        function contains(warehouse) {\n            for (var i=0; i<vm.selectedWarehouses.length; i++) {\n              if (vm.selectedWarehouses[i] == warehouse) {\n                  return i;\n              }\n            }\n            return -1;\n        }\n\n        function exists(warehouse) {\n            return contains(warehouse) > -1;\n        }\n\n        function toggle(warehouse, tab) {\n            var index = contains(warehouse);\n            if (index > -1) {\n                vm.selectedWarehouses.splice(index, 1);\n            }\n            else {\n                vm.selectedWarehouses.push(warehouse);\n            }\n\n            if (!!vm.timeout) {\n                $timeout.cancel(vm.timeout);\n            }\n\n            vm.timeout = $timeout(function () {\n                vm.timeout = null;\n                if(tab == 'realtime'){\n                    $state.go('app.analytics.wholesale_dashboard.realtime', {warehouseIds:vm.selectedWarehouses});\n                }\n            }, 1000);\n\n            localStorage.removeItem(Session.company.id + '::wholesaleDashboardSelectedWarehousesController');\n            localStorage.setItem(Session.company.id + '::wholesaleDashboardSelectedWarehousesController', JSON.stringify(vm.selectedWarehouses));\n        }\n    }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('AnalyticsStartController', AnalyticsStartController);\n\n  /** @ngInject */\n  function AnalyticsStartController($state, $scope, $mdSidenav, $mdMedia, COMPANY_PLANS,\n                                    StartBannersData, Session, DASHBOARD_ITEM_TYPES, StartDashboardData) {\n\n    // Data\n    var vm = this;\n    vm.user = Session.user;\n    vm.data = StartDashboardData;\n    vm.banners = StartBannersData.results;\n    vm.date = new Date();\n    vm.DASHBOARD_ITEM_TYPES = DASHBOARD_ITEM_TYPES;\n\n    // Methods\n    vm.bannerClicked = bannerClicked;\n    vm.getBannerFlex = getBannerFlex;\n    vm.getBannerImage = getBannerImage;\n    vm.isFreemium = isFreemium;\n    vm.isSuperAdmin = isSuperAdmin;\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      if (vm.data.employees_working_list) {\n        vm.data.employees_working_list_str = vm.data.employees_working_list.sort(function(a, b) {\n          if (a.user__first_name < b.user__first_name) {\n            return -1;\n          }\n          if (a.user__first_name > b.user__first_name) {\n            return 1;\n          }\n          if (a.user__last_name < b.user__last_name) {\n            return -1;\n          }\n          if (a.user__last_name > b.user__last_name) {\n            return 1;\n          }\n          return 0;\n        }).map(function(user) {\n          return user.user__first_name + ' ' + user.user__last_name;\n        }).join(', ');\n      }\n    }\n\n    function isFreemium() {\n      return Session.company && Session.company.plan === COMPANY_PLANS.FREEMIUM;\n    }\n\n    function isSuperAdmin() {\n      return Session.company && !!Session.user.isSuperAdmin();\n    }\n\n    function bannerClicked(banner) {\n      if (banner.panel_sref) {\n        $state.go(banner.panel_sref);\n      } else if (banner.link) {\n        window.open(banner.link, '_blank').focus();\n      }\n    }\n\n    function getBannerFlex(banner) {\n      if ($mdMedia('xs') || $mdMedia('xs')) {\n        return banner.ui_flex_sm;\n      }\n      if ($mdMedia('xl')) {\n        return banner.ui_flex_xl;\n      }\n      return banner.ui_flex;\n    }\n\n    function getBannerImage(banner) {\n      if ($mdMedia('xs') || $mdMedia('xs')) {\n        return banner.image_sm;\n      }\n      if ($mdMedia('lg')) {\n        return banner.image_xl;\n      }\n      return banner.image;\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('SaleAnalyticsController', SaleAnalyticsController);\n\n  /** @ngInject */\n  function SaleAnalyticsController(DynamicReport, $filter, api, HTTP_STATUS) {\n\n    // Data\n    var vm = this;\n    vm.filters = [];\n    vm.dimensions = [];\n    vm.columnDimensions = [];\n    vm.metrics = [];\n    vm.dataLoaded = false;\n    vm.endpoint = api.analytics.salesDynamicReport;\n    vm.presets = [\n      getDefaultPreset(),\n      getSalesPreset(),\n      getSoldProductsPreset()\n    ];\n\n    // Methods\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      getMetaData()\n        .then(function() {\n          vm.dataLoaded = true;\n        })\n        .catch(function(error) {\n          console.error(error);\n        });\n    }\n\n    function getMetaData() {\n      return new Promise(function(resolve, reject) {\n        api.analytics.salesDynamicReport.get({\n          metadata: true\n        }, function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.filters = response.filters;\n            vm.dimensions = response.dimensions;\n            vm.columnDimensions = response.column_dimensions;\n            vm.metrics = response.metrics;\n            resolve();\n          } else {\n            reject('Error fetching metadata');\n          }\n        });\n      });\n    }\n\n    function getDefaultPreset() {\n      return new DynamicReport({\n        name: 'DYNAMIC_REPORTS.SALES_PRESET_DEFAULT',\n        trans: $filter('translate')('DYNAMIC_REPORTS.SALES_PRESET_DEFAULT'),\n        filters: [],\n        dimensions: [\n          'pos_order_source_warehouse'\n        ],\n        metrics: [\n          'pos_order_amount',\n          'pos_order_total'\n        ]\n      });\n    }\n\n    function getSalesPreset() {\n      return new DynamicReport({\n        name: 'DYNAMIC_REPORTS.SALES_PRESET_SALES',\n        trans: $filter('translate')('DYNAMIC_REPORTS.SALES_PRESET_SALES'),\n        filters: [],\n        dimensions: [\n          'pos_order_date',\n          'pos_order_source_warehouse',\n          'pos_order_register',\n          'pos_order_code',\n          'pos_order_customer_email',\n          'pos_order_seller_first_name',\n          'pos_order_seller_last_name'\n        ],\n        metrics: [\n          'pos_order_total',\n          'pos_order_subtotal',\n          'pos_order_amount',\n          'pos_order_total_cash',\n          'pos_order_total_credit_card',\n          'pos_order_other_payment_methods',\n          'pos_order_total_vouchers',\n        ]\n      });\n    }\n\n    function getSoldProductsPreset() {\n      return new DynamicReport({\n        name: 'DYNAMIC_REPORTS.SALES_PRESET_SOLD_PRODUCTS',\n        trans: $filter('translate')('DYNAMIC_REPORTS.SALES_PRESET_SOLD_PRODUCTS'),\n        filters: [],\n        dimensions: [\n          'pos_order_date',\n          'pos_order_source_warehouse',\n          'pos_order_register',\n          'pos_order_code',\n          'product_code',\n          'product_variant_color',\n          'product_variant_size',\n          'product_category',\n          'product_subcategory',\n          'product_brand',\n          'product_season',\n          'pos_order_vendor',\n          'pos_order_customer_email',\n          'pos_order_seller_first_name',\n          'pos_order_seller_last_name'\n        ],\n        metrics: [\n          'pos_order_total',\n          'pos_order_subtotal',\n          'pos_order_amount',\n          'pos_order_total_cash',\n          'pos_order_total_credit_card',\n          'pos_order_other_payment_methods',\n          'pos_order_total_vouchers'\n        ]\n      });\n    }\n  }\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.analytics')\n        .controller('AnalyticsRetailDashboardController', AnalyticsRetailDashboardController);\n\n    /** @ngInject */\n    function AnalyticsRetailDashboardController($filter, $state, $scope, $interval, $mdSidenav, $timeout, WarehousesData, Session,\n                                                WAREHOUSE_TYPES)\n    {\n\n        // Data\n        var vm = this;\n        vm.Session = Session;\n        vm.selectedWarehouses = $state.params.warehouseIds == undefined ? [] : ( $state.params.warehouseIds == \"\" ? [] : $state.params.warehouseIds.split(','));\n        vm.warehouses = WarehousesData.results;\n        vm.date = new Date();\n        vm.channels = null;\n        vm.selectedChannel = null;\n        vm.selectStoreTimeout = null;\n\n        // Methods\n        vm.selectChannel = selectChannel;\n        vm.changeTabToRealtime = changeTabToRealtime;\n        vm.changeTabToPerformance = changeTabToPerformance;\n        vm.changeTabToProducts = changeTabToProducts;\n        vm.changeTabToCategories = changeTabToCategories;\n        vm.initialize = initialize;\n        vm.contains = contains;\n        vm.toggle = toggle;\n        vm.exists = exists;\n\n        // Initialization\n        initialize();\n\n        // Functions\n        function initialize(){\n\n            vm.selectedWarehouses = $state.params.warehouseIds == undefined ? [] : ( $state.params.warehouseIds == \"\" ? [] : $state.params.warehouseIds.split(','));\n\n            vm.channels = [\n                {type: 'global', id: null, name: 'ALL_STORES', separator: true},\n            ];\n\n            vm.warehouses.map(function(warehouse){\n                if (warehouse.type === WAREHOUSE_TYPES.STORE) {\n                    var channel = {\n                        code:'store',\n                        id: warehouse.id,\n                        name: warehouse.name\n                    };\n                    vm.channels.push(channel);\n                    if(vm.selectedWarehouses.length==1 && vm.selectedWarehouses[0] == warehouse.id){\n                        vm.selectedChannel = channel;\n                    }\n                }\n            });\n\n            if(vm.selectedWarehouses.length == 0){\n                vm.selectedChannel = vm.channels[0];\n            }else if(vm.selectedWarehouses.length > 1){\n                vm.selectedChannel = null;\n            }\n        }\n\n        function selectChannel(channel){\n            vm.selectedChannel = channel;\n        }\n\n        function changeTabToRealtime(){\n            $state.go('app.analytics.retail_dashboard.realtime', {warehouseIds:vm.selectedWarehouses});\n        }\n\n        function changeTabToPerformance(){\n            $state.go('app.analytics.retail_dashboard.performance', {warehouseIds:vm.selectedWarehouses});\n        }\n\n        function changeTabToProducts(){\n            $state.go('app.analytics.retail_dashboard.products', {warehouseIds:vm.selectedWarehouses});\n        }\n\n        function changeTabToCategories(){\n            $state.go('app.analytics.retail_dashboard.categories', {warehouseIds:vm.selectedWarehouses});\n        }\n\n        function contains(warehouse) {\n            for (var i=0; i<vm.selectedWarehouses.length; i++) {\n              if (vm.selectedWarehouses[i] == warehouse) {\n                  return i;\n              }\n            }\n            return -1;\n        }\n\n        function exists(warehouse) {\n            return contains(warehouse) > -1;\n        }\n\n        function toggle(warehouse, tab) {\n            var index = contains(warehouse);\n            if (index > -1) {\n                vm.selectedWarehouses.splice(index, 1);\n            }\n            else {\n                vm.selectedWarehouses.push(warehouse);\n            }\n\n            if (!!vm.timeout) {\n                $timeout.cancel(vm.timeout);\n            }\n\n            vm.timeout = $timeout(function () {\n                vm.timeout = null;\n                if(tab === 'realtime'){\n                    $state.go('app.analytics.retail_dashboard.realtime', {warehouseIds:vm.selectedWarehouses});\n                }else if(tab === 'performance'){\n                    $state.go('app.analytics.retail_dashboard.performance', {warehouseIds:vm.selectedWarehouses});\n                }else if(tab === 'products'){\n                    $state.go('app.analytics.retail_dashboard.products', {warehouseIds:vm.selectedWarehouses});\n                }\n            }, 1000);\n\n            localStorage.removeItem(Session.company.id + '::retailDashboardSelectedWarehousesController');\n            localStorage.setItem(Session.company.id + '::retailDashboardSelectedWarehousesController', JSON.stringify(vm.selectedWarehouses));\n        }\n\n    }\n\n})();\n\n(function () {\n    'use strict';\n\n    angular\n      .module('app.analytics')\n      .controller('ReportsReportController', ReportsReportController);\n\n    /** @ngInject */\n    function ReportsReportController($mdSidenav, $state, $scope, $mdDateRangePicker, Session) {\n\n      $scope.Session = Session;\n\n      // Data\n      var vm = this;\n      vm.dateRange = {};\n      vm.reportTypes = {\n        INVENTORY_TITLE: {\n          type: 'title',\n          translate: 'REPORTS.INVENTORY',\n          permission: 'app.inventory',\n          buttons: {\n            CATALOG: {\n              type: 'button',\n              translate: 'REPORTS.CATALOG',\n              title: 'REPORTS.CATALOG',\n              icon: 'icon-tag-text-outline',\n              serf: 'app.analytics.report.catalog',\n              permission: 'app.analytics.report.catalog',\n              disabled: false\n            },\n            INVENTORY: {\n              type: 'button',\n              translate: 'REPORTS.INVENTORY',\n              title: 'REPORTS.INVENTORY',\n              icon: 'icon-package-variant',\n              serf: 'app.analytics.report.inventory',\n              permission: 'app.analytics.report.inventory',\n              disabled: false\n            },\n            INVOICES: {\n              type: 'button',\n              translate: 'REPORTS.INVOICES',\n              title: 'REPORTS.INVOICES',\n              icon: 'icon-receipt',\n              serf: 'app.analytics.report.invoices',\n              permission: 'app.analytics.report.invoices',\n              disabled: false\n            },\n\n            PURCHASE_ORDERS: {\n              type: 'button',\n              translate: 'REPORTS.PURCHASES',\n              title: 'REPORTS.PURCHASES',\n              icon: 'icon-basket-fill',\n              serf: 'app.analytics.report.purchase-orders',\n              permission: 'app.analytics.report.purchase-orders',\n              disabled: false\n            },\n\n            TRANSFER_ORDERS: {\n              type: 'button',\n              translate: 'REPORTS.TRANSFERS',\n              title: 'REPORTS.TRANSFERS',\n              icon: 'icon-truck',\n              serf: 'app.analytics.report.transfer-orders',\n              permission: 'app.analytics.report.transfer-orders',\n              disabled: false\n            },\n\n            WORKDAYS: {\n              type: 'button',\n              translate: 'REPORTS.WORKDAYS',\n              title: 'REPORTS.WORKDAYS',\n              icon: 'icon-clock',\n              serf: 'app.analytics.report.workdays',\n              permission: 'app.analytics.report.workdays',\n              disabled: false\n            },\n            STOCK_MOVEMENTS: {\n              type: 'button',\n              translate: 'REPORTS.STOCK_MOVEMENTS',\n              title: 'REPORTS.STOCK_MOVEMENTS',\n              icon: 'icon-truck',\n              serf: 'app.analytics.report.stock-movements',\n              permission: 'app.analytics.report.stock-movements',\n              disabled: false\n            },\n            UID_STOCK: {\n              type: 'button',\n              translate: 'REPORTS.UID_STOCK',\n              title: 'REPORTS.UID_STOCK',\n              icon: 'icon-package-variant',\n              serf: 'app.analytics.report.uid-stock',\n              permission: 'app.analytics.report.uid-stock',\n              disabled: false\n            },\n            UID_STOCK_MOVEMENTS: {\n              type: 'button',\n              translate: 'REPORTS.UID_STOCK_MOVEMENTS',\n              title: 'REPORTS.UID_STOCK_MOVEMENTS',\n              icon: 'icon-truck',\n              serf: 'app.analytics.report.uid-stock-movements',\n              permission: 'app.analytics.report.uid-stock-movements',\n              disabled: false\n            },\n          },\n        },\n        WHOLESALE_TITLE: {\n          type: 'title',\n          translate: 'REPORTS.WHOLESALE',\n          permission: 'app.wholesale',\n          buttons: {\n\n            WHOLESALE_SALES: {\n              type: 'button',\n              translate: 'REPORTS.WHOLESALE_SALES',\n              title: 'REPORTS.WHOLESALE_SALES',\n              icon: 'icon-basket',\n              serf: 'app.analytics.report.wholesale-sales',\n              permission: 'app.analytics.report.wholesale-sales',\n              disabled: false\n            },\n\n            WHOLESALE_PRODUCTS_SOLD: {\n              type: 'button',\n              translate: 'REPORTS.WHOLESALE_PRODUCTS_SOLD',\n              title: 'REPORTS.WHOLESALE_PRODUCTS_SOLD',\n              icon: 'icon-package-variant',\n              serf: 'app.analytics.report.wholesale-products-sold',\n              permission: 'app.analytics.report.wholesale-products-sold',\n              disabled: false\n            },\n\n            WHOLESALE_DELIVERY_NOTES: {\n              type: 'button',\n              translate: 'REPORTS.WHOLESALE_DELIVERY_NOTES',\n              title: 'REPORTS.WHOLESALE_DELIVERY_NOTES',\n              icon: 'icon-truck',\n              serf: 'app.analytics.report.wholesale-delivery-notes',\n              permission: 'app.analytics.report.wholesale-delivery-notes',\n              disabled: false\n            },\n\n            WHOLESALE_TRANSACTIONS: {\n              type: 'button',\n              translate: 'REPORTS.WHOLESALE_TRANSACTIONS',\n              title: 'REPORTS.WHOLESALE_TRANSACTIONS',\n              icon: 'icon-package-variant',\n              serf: 'app.analytics.report.wholesale-transactions',\n              permission: 'app.analytics.report.wholesale-transactions',\n              disabled: false\n            },\n\n            WHOLESALE_CUSTOMERS: {\n              type: 'button',\n              translate: 'REPORTS.CUSTOMERS',\n              title: 'REPORTS.CUSTOMERS',\n              icon: 'icon-account-multiple',\n              serf: 'app.analytics.report.wholesale-customers',\n              permission: 'app.analytics.report.wholesale-customers',\n              disabled: false\n            }\n          }\n        },\n        RETAIL_TITLE: {\n          type: 'title',\n          translate: 'REPORTS.RETAIL_AND_ECOMMERCE',\n          permission: 'app.sale',\n          buttons: {\n\n            /*TOP_SELLERS: {\n              type: 'button',\n              translate: 'REPORTS.TOP_SELLERS',\n              title: 'Top Sellers',\n              icon: 'icon-receipt',\n              serf: 'app.analytics.report.top-sellers',\n              permission: 'app.analytics.report.top-sellers',\n              disabled: true\n            },*/\n            CASH_MOVEMENT: {\n              type: 'button',\n              translate: 'REPORTS.CASH_MOVEMENT',\n              title: 'REPORTS.CASH_MOVEMENT',\n              icon: 'icon-outbox',\n              serf: 'app.analytics.report.cash-movement',\n              permission: 'app.analytics.report.cash-movement',\n              disabled: false\n            },\n            TICKETS: {\n              type: 'button',\n              translate: 'REPORTS.SALES',\n              title: 'REPORTS.SALES',\n              icon: 'icon-basket',\n              serf: 'app.analytics.report.tickets',\n              permission: 'app.analytics.report.tickets',\n              disabled: false\n            },\n            RETAIL_TRANSACTIONS: {\n              type: 'button',\n              translate: 'REPORTS.PRODUCTS_SOLD',\n              title: 'REPORTS.PRODUCTS_SOLD',\n              icon: 'icon-package-variant',\n              serf: 'app.analytics.report.retail-transactions',\n              permission: 'app.analytics.report.retail-transactions',\n              disabled: false\n            },\n            PRODUCTS_STATUS: {\n              type: 'button',\n              translate: 'REPORTS.PRODUCTS_STATUS',\n              title: 'REPORTS.PRODUCTS_STATUS',\n              svgIcon: 'assets/images/custom-material-design-icons/calendar-product.fbd1033d.svg',\n              serf: 'app.analytics.report.product-status',\n              permission: 'app.analytics.report.product-status',\n              disabled: false\n            },\n            PAYMENTS: {\n              type: 'button',\n              translate: 'REPORTS.PAYMENTS',\n              title: 'REPORTS.PAYMENTS',\n              icon: 'icon-cash-multiple',\n              serf: 'app.analytics.report.payments',\n              permission: 'app.analytics.report.payments',\n              disabled: false\n            },\n            SELLER_TRANSACTIONS: {\n              type: 'button',\n              translate: 'REPORTS.SELLER_TRANSACTIONS',\n              title: 'REPORTS.SELLER_TRANSACTIONS',\n              icon: 'icon-chart-pie',\n              serf: 'app.analytics.report.seller-transactions',\n              permission: 'app.analytics.report.seller-transactions',\n              disabled: false\n            },\n\n            RETAIL_CUSTOMERS: {\n              type: 'button',\n              translate: 'REPORTS.CUSTOMERS',\n              title: 'REPORTS.CUSTOMERS',\n              icon: 'icon-account-multiple',\n              serf: 'app.analytics.report.retail-customers',\n              permission: 'app.analytics.report.retail-customers',\n              disabled: false\n            },\n\n            DAILY_BILLINGS: {\n              type: 'button',\n              translate: 'REPORTS.DAILY_BILLINGS',\n              title: 'REPORTS.DAILY_BILLINGS',\n              icon: 'icon-calendar-today',\n              serf: 'app.analytics.report.daily-billings',\n              permission: 'app.analytics.report.taxes',\n              disabled: false\n            },\n\n            REGISTER_CLOSURES: {\n              type: 'button',\n              translate: 'REPORTS.REGISTER_CLOSURES',\n              title: 'REPORTS.REGISTER_CLOSURES',\n              icon: 'icon-script',\n              serf: 'app.analytics.report.register-closures',\n              permission: 'app.analytics.report.register-closures',\n              disabled: false\n            },\n            TAXES: {\n              type: 'button',\n              translate: 'REPORTS.TAXES',\n              title: 'REPORTS.TAXES',\n              icon: 'icon-bank',\n              serf: 'app.analytics.report.taxes',\n              permission: 'app.analytics.report.taxes',\n              disabled: false\n            },\n            STOCK_REPLENISHMENT: {\n              type: 'button',\n              translate: 'REPORTS.STOCK_REPLENISHMENT',\n              title: 'REPORTS.STOCK_REPLENISHMENT',\n              icon: 'icon-truck',\n              serf: 'app.analytics.report.stock-replenishment',\n              permission: 'app.analytics.report.stock-replenishment',\n              disabled: false\n            }\n          }\n        }\n      };\n\n      vm.currentOption = vm.reportTypes.RETAIL_SALES;\n      vm.downloading = false;\n\n\n      // Methods\n      vm.toggleSidenav = toggleSidenav;\n      vm.goTo = goTo;\n      vm.isActive = isActive;\n      vm.createClicked = createClicked;\n      vm.download = download;\n      vm.downloadReport = null;\n      vm.filterData = null;\n      vm.checkboxValue = null;\n      vm.checkboxName = null;\n      vm.filterDates = filterDates;\n      vm.toggleCheckboxValue = toggleCheckboxValue;\n      vm.showHeaderItems = showHeaderItems;\n      // Functions\n      function toggleSidenav(sidenavId) {\n        $mdSidenav(sidenavId).toggle();\n      }\n\n      function goTo(newOption) {\n        vm.currentOption = newOption;\n        $state.go(vm.currentOption.serf);\n      }\n\n      function showHeaderItems(title){\n        if (!title){\n          return false;\n        }\n        else{\n            if (title == \"REPORTS.TAXES\"){\n              return false;\n            }\n            if (title == \"REPORTS.DAILY_BILLINGS\"){\n              return false;\n            }\n            if (title == \"REPORTS.REGISTER_CLOSURES\"){\n              return false;\n            }\n            if (title == \"REPORTS.PRODUCTS_STATUS\"){\n              return false;\n            }\n            if (title == \"REPORTS.PRODUCTS_SOLD\"){\n              return false;\n            }\n            if (title == \"REPORTS.ECOMMERCE_SALES\"){\n              return false;\n            }\n            if (title == \"REPORTS.CASH_MOVEMENT\"){\n              return false;\n            }\n            if (title == \"REPORTS.WHOLESALE_SALES\"){\n              return false;\n            }\n            if (title == \"REPORTS.WHOLESALE_PRODUCTS_SOLD\"){\n              return false;\n            }\n            return true;\n        }\n      }\n\n      function isActive(option) {\n        return option == vm.currentOption;\n      }\n\n      function createClicked() {\n        $scope.$broadcast('createClicked');\n      }\n\n      function filterDates() {\n\n        $mdDateRangePicker.show({\n          model: vm.dateRange,\n        }).then(function (result) {\n          vm.dateRange = result;\n          vm.filterData(result);\n\n        }).catch(function () {\n          console.log('Cancelled');\n        });\n\n      }\n\n      function download(fileFormat) {\n        vm.downloadReport(fileFormat);\n      }\n\n      function toggleCheckboxValue() {\n        vm.checkboxValue = !vm.checkboxValue;\n      }\n    }\n  }\n\n)();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ProductAnalyticsController', ProductAnalyticsController);\n\n  /** @ngInject */\n  function ProductAnalyticsController(DynamicReport, api, $filter, HTTP_STATUS) {\n\n    // Data\n    var vm = this;\n    vm.filters = [];\n    vm.dimensions = [];\n    vm.columnDimensions = [];\n    vm.metrics = [];\n    vm.metricHeaders = {};\n    vm.dataLoaded = false;\n    vm.endpoint = api.analytics.productsDynamicReport;\n\n    // Initialize presets (each one is a DynamicReport)\n    vm.presets = [];\n    vm.staticPresetFilters = {};\n    addPresets();\n\n    // Methods\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      getMetaData()\n        .then(function() {\n          vm.dataLoaded = true;\n        })\n        .catch(function(error) {\n          console.error(error);\n        });\n    }\n\n    function getMetaData() {\n      return new Promise(function(resolve, reject) {\n        api.analytics.productsDynamicReport.get({ metadata: true }, function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.filters = response.filters;\n            vm.dimensions = response.dimensions;\n            vm.columnDimensions = response.column_dimensions;\n            vm.metrics = response.metrics;\n            vm.metricHeaders = response.metric_headers;\n            resolve();\n          } else {\n            reject('Error fetching metadata');\n          }\n        });\n      });\n    }\n\n    // --- Presets unified definition ---\n    function addPresets() {\n      var PRESET_DEFS = [\n        {\n          code: 'PRESET_PRODUCTS',\n          dimensions: [\n            'product_cover_thumbnail',\n            'product_code',\n            'product_name',\n            'product_brand',\n            'product_category',\n            'product_subcategory',\n            'product_season',\n            'product_provider'\n          ],\n          columnDimensions: [],\n          metrics: [\n            'stock_available_on_hand',\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_PRODUCT_VARIANTS',\n          dimensions: [\n            'product_cover_thumbnail',\n            'product_code',\n            'product_name',\n            'product_brand',\n            'product_category',\n            'product_subcategory',\n            'product_season',\n            'product_provider',\n            'product_variant_name',\n            'product_variant_sku',\n            'product_variant_barcode'\n          ],\n          columnDimensions: [],\n          metrics: [\n            'stock_available_on_hand',   // current available stock\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_PURCHASE_ORDERS',\n          dimensions: [\n            'purchase_order_code', 'purchase_order_status_name',\n            'purchase_order_provider', 'purchase_order_target_warehouse',\n            'purchase_order_ordered_at', 'purchase_order_received_at'\n          ],\n          metrics: [\n            'purchase_order_ordered_amount',\n            'purchase_order_received_amount',\n            'purchase_order_pending_to_receive_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_PURCHASE_ORDERS_BY_PROVIDER',\n          dimensions: [\n            'purchase_order_provider',\n          ],\n          metrics: [\n            'purchase_order_ordered_amount',\n            'purchase_order_received_amount',\n            'purchase_order_pending_to_receive_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_PURCHASE_ORDERS_BY_PRODUCT',\n          dimensions: [\n            'product_code', 'product_name'\n          ],\n          metrics: [\n            'purchase_order_ordered_amount',\n            'purchase_order_received_amount',\n            'purchase_order_pending_to_receive_amount'\n          ],\n          filters: [],\n          sorts: [\n            { field: 'product_code', direction: 'asc' }\n          ]\n        },\n        {\n          code: 'PRESET_TRANSFER_ORDERS',\n          dimensions: [\n            'transfer_order_code', 'transfer_order_status_name',\n            'transfer_order_source_warehouse', 'transfer_order_target_warehouse',\n            'transfer_order_created_at', 'transfer_order_ordered_at',\n            'transfer_order_shipped_at', 'transfer_order_received_at'\n          ],\n          metrics: [\n            'transfer_order_draft_amount', 'transfer_order_ordered_amount',\n            'transfer_order_prepared_amount', 'transfer_order_shipped_amount',\n            'transfer_order_received_amount', 'transfer_order_discrepancies_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_SALE_ORDERS',\n          dimensions: [\n            'sale_order_code', 'sale_order_status_name',\n            'sale_order_customer', 'sale_order_sales_agent',\n            'sale_order_source_warehouse', 'sale_order_ordered_at'\n          ],\n          metrics: [\n            'sale_order_draft_amount', 'sale_order_ordered_amount',\n            'sale_order_prepared_amount', 'sale_order_shipped_amount',\n            'sale_order_received_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_SALE_ORDERS_BY_PRODUCT',\n          dimensions: [\n            'product_cover_thumbnail',\n            'product_code',\n            'product_name'\n          ],\n          columnDimensions: [],\n          metrics: [\n            'sale_order_ordered_amount',\n            'sale_order_shipped_amount',\n            'sale_order_received_amount',\n          ],\n          filters: [\n            //{ name: 'sale_order_ordered_amount', type: 'int', operation: 'gt', value: 0 }\n          ],\n          sorts: [\n            //{ field: 'sale_order_total', direction: 'desc' }\n          ]\n        },\n        {\n          code: 'PRESET_SALE_ORDERS_BY_CUSTOMER',\n          dimensions: [\n            'sale_order_customer',\n          ],\n          columnDimensions: [],\n          metrics: [\n            'sale_order_ordered_amount',\n            'sale_order_shipped_amount',\n            'sale_order_received_amount',\n          ],\n          filters: [\n            //{ name: 'sale_order_ordered_amount', type: 'int', operation: 'gt', value: 0 }\n          ],\n          sorts: [\n            //{ field: 'sale_order_total', direction: 'desc' }\n          ]\n        },\n        {\n          code: 'PRESET_POS_ORDERS',\n          dimensions: [\n            'pos_order_code', 'pos_order_date',\n            'pos_order_register',\n            'pos_order_seller_username'\n          ],\n          metrics: [\n            'pos_order_amount', 'pos_order_subtotal',\n            'pos_order_total', 'pos_order_cost',\n            'pos_order_margin'\n          ],\n          filters: [\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'week').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            { field: 'pos_order_date',  direction: 'desc' },\n          ]\n        },\n        // Advanced entities\n        {\n          code: 'PRESET_RETAIL_SALES_BY_PRODUCT',\n          dimensions: ['product_cover_thumbnail', 'product_code', 'product_name'],\n          // NOTE: \"inventory cost value\" does not exist as a metric.\n          // Using product_cost_price as dimension (unit cost).\n          columnDimensions: [],\n          metrics: [\n            'purchase_order_received_amount',    // units received\n            'stock_available_on_hand',           // stock available\n            'pos_order_amount',                  // sold units (retail)\n            'pos_order_total',                   // sold total retail (€ incl. VAT)\n            'pos_order_cost',                    // retail cost (€)\n            'pos_order_margin',                  // retail margin (€)\n            //'sale_order_shipped_amount',         // sold units wholesale [no € metric available]\n            'pos_order_sell_through'             // sell-through % (retail vs received purchase)\n          ],\n          // Filter: sales >= 1 (retail only)\n          filters: [\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'week').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            //{ field: 'pos_order_amount', direction: 'desc' }\n          ]\n        },\n\n        // --- SALES BY PRODUCT AND STORE ---\n        {\n          code: 'PRESET_RETAIL_SALES_BY_PRODUCT_AND_STORE',\n          dimensions: ['product_cover_thumbnail', 'product_code', 'product_name', 'stock_warehouse'],\n          columnDimensions: [],\n          metrics: [\n            'stock_available_on_hand',\n            'pos_order_amount',\n            'pos_order_total',\n            'pos_order_cost',\n            'pos_order_margin'\n          ],\n          filters: [\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'week').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            //{ field: 'pos_order_amount', direction: 'desc' }\n          ]\n        },\n\n        // --- PRODUCTS WITH STOCK AND NO SALES ---\n        {\n          code: 'PRESET_RETAIL_PRODUCTS_WITH_STOCK_NO_SALES',\n          dimensions: ['product_cover_thumbnail', 'product_code', 'product_name'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'pos_order_amount'],\n          // Filters: stock >= 1 and sales = 0\n          filters: [\n            { name: 'stock_available_on_hand', type: 'int', operation: 'gt', value: 0 },\n            { name: 'pos_order_amount', type: 'int', operation: 'eq', value: 0 },\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'month').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            { field: 'stock_available_on_hand', direction: 'desc' }\n          ]\n        },\n\n        // --- PRODUCTS WITH STOCK AND NO SALES BY STORE ---\n        {\n          code: 'PRESET_RETAIL_PRODUCTS_WITH_STOCK_NO_SALES_BY_STORE',\n          dimensions: ['product_cover_thumbnail', 'product_code', 'product_name', 'product_variant_name','stock_warehouse'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'pos_order_amount'],\n          filters: [\n            { name: 'stock_available_on_hand', type: 'int', operation: 'gt', value: 0 },\n            { name: 'pos_order_amount', type: 'int', operation: 'eq', value: 0 },\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'month').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            { field: 'stock_available_on_hand', direction: 'desc' }\n          ]\n        },\n\n        // --- PRODUCTS STOCK OUT (STOCKOUTS) ---\n        {\n          code: 'PRESET_RETAIL_PRODUCTS_STOCK_OUT',\n          dimensions: ['product_cover_thumbnail', 'product_code', 'product_name'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'pos_order_amount', 'pos_order_total'],\n          // Sales > 0 and stock = 0\n          filters: [\n            { name: 'pos_order_amount', type: 'int', operation: 'gt', value: 0 },\n            { name: 'stock_available_on_hand', type: 'int', operation: 'eq', value: 0 },\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'month').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            { field: 'pos_order_amount', direction: 'desc' }\n          ]\n        },\n\n        // --- PRODUCTS PRODUCTS STOCK OUT BY STORE ---\n        {\n          code: 'PRESET_PRODUCTS_STOCK_OUT_BY_STORE',\n          dimensions: ['product_cover_thumbnail', 'product_code', 'product_name', 'stock_warehouse'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'pos_order_amount', 'pos_order_total'],\n          filters: [\n            { name: 'pos_order_amount', type: 'int', operation: 'gt', value: 0 },\n            { name: 'stock_available_on_hand', type: 'int', operation: 'eq', value: 0 },\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'month').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            { field: 'pos_order_amount', direction: 'desc' }\n          ]\n        },\n\n        // --- STOCK REPORT ---\n        {\n          code: 'PRESET_STOCK_BY_PRODUCT',\n          dimensions: ['product_cover_thumbnail', 'product_code', 'product_name'],\n          columnDimensions: [], // unit cost as dimension\n          metrics: [\n            'stock_available_on_hand', 'stock_cost',\n            // TODO: inventory cost value = stock * cost (not available yet)\n            // TODO: tariffs (retail prices with/without VAT, discounts) also missing\n          ],\n          filters: [\n             //{ name: 'stock_available_on_hand', type: 'int', operation: 'neq', value: 0 }\n          ],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_PRODUCT_AND_WAREHOUSE',\n          dimensions: [\n            'product_code',\n            'product_name',\n            'stock_warehouse'\n          ],\n          columnDimensions: [],\n          metrics: [\n            'stock_available_on_hand', 'stock_cost',\n          ],\n          filters: [\n            //{ name: 'stock_available_on_hand', type: 'int', operation: 'neq', value: 0 }\n          ],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_PRODUCT_VARIANT',\n          dimensions: [\n            'product_code',\n            'product_name',\n            'product_variant_color'\n          ],\n          columnDimensions: [\n            'product_variant_size'\n          ],\n          metrics: [\n            'stock_available_on_hand', 'stock_cost',\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_PRODUCT_VARIANT_AND_WAREHOUSE',\n          dimensions: [\n            'product_code',\n            'product_name',\n            'product_variant_color',\n            'stock_warehouse'\n          ],\n          columnDimensions: [\n            'product_variant_size'\n          ],\n          metrics: [\n            'stock_available_on_hand', 'stock_cost',\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_SEASON',\n          dimensions: ['product_season'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'stock_cost'],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_CATEGORY',\n          dimensions: ['product_category'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'stock_cost'],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_CATEGORY_AND_SUBCATEGORY',\n          dimensions: ['product_category', 'product_subcategory'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'stock_cost'],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_BRAND',\n          dimensions: ['product_brand'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'stock_cost'],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_WAREHOUSE',\n          dimensions: ['stock_warehouse'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'stock_cost'],\n          filters: [],\n          sorts: []\n        },\n\n        // --- ROI REPORT BY PRODUCT ---\n        {\n          code: 'PRESET_ROI_REPORT_BY_PRODUCT',\n          dimensions: ['product_code', 'product_name'],\n          columnDimensions: [],\n          metrics: [\n            'purchase_order_received_amount',\n            'purchase_order_received_cost',\n            'pos_order_amount',\n            'pos_order_subtotal',\n            'pos_order_sell_through',\n            'return_on_investment',\n          ],\n          filters: [\n            //{ name: 'purchase_order_received_amount', type: 'int', operation: 'gt', value: 0 }\n          ],\n          sorts: [\n            { field: 'product_code', direction: 'asc' }\n          ]\n        },\n\n        // --- ROI REPORT BY SUPPLIER ---\n        {\n          code: 'PRESET_ROI_REPORT_BY_SUPPLIER',\n          dimensions: ['product_provider'], // group by supplier\n          columnDimensions: [],\n          metrics: [\n            'purchase_order_received_amount',\n            'purchase_order_received_cost',\n            'pos_order_amount',\n            'pos_order_subtotal',\n            'pos_order_sell_through',\n            'return_on_investment',\n          ],\n          filters: [\n            //{ name: 'purchase_order_received_amount', type: 'int', operation: 'gt', value: 0 }\n          ],\n          sorts: []\n        },\n\n        // --- LOCATIONS REPORT BY PRODUCT ---\n        //{\n        //  code: 'PRESET_LOCATIONS_BY_PRODUCT',\n        //  dimensions: ['product_code', 'product_name', 'stock_warehouse'],\n        //  metrics: ['stock_available_on_hand'],\n        //  filters: [],\n        //  sorts: []\n        //},\n\n        // --- PRODUCTION ---\n        {\n          code: 'PRESET_PRODUCTION_ORDERS',\n          dimensions: [\n            'production_order_code',\n            'production_order_status_name',\n            'production_order_season',\n            'production_order_ordered_at',\n            'production_order_produced_at'\n          ],\n          metrics: [\n            'production_order_ordered_amount',\n            'production_order_produced_amount',\n            'production_order_pending_to_produce_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_PRODUCTION_PIPELINE',\n          dimensions: ['product_code', 'product_name'],\n          columnDimensions: [],\n          metrics: [\n            'production_order_ordered_amount',\n            'production_order_produced_amount',\n            'production_order_pending_to_produce_amount'\n          ],\n          filters: [{ name: 'production_order_pending_to_produce_amount', type: 'int', operation: 'gt', value: 0 }],\n          sorts: []\n        },\n        {\n          code: 'PRESET_PRODUCTION_BY_PRODUCT',\n          dimensions: ['product_code', 'product_name'],\n          columnDimensions: [],\n          metrics: [\n            'production_order_ordered_amount',\n            'production_order_produced_amount',\n            'production_order_pending_to_produce_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n\n        // --- ADJUSTMENTS ---\n        {\n          code: 'PRESET_ADJUSTMENT_ORDERS',\n          dimensions: [\n            'adjustment_order_code',\n            'adjustment_order_status_name',\n            'adjustment_order_source_warehouse',\n            'adjustment_order_ordered_at',\n            'adjustment_order_ordered_by'\n          ],\n          metrics: [\n            'adjustment_order_adjusted_in_amount',\n            'adjustment_order_adjusted_out_amount',\n            'adjustment_order_adjusted_net_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_ADJUSTMENTS_BY_PRODUCT',\n          dimensions: ['product_code', 'product_name'],\n          columnDimensions: [],\n          metrics: [\n            'adjustment_order_adjusted_in_amount',\n            'adjustment_order_adjusted_out_amount',\n            'adjustment_order_adjusted_net_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_ADJUSTMENTS_BY_WAREHOUSE',\n          dimensions: ['adjustment_order_source_warehouse'],\n          metrics: [\n            'adjustment_order_adjusted_in_amount',\n            'adjustment_order_adjusted_out_amount',\n            'adjustment_order_adjusted_net_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_LAST_MOVEMENTS',\n          dimensions: [\n            'stock_movement_datetime',\n            'stock_movement_user',\n            'product_code',\n            'product_name',\n            'product_variant_name',\n            'stock_movement_warehouse',\n            'stock_movement_autocode',\n            'stock_movement_type',\n            'stock_movement_reason',\n            'stock_movement_notes'\n          ],\n          metrics: [\n            'stock_movement_net_units' // signed units (+/-)\n          ],\n          filters: [\n            // Tip: you can prefill a time window in the UI (e.g., last 7 days)\n            // { name: 'date_start', type: 'date', operation: 'eq', value: '2025-09-20' }\n          ],\n          sorts: []\n        },\n        {\n          code: 'PRESET_MOVEMENTS_BY_PRODUCT',\n          dimensions: [\n            'product_code',\n            'product_name',\n            'product_variant_name',\n            'stock_movement_type',\n          ],\n          metrics: [\n            'stock_movement_net_units'\n          ],\n          filters: [],\n          sorts: []\n        },\n        // --- MOVEMENTS BY USER (who’s moving what)\n        {\n          code: 'PRESET_MOVEMENTS_BY_USER',\n          dimensions: [\n            'stock_movement_user',\n            'stock_movement_type',\n          ],\n          columnDimensions: [\n            // Optional: surface product context if you want to drill down\n            // 'movement_product_code', 'movement_product_name'\n          ],\n          metrics: [\n            'stock_movement_net_units'  // net balance\n          ],\n          filters: [\n            // Example filters (optional):\n            // { name: 'stock_movement_user_ids', type: 'int', operation: 'in', value: [123,456] },\n            // { name: 'warehouse_ids', type: 'int', operation: 'in', value: [1,2,3] }\n          ],\n          sorts: []\n        },\n        {\n          code: 'PRESET_RETAIL_SALES_BY_SELLER',\n          dimensions: [\n            'pos_order_seller_first_name',\n            'pos_order_seller_last_name',\n            'pos_order_register',\n            'pos_order_site'\n          ],\n          columnDimensions: [],\n          metrics: [\n            'pos_order_amount',  // units\n            'pos_order_total',   // € incl. VAT\n          ],\n          filters: [\n            //{ name: 'pos_order_amount', type: 'int', operation: 'gt', value: 0 }\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'month').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            //{ field: 'pos_order_total', direction: 'desc' }\n          ]\n        },\n        {\n          code: 'PRESET_RETAIL_SALES_BY_SELLER_AND_MONTH',\n          dimensions: [\n            'pos_order_year',\n            'pos_order_month',\n            'pos_order_seller_first_name',\n            'pos_order_seller_last_name',\n            'pos_order_register'\n          ],\n          columnDimensions: [],\n          metrics: [\n            'pos_order_amount',  // units\n            'pos_order_total',   // € incl. VAT\n            'pos_order_cost',    // € cost\n            'pos_order_margin'   // € margin\n          ],\n          filters: [\n            //{ name: 'pos_order_amount', type: 'int', operation: 'gt', value: 0 }\n          ],\n          sorts: [\n            { field: 'pos_order_year',  direction: 'desc' },\n            { field: 'pos_order_month', direction: 'desc' },\n          ]\n        },\n        {\n          code: 'PRESET_RETAIL_SALES_BY_SELLER_AND_DAY',\n          dimensions: [\n            'pos_order_date',\n            'pos_order_seller_first_name',\n            'pos_order_seller_last_name',\n            'pos_order_register'\n          ],\n          columnDimensions: [],\n          metrics: [\n            'pos_order_amount',\n            'pos_order_total',\n            'pos_order_cost',\n            'pos_order_margin'\n          ],\n          filters: [\n            //{ name: 'pos_order_amount', type: 'int', operation: 'gt', value: 0 }\n          ],\n          sorts: [\n            { field: 'pos_order_date',  direction: 'desc' },\n            //{ field: 'pos_order_total', direction: 'desc' }\n          ]\n        }\n      ];\n\n      PRESET_DEFS.forEach(function(def) {\n        vm.presets.push(new DynamicReport({\n          name: 'DYNAMIC_REPORTS.' + def.code,\n          trans: $filter('translate')('DYNAMIC_REPORTS.' + def.code),\n          filters: def.filters || [],          // array of plain filter objects\n          dimensions: def.dimensions,\n          columnDimensions: def.columnDimensions || [],\n          metrics: def.metrics,\n          sorts: def.sorts || []\n        }));\n      });\n    }\n  }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.analytics')\n        .controller('AnalyticsInventoryController', AnalyticsInventoryController);\n\n    /** @ngInject */\n    function AnalyticsInventoryController($scope, Session)\n    {\n\n        // Data\n        var vm = this;\n        vm.date = new Date();\n        $scope.$parent.vm.currentNavItem = \"\";\n\n        // Methods\n\n        vm.isABCAnalysisEnabled = isABCAnalysisEnabled;\n        vm.isReplenishmentsEnabled = isReplenishmentsEnabled;\n\n        // Initialization\n        // initialize();\n\n        // Functions\n        function initialize(){\n\n        }\n\n        function isABCAnalysisEnabled(){\n          return Session.company.has_inventory_analytics;\n        }\n\n        function isReplenishmentsEnabled(){\n          return Session.company.has_inventory_analytics;\n        }\n    }\n\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.analytics')\n        .controller('AnalyticsHealthController', AnalyticsHealthController);\n\n    /** @ngInject */\n    function AnalyticsHealthController($scope)\n    {\n        // Data\n        var vm = this;\n        vm.date = new Date();\n        $scope.$parent.vm.currentNavItem = '';\n    }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.accounting')\n    .controller('PaymentsController', PaymentsController);\n\n  /** @ngInject */\n  function PaymentsController($scope, $mdDateRangePicker, $mdMedia, $state, $mdSidenav, $document, $http, $timeout, $filter, $compile, $mdDialog, api,\n                              Session, SEARCH_MAX_LENGTH, DTColumnBuilder, $translate)\n  {\n    var vm = this;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Dataapi\n    vm.timeout = null;\n    vm.dtInstance = {};\n    vm.selected = [];\n    vm.toggle = toggle;\n    vm.sidenavLockedOpen = true;\n    vm.filter = '';\n    vm.dateRange = {};\n    vm.waiting = false;\n    vm.dtOptions = {\n      ajax        : {\n        dataSrc: \"data\",\n        url: api.urls.accounting.payments.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function(d){\n          d.pagination = 'datatable';\n          d.dateStart = vm.dateRange.dateStart ? vm.dateRange.dateStart.getTime() : '';\n          d.dateEnd = vm.dateRange.dateEnd ? vm.dateRange.dateEnd.getTime() : '';\n        }\n      },\n      order: [[ 1, 'desc' ]],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      headerCallback: headerCallback,\n      initComplete: initComplete,\n      pagingType  : 'full_numbers',\n      lengthMenu  : [25, 50, 100],\n      pageLength  : 50,\n      scrollY     : 'auto',\n      responsive  : true,\n      serverSide  : true,\n      processing  : true,\n      searchDelay : 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      },\n      stateSave: true,\n      stateSaveCallback: function (settings, data) {\n        if(vm.dateRange.dateStart){\n          data.dateStart = vm.dateRange.dateStart.getTime();\n        }\n        if(vm.dateRange.dateEnd){\n          data.dateEnd = vm.dateRange.dateEnd.getTime();\n        }\n        localStorage.setItem(Session.company.id + '::dataTablePaymentsController', JSON.stringify(data));\n      },\n      stateLoadCallback: function (settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTablePaymentsController'));\n        if (state) {\n          if(state.dateStart){\n            vm.dateRange.dateStart = new Date(state.dateStart);\n          }\n          if(state.dateEnd){\n            vm.dateRange.dateEnd = new Date(state.dateEnd);\n          }\n          if (state.search && state.search.search) {\n            vm.search = state.search.search;\n          }\n          vm.filter = state.columns[0].search.search;\n        }\n        return state;\n      }\n    };\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('id').notVisible(),\n      DTColumnBuilder.newColumn('date').withTitle($filter('translate')('PAYMENTS.DATE'))\n      .renderWith(function(data, type, full) {\n        return $filter('date')(data, 'dd/MM/yy');\n      }),\n      DTColumnBuilder.newColumn('amount').withTitle($filter('translate')('PAYMENTS.AMOUNT'))\n        .renderWith(function(data, type, full) {\n          if(data < 0){\n            return '<div class=\"text-center red-500-fg\">' + data + vm.currencyCharacter + '</div>';\n          }else{\n            return '<div class=\"text-center green-500-fg\">' + data + vm.currencyCharacter + '</div>';\n          }\n        }),\n      DTColumnBuilder.newColumn('payment_method__name').withTitle($filter('translate')('PAYMENTS.PAYMENT_METHOD'))\n        .renderWith(function(data, type, full) {\n          if (full.payment_method_instance){\n            return full.payment_method_instance.name;\n          }\n          return '';\n        }),\n      DTColumnBuilder.newColumn('invoice__customer').withTitle($filter('translate')('PAYMENTS.CUSTOMER'))\n        .renderWith(function(data, type, full) {\n          return full.customer_name;\n        }),\n      DTColumnBuilder.newColumn('invoice__autocode').withTitle($filter('translate')('INVOICE.INVOICE'))\n        .renderWith(function(data, type, full) {\n          return full.invoice_autocode;\n        })\n\n\n    ];\n\n    // Methods\n    vm.initialize = initialize;\n    vm.filterByColumn = filterByColumn;\n    vm.exists = exists;\n    vm.selectAll = selectAll;\n    vm.toggle = toggle;\n    vm.toggleSidenav = toggleSidenav;\n    vm.isFilterActive = isFilterActive;\n    vm.filterDates = filterDates;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize(){\n\n    }\n\n    function filterDates() {\n\n      $mdDateRangePicker.show({\n        model: vm.dateRange,\n      }).then(function (result) {\n        vm.dateRange = result;\n        vm.dtInstance.DataTable.draw();\n      }).catch(function () {\n\n      });\n\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function headerCallback(header) {\n      if (!$scope.headerCompiled) {\n          // Use this headerCompiled field to only compile header once\n          $scope.headerCompiled = true;\n          $compile(angular.element(header).contents())($scope);\n      }\n    }\n\n    function initComplete(){\n\n      var api = this.api(),\n        searchBox = angular.element('body').find('#payments-search');\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      return nRow;\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function filterByColumn(filter, column){\n      vm.dtInstance.DataTable.column(column).search(filter).draw();\n    }\n\n    function exists(item) {\n      return vm.selected.indexOf(item) > -1;\n    }\n\n    function toggle(item, list) {\n      var idx = vm.selected.indexOf(item);\n      if (idx > -1) {\n        vm.selected.splice(idx, 1);\n      }\n      else {\n        vm.selected.push(item);\n      }\n    }\n\n    function selectAll(){\n      if(vm.selected.length){\n        while (vm.selected.length) {\n          vm.selected.pop();\n        }\n      }else{\n        vm.dtInstance.DataTable.rows().data().map(function(product){\n          vm.selected.push(product.id);\n        });\n      }\n    }\n\n    function isFilterActive(status){\n      return vm.filter == status;\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.accounting')\n    .controller('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', [])\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.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.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-v2', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_auth_login-v2', {\n      url: '/login-v2',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_auth_login-v2': {\n          templateUrl: 'app/main/pages/auth/login-v2/login-v2.html',\n          controller: 'LoginV2Controller as vm'\n        }\n      },\n      bodyClass: 'login-v2'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/auth/login-v2');\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.login-v2')\n    .controller('LoginV2Controller', LoginV2Controller);\n\n  /** @ngInject */\n  function LoginV2Controller($scope, $state, $rootScope, $location, AUTH_EVENTS, AuthService, Session) {\n    var vm = this;\n\n    // Data\n    vm.rootScope = $rootScope;\n    vm.location = $location;\n    vm.authEvents = AUTH_EVENTS;\n    vm.authService = AuthService;\n    vm.logging = false;\n\n    //Methods\n    vm.login = login;\n    vm.typingUsername = typingUsername;\n\n    //Functions\n    function login() {\n      vm.logging = true;\n      vm.authService.login(\n        // Data\n        {\n          username: vm.form.username,\n          password: vm.form.password\n        },\n        // Remember login\n        vm.form.rememberPassword\n      ).then(function (user) {\n\n        if (user.user && user.token) {\n          if(sessionStorage.getItem('afterLoginUrl')){\n            $location.path(sessionStorage.getItem('afterLoginUrl'));\n            sessionStorage.removeItem('afterLoginUrl');\n          } else {\n            $location.path('/analytics/start');\n          }\n          vm.rootScope.$broadcast(vm.authEvents.loginSuccess);\n        }\n        else {\n          vm.logging = false;\n          $scope.loginForm.username.$setValidity('invalid', false);\n          vm.rootScope.$broadcast(vm.authEvents.loginFailed);\n        }\n      });\n    }\n\n    function typingUsername() {\n      // TODO: fer-ho mes ben fet:\n      $scope.loginForm.username.$setValidity('invalid', true);\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.login', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_auth_login', {\n      url: '/login',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_auth_login': {\n          templateUrl: 'app/main/pages/auth/login/login.html',\n          controller: 'LoginController as vm'\n        }\n      },\n      bodyClass: 'login'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/auth/login');\n\n    // Navigation\n    msNavigationServiceProvider.saveItem('pages.auth', {\n      title: 'Authentication',\n      icon: 'icon-lock',\n      weight: 1\n    });\n\n    msNavigationServiceProvider.saveItem('pages.auth.login', {\n      title: 'Login',\n      state: 'app.pages_auth_login',\n      weight: 1\n    });\n  }\n\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.login')\n    .controller('LoginController', LoginController);\n\n  /** @ngInject */\n  function LoginController() {\n    // Data\n\n    // Methods\n\n    //////////\n  }\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.lock', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_auth_lock', {\n      url: '/lock',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_auth_lock': {\n          templateUrl: 'app/main/pages/auth/lock/lock.html',\n          controller: 'LockController as vm'\n        }\n      },\n      bodyClass: 'lock'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/auth/lock');\n\n  }\n\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.lock')\n    .controller('LockController', LockController);\n\n  /** @ngInject */\n  function LockController() {\n    var vm = this;\n\n    // Data\n    vm.form = {\n      username: 'Jane Doe'\n    };\n\n    // Methods\n\n    //////////\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.forgot-password', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_auth_forgot-password', {\n      url: '/forgot-password',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_auth_forgot-password': {\n          templateUrl: 'app/main/pages/auth/forgot-password/forgot-password.html',\n          controller: 'ForgotPasswordController as vm'\n        }\n      },\n      bodyClass: 'forgot-password'\n    });\n\n    // To show the module in the nav menu\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/auth/forgot-password');\n\n    // Navigation\n    /*\n    msNavigationServiceProvider.saveItem('pages.auth.forgot-password', {\n        title : 'Forgot Password',\n        state : 'app.pages_auth_forgot-password',\n        weight: 5\n    });\n    */\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.forgot-password')\n    .controller('ForgotPasswordController', ForgotPasswordController);\n\n  /** @ngInject */\n  function ForgotPasswordController($scope, $mdToast, $mdDialog, $filter, $location, AuthService) {\n    var vm = this;\n\n    // Data\n    vm.recovering = false;\n    vm.email = '';\n    vm.authService = AuthService;\n\n    // Methods\n    vm.resetPasswordRequest = resetPasswordRequest;\n    vm.typingEmail = typingEmail;\n    vm.isValidEmail = isValidEmail;\n\n    // Listeners\n    $scope.$on('$viewContentLoaded', function() {\n      var username = sessionStorage.getItem('username');\n      sessionStorage.removeItem('username');\n\n      if (username && isValidEmail(username)) {\n        vm.email = username;\n      }\n    });\n\n    // Functions\n    function resetPasswordRequest() {\n      vm.authService.resetPasswordRequest(vm.email).then(function(result) {\n        showEmailHasBeenSentDialog();\n      });\n    }\n\n    function typingEmail() {\n      $scope.forgotPasswordForm.email.$setValidity('invalid', isValidEmail(vm.email));\n    }\n\n    function isValidEmail(email) {\n      if (!email && !vm.email) {\n        return false;\n      }\n\n      if (!email && vm.email) {\n        email = vm.email;\n      }\n\n      var emailRegexp = new RegExp(/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/);\n\n      return emailRegexp.test(email);\n    }\n\n    function showEmailHasBeenSentDialog() {\n      var confirm = $mdDialog.alert()\n        .textContent($filter('translate')('FORGOT_PASSWORD.EMAIL_SENT'))\n        .ariaLabel('Email sent')\n        .ok($filter('translate')('FORGOT_PASSWORD.GO_BACK'));\n\n      $mdDialog.show(confirm).then(function() {\n        $location.path('/login');\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  var app = angular.module('app.core');\n\n  app.component('ndFilter', {\n    transclude: true,\n    require: {\n      parent: '^ndFilterSelector'\n    },\n    bindings: {\n      name: '@',\n      label: '@?',\n      icon: '@?'\n    },\n    templateUrl: 'app/main/components/filter-selector/filter/filter.html',\n    controllerAs: 'vm',\n    controller: function ($scope, $element, $timeout) {\n      var vm = this;\n      var filter = {};\n      vm.$onInit = function () {\n        filter = {\n          name: vm.name,\n          label: vm.label || ('FILTERS.' + vm.name.toUpperCase()),\n          icon: vm.icon\n        };\n\n        vm.parent.registerFilter(filter);\n\n        $scope.$watch(function () {\n          return vm.parent.isFilterActive(vm.name);\n        }, function (active) {\n          $element.css('display', active ? 'block' : 'none');\n        });\n\n        $scope.$on('ndFilter::clear', function (event, data) {\n          if (data === 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('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('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('ndGetOrderTotalsController', ndGetOrderTotalsController)\n    .directive('ndGetOrderTotals', ndGetOrderTotals);\n\n  /** @ngInject */\n  function ndGetOrderTotals() {\n    return {\n      restrict: 'E',\n      scope: {\n        order: '=',\n        type: '=',\n        showCost: '=',\n        showTaxes: '='\n      },\n      controller: 'ndGetOrderTotalsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/order-products/nd-get-order-totals/nd-get-order-totals.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndGetOrderTotalsController($scope,\n                                      HTTP_STATUS,\n                                      api,\n                                      $mdToast,\n                                      $rootScope,\n                                      Session,\n                                      $filter) {\n\n    var vm = this;\n    vm.totalAmount = null;\n    vm.totalPriceExclTax = null;\n    vm.totalPriceInclTax = null;\n    vm.showCost = !!$scope.showCost;\n    vm.session = Session;\n    vm.currency = $scope.order.pricing_tier_currency ? $scope.order.pricing_tier_currency : Session.company.currency;\n\n    initialize();\n\n    function initialize() {\n      $scope.getShowTaxesEvent = $scope.$on('reload-totals::showTaxesEvent', function(event, showTaxes) {\n        $scope.showTaxes = showTaxes;\n      });\n\n      $scope.getTotalsEvent = $scope.$on('reload-totals::orderProductsList', function(event, data) {\n        try {\n          if (data.total_order_price) {\n            if (data.total_order_price.total_price_excl_tax === 0 || data.total_order_price.total_price_excl_tax) {\n              setTotalPriceExclTax(data.total_order_price, true);\n            }\n            if (data.total_order_price.total_price_incl_tax === 0 || data.total_order_price.total_price_incl_tax) {\n              setTotalPriceInclTax(data.total_order_price, true);\n            }\n          }\n          if (data.total_order_volume === 0 || data.total_order_volume) {\n            setTotalVolume(parseFloat(data.total_order_volume));\n          }\n          if (data.total_order_amount === 0 || data.total_order_amount) {\n            setTotalAmount(data.total_order_amount);\n          } else {\n            getTotalOrderProductVariants(false);\n          }\n        } catch (error) {\n          getTotalOrderProductVariants(false);\n        }\n\n      });\n\n      $scope.$on('$destroy', function() {\n        $scope.getTotalsEvent();\n        $scope.getShowTaxesEvent();\n      });\n\n      getTotalOrderProductVariants(true);\n    }\n\n    function setTotalAmount(totalAmount) {\n      vm.totalAmount = totalAmount;\n    }\n\n    function setTotalVolume(totalVolume) {\n      vm.totalVolume = parseFloat(totalVolume);\n    }\n\n    function setTotalAvailableVolume(totalAvailableVolume){\n      vm.totalAvailableVolume = parseFloat(totalAvailableVolume);\n    }\n\n    function setTotalPriceExclTax(totalOrderPrice, sendEvent) {\n      vm.totalPriceExclTax = totalOrderPrice.total_price_excl_tax;\n      if (sendEvent) {\n        $rootScope.$broadcast('update-total-price::orderDeliveryController', totalOrderPrice);\n      }\n    }\n\n    function setTotalPriceInclTax(totalOrderPrice, sendEvent) {\n      vm.totalPriceInclTax = totalOrderPrice.total_price_incl_tax;\n      if (sendEvent) {\n        $rootScope.$broadcast('update-total-price::orderDeliveryController', totalOrderPrice);\n      }\n    }\n\n    function getTotalOrderProductVariants(sendEvent) {\n      api.inventories.order.get({\n        option: 'get-total-order-product-variants',\n        order_id: $scope.order.id,\n        order_type: $scope.type\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          if (response.total_amount === 0 || response.total_amount) {\n            setTotalAmount(response.total_amount);\n          }\n          if (response.total_volume === 0 || response.total_volume) {\n            setTotalVolume(response.total_volume);\n          }\n          if (response.total_available_volume === 0 || response.total_available_volume) {\n            setTotalAvailableVolume(response.total_available_volume);\n          }\n          if (response.total_price_excl_tax === 0 || response.total_price_excl_tax) {\n            setTotalPriceExclTax(response, sendEvent);\n          }\n          if (response.total_price_incl_tax === 0 || response.total_price_incl_tax) {\n            setTotalPriceInclTax(response, sendEvent);\n          }\n        } else {\n          $mdToast\n            .show($mdToast.simple()\n              .textContent($filter('translate')('GENERAL.ERROR'))\n              .position('top right'));\n        }\n      });\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndAddOrderProductController', ndAddOrderProductController)\n    .directive('ndAddOrderProduct', ndAddOrderProduct);\n\n  /** @ngInject */\n  function ndAddOrderProduct() {\n    return {\n      restrict: 'E',\n      scope: {\n        order: '=',\n        type: '=',\n        currentTab: '=',\n        showDialogWhenAdding: '='\n      },\n      controller: 'ndAddOrderProductController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/order-products/nd-add-order-product/nd-add-order-product.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndAddOrderProductController($scope,\n                                       HTTP_STATUS,\n                                       $rootScope,\n                                       PURCHASE_ORDER_STATUSES_REVERSE,\n                                       api,\n                                       $state,\n                                       Audio,\n                                       ORDER_LOG_CHANGE_TYPES,\n                                       $mdDialog,\n                                       $document,\n                                       $mdToast,\n                                       $filter,\n                                       DTO_ORDER_TYPES) {\n\n    var vm = this;\n    vm.order = $scope.order;\n    vm.type = $scope.type;\n    vm.showDialogWhenAdding = false;\n    vm.enableStockDetailScan = false;\n    vm.ORDER_LOG_CHANGE_TYPES = ORDER_LOG_CHANGE_TYPES;\n\n    vm.searchProduct = searchProduct;\n    vm.openProductSearchDialog = openProductSearchDialog;\n    vm.newProductAddedCallback = newProductAddedCallback;\n\n    initialize();\n\n    function initialize() {\n      vm.showDialogWhenAdding = !!$scope.showDialogWhenAdding;\n    }\n\n    function openProductSearchDialog(ev) {\n      var hideBundles = vm.type === DTO_ORDER_TYPES.PURCHASE_ORDER || vm.type === DTO_ORDER_TYPES.TRANSFER_ORDER;\n\n      $mdDialog.show({\n        controller: 'ProductSearchController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-search/product-search.html',\n        parent: angular.element($document.find('body')),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n        locals: {\n          params: {\n            collectionId: vm.order.collection,\n            multiple: true,\n            targetWarehouse: vm.order.target_warehouse,\n            hideBundles: hideBundles\n          }\n        }\n      }).then(function(result) {\n        searchProduct(result.product, null, result.products.map(function(p) {\n          return p.id;\n        }));\n      });\n    }\n\n    function showAlertDialog(product, barcode, products) {\n        $mdDialog.show($mdDialog.confirm()\n          .title($filter('translate')('ORDER.ADD_PRODUCTS_TO_ORDER_DIALOG_TITLE'))\n          .htmlContent($filter('translate')('ORDER.ADD_PRODUCTS_TO_ORDER_DIALOG_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.CONTINUE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'))\n        ).then(function () {\n          callAddProductApi(product, barcode, products)\n        }, function() {\n        });\n    }\n\n    function searchProduct(product, barcode, products) {\n      if (vm.showDialogWhenAdding) {\n        showAlertDialog(product, barcode, products);\n      }\n      else {\n        callAddProductApi(product, barcode, products);\n      }\n    }\n\n    function callAddProductApi(product, barcode, products) {\n      api.inventories.orderProducts.save({\n        product: product ? product.id : null,\n        products: products,\n        order_id: vm.order.id,\n        order_type: vm.type,\n        order_product_variants: [],\n        log_type: vm.ORDER_LOG_CHANGE_TYPES['ORDER_LOG_TYPE_MANUAL']\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_201_CREATED) {\n          sendReloadTableEvent();\n        } else {\n          manageErrors(status, response);\n        }\n      });\n    }\n\n    function manageErrors(status, response) {\n      if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n        var errorMessage = 'ERRORS.' + response.error;\n        $mdToast.show($mdToast.simple().textContent($filter('translate')(errorMessage, { status: response.order_status })).position('top right'));\n      } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.PRODUCT_NOT_FOUND')).position('top right'));\n        $rootScope.$broadcast('add-log-change::orderProductsLog', { 'log_change': response });\n      } else {\n        showErrorToast();\n      }\n      Audio.playErrorSound();\n    }\n\n    function showErrorToast() {\n      $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n    }\n\n    function sendReloadTableEvent(response) {\n      $rootScope.$broadcast('reload-table::orderProductsList', response);\n    }\n\n    function newProductAddedCallback(product) {\n      callAddProductApi(product, null, null);\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndActionsOrderSelectorController', ndActionsOrderSelectorController)\n    .directive('ndActionsOrderSelector', ndActionsOrderSelector);\n\n  /** @ngInject */\n  function ndActionsOrderSelector() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/order-products/nd-actions-order-selector/nd-actions-order-selector.html',\n      scope: {\n        type: '=',\n        order: '=',\n        options: '=',\n      },\n      controller: 'ndActionsOrderSelectorController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndActionsOrderSelectorController($scope) {\n\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndStockLocationsByWarehouseListController', ndStockLocationsByWarehouseListController)\n    .directive('ndStockLocationsByWarehouseList', ndStockLocationsByWarehouseList);\n\n  /** @ngInject */\n  function ndStockLocationsByWarehouseList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        storageLabel: '=?'\n      },\n      controller: 'ndStockLocationsByWarehouseListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-stock-locations/nd-stock-locations-by-warehouse/nd-stock-locations-by-warehouse-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndStockLocationsByWarehouseListController($scope, api, $filter, $mdDialog, $mdToast, $document) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.stockLocations.replace('/:id/', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = $scope.storageLabel ? $scope.storageLabel : 'UIGridInventoryStockLocationsByWarehouseControllerV1';\n    vm.searchFields = ['locations'];\n\n    $scope.openProductVariantSearchDialog = openProductVariantSearchDialog;\n    $scope.removeProductVariantFromStockLocation = removeProductVariantFromStockLocation;\n    $scope.handleStockLocationDialog = handleStockLocationDialog;\n    $scope.goToProductsView = goToProductsView;\n\n    function openProductVariantSearchDialog($event, stockLocation) {\n      $mdDialog.show({\n        controller: 'ProductVariantSelectorGridController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-variant-selector-grid/product-variant-selector-grid.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          selectedVariants: stockLocation.product_variants_ids || []\n        }\n      }).then(function (result) {\n        if (!result || result.length === 0) {\n          return;\n        }\n\n        var variantIds = result.map(function (variant) {\n            if (typeof variant === 'object') {\n              return variant.id;\n            } else if (typeof variant === 'number') {\n              return variant;\n            }\n          }\n        );\n\n        api.inventories.stockLocations.update({\n          id: stockLocation.id,\n          product_variants: variantIds,\n          option: 'add-product-variants'\n        }, function (response) {\n          stockLocation.product_variants = (response.product_variants || []).slice(0, 3);\n          stockLocation.product_variants_count = response.product_variants_count;\n          stockLocation.product_variants_ids = response.product_variants_ids || [];\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.STOCK_LOCATION_UPDATED')).position('top right'));\n        }, function (error) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        });\n      });\n    }\n\n    function removeProductVariantFromStockLocation($event, stockLocation, variantId) {\n      api.inventories.stockLocations.update({\n        id: stockLocation.id,\n        product_variants: [variantId],\n        option: 'remove-product-variants'\n      }, function (response) {\n        stockLocation.product_variants = (response.product_variants || []).slice(0, 3);\n        stockLocation.product_variants_count = response.product_variants_count;\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.STOCK_LOCATION_UPDATED')).position('top right'));\n      }, function (error) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      });\n      $event.stopPropagation();\n    }\n\n    function goToProductsView(stockLocation) {\n      $scope.$parent.vm.statusByProducts.search = stockLocation.location;\n      $scope.$parent.vm.currentNavItem = 'products';\n    }\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.columns = {\n        location: {\n          displayName: $filter('translate')('PRODUCT.STOCK_LOCATIONS'),\n          field: 'location',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<div class=\"full-width\" layout=\"row\" layout-align=\"start center\" ' +\n            'ng-mouseenter=\"row.entity._showEditBtn = true\" ng-mouseleave=\"row.entity._showEditBtn = false\">' +\n            '<span>{{row.entity.location}}</span>' +\n            '<span flex></span>' +\n            '<md-button class=\"md-icon-button no-margin no-padding\" ng-show=\"row.entity._showEditBtn\" ng-click=\"grid.appScope.$parent.handleStockLocationDialog(row.entity)\">' +\n            '<md-icon md-font-icon=\"icon-pencil\"></md-icon>' +\n            '</md-button>' +\n            '</div>'\n        },\n        position: {\n          displayName: $filter('translate')('CONFIGURATION.POSITION'),\n          field: 'position',\n          permission: true,\n          visible: true,\n          minWidth: 50,\n          width: 50,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<span class=\"full-width text-center\">{{row.entity.position}}</span>'\n        },\n        product_variants: {\n          displayName: $filter('translate')('PRODUCTS.PRODUCTS'),\n          field: 'product_variants',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<div style=\"overflow-y: auto;\" layout=\"row\" layout-align=\"start center\">' +\n            '<span ng-repeat=\"pv in row.entity.product_variants\" layout=\"row\" layout-align=\"start center\" class=\"product-variant-item\">' +\n            '<img ng-if=\"pv.cover\" ng-src=\"{{::pv.cover}}\" />' +\n            '<md-icon ng-if=\"!pv.cover\" md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail\"></md-icon>' +\n            '<div layout=\"column\" layout-align=\"start start\" class=\"ml-5\">' +\n            '<nd-a state=\"\\'app.inventory.products.product.overview\\'\" state-params=\"{id: pv.product_id}\" class=\"md-caption\">{{::pv.code}}</nd-a>' +\n            '<span class=\"md-caption secondary-text\">{{::pv.color_name}} / {{::pv.size_name}}</span>' +\n            '</div>' +\n            '<md-button class=\"md-icon-button no-margin no-padding\" ng-click=\"grid.appScope.$parent.removeProductVariantFromStockLocation($event, row.entity, pv.id)\">' +\n            '<md-icon md-font-icon=\"icon-close\"></md-icon>' +\n            '</md-button>' +\n            '</span>' +\n            '<md-button ng-if=\"row.entity.product_variants_count > 3\" class=\"md-primary no-margin no-padding\" ng-click=\"grid.appScope.$parent.goToProductsView(row.entity)\">' +\n            '+ {{row.entity.product_variants_count - 3}} más' +\n            '</md-button>' +\n            '<span class=\"secondary-text\" ng-if=\"row.entity.product_variants.length === 0\">' +\n            '{{ \"WAREHOUSE.EMPTY_PRODUCT_VARIANTS_HINT\" | translate }}' +\n            '</span>' +\n            '</div>'\n        },\n        actions: {\n          displayName: '',\n          field: 'actions',\n          permission: true,\n          visible: true,\n          minWidth: 60,\n          maxWidth: 60,\n          width: 60,\n          enablePinning: false,\n          enableHiding: false,\n          pinnedRight: true,\n          enableColumnMenu: false,\n          enableSorting: false,\n          enableFiltering: false,\n          cellTemplate: '<md-button class=\"md-primary md-icon-button\" ng-click=\"grid.appScope.$parent.openProductVariantSearchDialog($event, row.entity)\"><md-icon md-svg-src=\"assets/images/custom-material-design-icons/advanced-search-primary.d3a4c548.svg\"></md-icon></md-button>'\n        }\n      };\n    }\n\n    function handleStockLocationDialog(stockLocation) {\n      $scope.$emit('WarehouseController::newStockLocation', stockLocation);\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndStockLocationsByProductsListController', ndStockLocationsByProductsListController)\n    .directive('ndStockLocationsByProductsList', ndStockLocationsByProductsList);\n\n  /** @ngInject */\n  function ndStockLocationsByProductsList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        storageLabel: '=?',\n      },\n      controller: 'ndStockLocationsByProductsListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-stock-locations/nd-stock-locations-by-products/nd-stock-locations-by-products-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndStockLocationsByProductsListController($scope, api, $filter, $mdDialog, $mdToast, $document) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.productVariants.replace('/:id/', '').replace(':option', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = $scope.storageLabel ? $scope.storageLabel : 'UIGridInventoryStockLocationsByProductsControllerV1';\n    vm.searchFields = ['locations'];\n\n    // Initialize\n    initialize();\n\n    $scope.removeProductVariantFromStockLocation = removeProductVariantFromStockLocation;\n    $scope.openStockLocationSearchDialog = openStockLocationSearchDialog;\n\n\n    // Functions\n    function initialize() {\n      vm.columns = {\n        product_variants: {\n          displayName: $filter('translate')('PRODUCTS.PRODUCTS'),\n          field: 'product_variants',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 350,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: getProductVariantTemplate()\n        },\n        location: {\n          displayName: $filter('translate')('PRODUCT.STOCK_LOCATIONS'),\n          field: 'location',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<div layout=\"row\" layout-align=\"start center\" style=\"overflow-y: auto;\">' +\n            '<span ng-repeat=\"stock_location in row.entity.stock_locations\" layout=\"row\" layout-align=\"start center\" class=\"product-variant-item\">' +\n            '<span class=\"md-caption\">{{stock_location.location}}</span>' +\n            '<md-button class=\"md-icon-button no-margin no-padding\" ng-click=\"grid.appScope.$parent.removeProductVariantFromStockLocation($event, row.entity, stock_location.id)\">' +\n            '<md-icon md-font-icon=\"icon-close\"></md-icon>' +\n            '</md-button>' +\n            '</span>' +\n            '<span class=\"secondary-text\" ng-if=\"row.entity.stock_locations.length === 0\">' +\n            '{{ \"WAREHOUSE.EMPTY_STOCK_LOCATIONS_HINT\" | translate }}' +\n            '</span>' +\n            '</div>'\n        },\n        actions: {\n          displayName: '',\n          field: 'actions',\n          permission: true,\n          visible: true,\n          minWidth: 60,\n          maxWidth: 60,\n          width: 60,\n          enablePinning: false,\n          enableHiding: false,\n          pinnedRight: true,\n          enableColumnMenu: false,\n          enableSorting: false,\n          enableFiltering: false,\n          cellTemplate: '<md-button class=\"md-primary md-icon-button\" ng-click=\"grid.appScope.$parent.openStockLocationSearchDialog($event, row.entity)\"><md-icon md-svg-src=\"assets/images/custom-material-design-icons/pin_drop.06b09ee2.svg\"></md-icon></md-button>'\n        }\n      };\n    }\n\n    function getProductVariantTemplate() {\n      return '<div layout=\"row\" layout-align=\"start center\">' +\n        '<div layout=\"column\">' +\n        '<img class=\"mr-8\" ng-src=\"{{row.entity.cover}}\" ng-if=\"row.entity.cover\">' +\n        '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s32 grey-300-fg mr-8\" ng-if=\"!row.entity.cover\"></md-icon>' +\n        '</div>' +\n        '<div layout=\"column\">' +\n        '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' +\n        '{{row.entity.product_name}} ({{row.entity.color_name}}/{{row.entity.size_name}})' +\n        '</a>' +\n        '<div layout=\"row\" layout-align=\"start center\">' +\n        '<small class=\"secondary-text\">' +\n        '{{row.entity.sku ? row.entity.sku + \" - \" : \"\"}} <span class=\"barcode-text\"> {{row.entity.barcode}}</span>' +\n        '</small>' +\n        '</div>' +\n        '</div>' +\n        '</div>';\n    }\n\n    function removeProductVariantFromStockLocation($event, productVariant, stockLocationId) {\n      api.inventories.stockLocations.update({\n        id: stockLocationId,\n        product_variants: [productVariant.id],\n        option: 'remove-product-variants'\n      }, function (response) {\n        productVariant.stock_locations = productVariant.stock_locations.filter(function (location) {\n          return location.id !== stockLocationId;\n        });\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n      }, function (error) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      });\n      $event.stopPropagation();\n    }\n\n    function openStockLocationSearchDialog($event, productVariant) {\n      $mdDialog.show({\n        controller: 'StockLocationSearchDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/warehouse/dialogs/stock-location-search-dialog/stock-location-search-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          warehouseId: vm.status.nonStorableFilters.warehouse_id,\n          productVariant: productVariant,\n        }\n      }).then(function (stockLocations) {\n        productVariant.stock_locations = stockLocations;\n      });\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('wbListItemsRow', wbListItemsRow);\n\n  /** @ngInject */\n  function wbListItemsRow($document, $mdSidenav, STATUS_COLORS) {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/item/wbListItemsRow/wbListItemsRow.html',\n      scope: {\n        item: '=',\n        showStatusTags: '='\n      },\n      controller: ['$scope', function($scope) {\n        $scope.item = $scope.item || {};\n        $scope.showStatusTags = $scope.showStatusTags || false;\n        $scope.isOpen = false;\n        $scope.statusColors = STATUS_COLORS;\n      }],\n      link: function(scope) {}\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('wbListItems', wbListItems);\n\n  /** @ngInject */\n  function wbListItems($document, $mdSidenav) {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/item/wbListItems/wbListItems.html',\n      scope: {\n        orderItems: '=?',\n        initializeSelected: '=?',\n        outputSelectedOrderItems: '=?',\n        showStatusTags: '=?'\n      },\n      controller: ['$scope', function($scope) {\n        $scope.ORDERBY_NAME = 'item.item_type.name';\n        $scope.ORDERBY_ACTION = 'item.action.name';\n        $scope.ORDERBY_PAID = 'paid';\n        $scope.showStatusTags = $scope.showStatusTags || false;\n        $scope.orderItems = $scope.orderItems || [];\n        if ($scope.initializeSelected) {\n          for (var i = 0; i < $scope.orderItems.length; ++i)\n            $scope.orderItems[i].selected = true;\n        }\n\n        $scope.filterIds = null;\n        $scope.listType = 'all';\n        $scope.listOrder = $scope.ORDERBY_NAME;\n        $scope.listOrderAsc = false;\n        $scope.findString = '';\n\n        $scope.$on('deselect-order-items', function(event, args) {\n          for (var i = 0; i < $scope.orderItems.length; ++i)\n            $scope.orderItems[i].selected = false;\n        });\n\n        $scope.$on('select-all-order-items', function(event, args) {\n          for (var i = 0; i < $scope.orderItems.length; ++i)\n            $scope.orderItems[i].selected = true;\n        });\n\n        /**\n         * Es defineix un watch per analitzar quan se seleccionen o es desseleccionen objectes\n         * de la llista d'orderItems per tenir un valor de sortida de la directiva\n         */\n        $scope.$watch('orderItems', function() {\n          var auxArray = [];\n          for (var i = 0; i < $scope.orderItems.length; ++i)\n            if ($scope.orderItems[i].selected)\n              auxArray.push($scope.orderItems[i]);\n\n          $scope.outputSelectedOrderItems = auxArray;\n        }, true)\n\n      }],\n      link: function(scope, $mdDialog, msUtils) {\n\n        /**\n         * Filtra per el paràmetre type. Si type és igual al paràmetre ja utilitzat per buscar,\n         * li inverteix l'ordre\n         *\n         * @param type\n         */\n        scope.sortAndToggleIf = function(type) {\n          scope.listOrderAsc = scope.listOrder == type ? !scope.listOrderAsc : false;\n          scope.listOrder = type;\n        }\n\n        /**\n         * Delete Order Item Confirm Dialog\n         *\n         * @param orderItem\n         * @param ev\n         */\n        function deleteOrderItemConfirm(orderItem, ev) {\n          var confirm = $mdDialog.confirm()\n            .title('Are you sure want to delete the order item?')\n            .htmlContent('<b>' + orderItem.name + ' ' + orderItem.lastName + '</b>' + ' will be deleted.')\n            .ariaLabel('delete order item')\n            .targetEvent(ev)\n            .ok('OK')\n            .cancel('CANCEL');\n\n          $mdDialog.show(confirm).then(function() {\n\n            deleteOrderItem(orderItem);\n\n          }, function() {\n\n          });\n        }\n      }\n    };\n  }\n})();\n\n/**\n * Created by joansubiratssalvans on 04/11/2016.\n */\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('wbNewOrderInvoice', wbNewOrderInvoice);\n\n  /** @ngInject */\n  function wbNewOrderInvoice($document, $mdSidenav) {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/invoice/neworderinvoice/wbNewOrderInvoice.html',\n      scope: {\n        list: '=',\n        order: '=',\n        company: '=',\n        showSubtotal: '=?',\n        outputTotal: '=?',\n        hideTitle: '=?'\n      },\n      controller: ['$scope', function($scope) {\n        $scope.list = $scope.list;\n        $scope.order = $scope.order;\n        $scope.company = $scope.company;\n        $scope.showSubtotal = $scope.showSubtotal || false;\n        $scope.hideTitle = $scope.hideTitle || false;\n      }],\n      link: function(scope) {\n\n        scope.getTotal = function() {\n          var total = 0;\n          for (var i = 0; i < scope.list.length; ++i)\n            total += scope.list[i].final_price;\n          total = total.toFixed(2);\n          scope.outputTotal = total;\n          return total;\n        }\n\n        scope.getSubTotal = function() {\n\n        }\n\n        scope.getTotalTax = function() {\n          var totalTax = scope.getTotal();\n          return (totalTax * scope.company.vat / 100.0).toFixed(2);\n        }\n      }\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .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('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        .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        .provider('msNavigationService', msNavigationServiceProvider)\n        .controller('MsNavigationController', MsNavigationController)\n        // Vertical\n        .directive('msNavigation', msNavigationDirective)\n        .controller('MsNavigationNodeController', MsNavigationNodeController)\n        .directive('msNavigationNode', msNavigationNodeDirective)\n        .directive('msNavigationItem', msNavigationItemDirective)\n        //Horizontal\n        .directive('msNavigationHorizontal', msNavigationHorizontalDirective)\n        .controller('MsNavigationHorizontalNodeController', MsNavigationHorizontalNodeController)\n        .directive('msNavigationHorizontalNode', msNavigationHorizontalNodeDirective)\n        .directive('msNavigationHorizontalItem', msNavigationHorizontalItemDirective);\n\n    /** @ngInject */\n    function msNavigationServiceProvider()\n    {\n        // Inject $log service\n        var $log = angular.injector(['ng']).get('$log');\n\n        // Navigation array\n        var navigation = [];\n\n        var service = this;\n\n        // Methods\n        service.saveItem = saveItem;\n        service.deleteItem = deleteItem;\n        service.sortByWeight = sortByWeight;\n\n        //////////\n\n        /**\n         * Create or update the navigation item\n         *\n         * @param path\n         * @param item\n         */\n        function saveItem(path, item)\n        {\n            if ( !angular.isString(path) )\n            {\n                $log.error('path must be a string (eg. `dashboard.project`)');\n                return;\n            }\n\n            var parts = path.split('.');\n\n            // Generate the object id from the parts\n            var id = parts[parts.length - 1];\n\n            // Get the parent item from the parts\n            var parent = _findOrCreateParent(parts);\n\n            // Decide if we are going to update or create\n            var updateItem = false;\n\n            for ( var i = 0; i < parent.length; i++ )\n            {\n                if ( parent[i]._id === id )\n                {\n                    updateItem = parent[i];\n\n                    break;\n                }\n            }\n\n            // Update\n            if ( updateItem )\n            {\n                angular.extend(updateItem, item);\n\n                // Add proper ui-sref\n                updateItem.uisref = _getUiSref(updateItem);\n            }\n            // Create\n            else\n            {\n                // Create an empty children array in the item\n                item.children = [];\n\n                // Add the default weight if not provided or if it's not a number\n                if ( angular.isUndefined(item.weight) || !angular.isNumber(item.weight) )\n                {\n                    item.weight = 1;\n                }\n\n                // Add the item id\n                item._id = id;\n\n                // Add the item path\n                item._path = path;\n\n                // Add proper ui-sref\n                item.uisref = _getUiSref(item);\n\n                // Push the item into the array\n                parent.push(item);\n            }\n        }\n\n        /**\n         * Delete navigation item\n         *\n         * @param path\n         */\n        function deleteItem(path)\n        {\n            if ( !angular.isString(path) )\n            {\n                $log.error('path must be a string (eg. `dashboard.project`)');\n                return;\n            }\n\n            // Locate the item by using given path\n            var item = navigation,\n                parts = path.split('.');\n\n            for ( var p = 0; p < parts.length; p++ )\n            {\n                var id = parts[p];\n\n                for ( var i = 0; i < item.length; i++ )\n                {\n                    if ( item[i]._id === id )\n                    {\n                        // If we have a matching path,\n                        // we have found our object:\n                        // remove it.\n                        if ( item[i]._path === path )\n                        {\n                            item.splice(i, 1);\n                            return true;\n                        }\n\n                        // Otherwise grab the children of\n                        // the current item and continue\n                        item = item[i].children;\n                        break;\n                    }\n                }\n            }\n\n            return false;\n        }\n\n        /**\n         * Sort the navigation items by their weights\n         *\n         * @param parent\n         */\n        function sortByWeight(parent)\n        {\n            // If parent not provided, sort the root items\n            if ( !parent )\n            {\n                parent = navigation;\n                parent.sort(_byWeight);\n            }\n\n            // Sort the children\n            for ( var i = 0; i < parent.length; i++ )\n            {\n                var children = parent[i].children;\n\n                if ( children.length > 1 )\n                {\n                    children.sort(_byWeight);\n                }\n\n                if ( children.length > 0 )\n                {\n                    sortByWeight(children);\n                }\n            }\n        }\n\n        /* ----------------- */\n        /* Private Functions */\n        /* ----------------- */\n\n        /**\n         * Find or create parent\n         *\n         * @param parts\n         * @returns {Array|Boolean}\n         * @private\n         */\n        function _findOrCreateParent(parts)\n        {\n            // Store the main navigation\n            var parent = navigation;\n\n            // If it's going to be a root item\n            // return the navigation itself\n            if ( parts.length === 1 )\n            {\n                return parent;\n            }\n\n            // Remove the last element from the parts as\n            // we don't need that to figure out the parent\n            parts.pop();\n\n            // Find and return the parent\n            for ( var i = 0; i < parts.length; i++ )\n            {\n                var _id = parts[i],\n                    createParent = true;\n\n                for ( var p = 0; p < parent.length; p++ )\n                {\n                    if ( parent[p]._id === _id )\n                    {\n                        parent = parent[p].children;\n                        createParent = false;\n\n                        break;\n                    }\n                }\n\n                // If there is no parent found, create one, push\n                // it into the current parent and assign it as a\n                // new parent\n                if ( createParent )\n                {\n                    var item = {\n                        _id     : _id,\n                        _path   : parts.join('.'),\n                        title   : _id,\n                        weight  : 1,\n                        children: []\n                    };\n\n                    parent.push(item);\n                    parent = item.children;\n                }\n            }\n\n            return parent;\n        }\n\n        /**\n         * Sort by weight\n         *\n         * @param x\n         * @param y\n         * @returns {number}\n         * @private\n         */\n        function _byWeight(x, y)\n        {\n            return parseInt(x.weight) - parseInt(y.weight);\n        }\n\n        /**\n         * Setup the ui-sref using state & state parameters\n         *\n         * @param item\n         * @returns {string}\n         * @private\n         */\n        function _getUiSref(item)\n        {\n            var uisref = '';\n\n            if ( angular.isDefined(item.state) )\n            {\n                uisref = item.state;\n\n                if ( angular.isDefined(item.stateParams) && angular.isObject(item.stateParams) )\n                {\n                    uisref = uisref + '(' + angular.toJson(item.stateParams) + ')';\n                }\n            }\n\n            return uisref;\n        }\n\n        /* ----------------- */\n        /* Service           */\n        /* ----------------- */\n\n        this.$get = function ()\n        {\n            var activeItem = null,\n                navigationScope = null,\n                folded = null,\n                foldedOpen = null;\n\n            var service = {\n                saveItem          : saveItem,\n                deleteItem        : deleteItem,\n                sort              : sortByWeight,\n                clearNavigation   : clearNavigation,\n                setActiveItem     : setActiveItem,\n                getActiveItem     : getActiveItem,\n                getNavigation     : getNavigation,\n                getFlatNavigation : getFlatNavigation,\n                setNavigationScope: setNavigationScope,\n                setFolded         : setFolded,\n                getFolded         : getFolded,\n                setFoldedOpen     : setFoldedOpen,\n                getFoldedOpen     : getFoldedOpen,\n                toggleFolded      : toggleFolded\n            };\n\n            return service;\n\n            //////////\n\n            /**\n             * Clear the entire navigation\n             */\n            function clearNavigation()\n            {\n                // Clear the navigation array\n                navigation = [];\n\n                // Clear the vm.navigation from main controller\n                if ( navigationScope )\n                {\n                    navigationScope.vm.navigation = navigation;\n                }\n            }\n\n            /**\n             * Set active item\n             *\n             * @param node\n             * @param scope\n             */\n            function setActiveItem(node, scope)\n            {\n                activeItem = {\n                    node : node,\n                    scope: scope\n                };\n            }\n\n            /**\n             * Return active item\n             */\n            function getActiveItem()\n            {\n                return activeItem;\n            }\n\n            /**\n             * Return navigation array\n             *\n             * @param root\n             * @returns Array\n             */\n            function getNavigation(root)\n            {\n                if ( root )\n                {\n                    for ( var i = 0; i < navigation.length; i++ )\n                    {\n                        if ( navigation[i]._id === root )\n                        {\n                            return [navigation[i]];\n                        }\n                    }\n\n                    return null;\n                }\n\n                return navigation;\n            }\n\n            /**\n             * Return flat navigation array\n             *\n             * @param root\n             * @returns Array\n             */\n            function getFlatNavigation(root)\n            {\n                // Get the correct navigation array\n                var navigation = getNavigation(root);\n\n                // Flatten the navigation object\n                return _flattenNavigation(navigation);\n            }\n\n            /**\n             * Store navigation's scope for later use\n             *\n             * @param scope\n             */\n            function setNavigationScope(scope)\n            {\n                navigationScope = scope;\n            }\n\n            /**\n             * Set folded status\n             *\n             * @param status\n             */\n            function setFolded(status)\n            {\n                folded = status;\n            }\n\n            /**\n             * Return folded status\n             *\n             * @returns {*}\n             */\n            function getFolded()\n            {\n                return folded;\n            }\n\n            /**\n             * Set folded open status\n             *\n             * @param status\n             */\n            function setFoldedOpen(status)\n            {\n                foldedOpen = status;\n            }\n\n            /**\n             * Return folded open status\n             *\n             * @returns {*}\n             */\n            function getFoldedOpen()\n            {\n                return foldedOpen;\n            }\n\n\n            /**\n             * Toggle fold on stored navigation's scope\n             */\n            function toggleFolded()\n            {\n                navigationScope.toggleFolded();\n            }\n\n            /**\n             * Flatten the given navigation\n             *\n             * @param navigation\n             * @private\n             */\n            function _flattenNavigation(navigation)\n            {\n                var flatNav = [];\n\n                for ( var x = 0; x < navigation.length; x++ )\n                {\n                    // Copy and clear the children of the\n                    // navigation that we want to push\n                    var navToPush = angular.copy(navigation[x]);\n                    navToPush.children = [];\n\n                    // Push the item\n                    flatNav.push(navToPush);\n\n                    // If there are child items in this navigation,\n                    // do some nested function magic\n                    if ( navigation[x].children.length > 0 )\n                    {\n                        flatNav = flatNav.concat(_flattenNavigation(navigation[x].children));\n                    }\n                }\n\n                return flatNav;\n            }\n        };\n    }\n\n    /** @ngInject */\n    function MsNavigationController($scope, msNavigationService)\n    {\n        var vm = this;\n\n        // Data\n        if ( $scope.root )\n        {\n            vm.navigation = msNavigationService.getNavigation($scope.root);\n        }\n        else\n        {\n            vm.navigation = msNavigationService.getNavigation();\n        }\n\n        // Methods\n        vm.toggleHorizontalMobileMenu = toggleHorizontalMobileMenu;\n\n        //////////\n\n        init();\n\n        /**\n         * Initialize\n         */\n        function init()\n        {\n            // Sort the navigation before doing anything else\n            msNavigationService.sort();\n        }\n\n        /**\n         * Toggle horizontal mobile menu\n         */\n        function toggleHorizontalMobileMenu()\n        {\n            angular.element('body').toggleClass('ms-navigation-horizontal-mobile-menu-active');\n        }\n    }\n\n    /** @ngInject */\n    function msNavigationDirective($rootScope, $timeout, $mdSidenav, msNavigationService)\n    {\n        return {\n            restrict   : 'E',\n            scope      : {\n                folded: '=',\n                root  : '@'\n            },\n            controller : 'MsNavigationController as vm',\n            templateUrl: 'app/core/directives/ms-navigation/templates/vertical.html',\n            transclude : true,\n            compile    : function (tElement)\n            {\n                tElement.addClass('ms-navigation');\n\n                return function postLink(scope, iElement)\n                {\n                    var bodyEl = angular.element('body'),\n                        foldExpanderEl = angular.element('<div id=\"ms-navigation-fold-expander\"></div>'),\n                        foldCollapserEl = angular.element('<div id=\"ms-navigation-fold-collapser\"></div>'),\n                        sidenav = $mdSidenav('navigation');\n\n                    // Store the navigation in the service for public access\n                    msNavigationService.setNavigationScope(scope);\n\n                    // Initialize\n                    init();\n\n                    /**\n                     * Initialize\n                     */\n                    function init()\n                    {\n                        // Set the folded status for the first time.\n                        // First, we have to check if we have a folded\n                        // status available in the service already. This\n                        // will prevent navigation to act weird if we already\n                        // set the fold status, remove the navigation and\n                        // then re-initialize it, which happens if we\n                        // change to a view without a navigation and then\n                        // come back with history.back() function.\n\n                        // If the service didn't initialize before, set\n                        // the folded status from scope, otherwise we\n                        // won't touch anything because the folded status\n                        // already set in the service...\n                        if ( msNavigationService.getFolded() === null )\n                        {\n                            msNavigationService.setFolded(scope.folded);\n                        }\n\n                        if ( msNavigationService.getFolded() )\n                        {\n                            // Collapse everything.\n                            // This must be inside a $timeout because by the\n                            // time we call this, the 'msNavigation::collapse'\n                            // event listener is not registered yet. $timeout\n                            // will ensure that it will be called after it is\n                            // registered.\n                            $timeout(function ()\n                            {\n                                $rootScope.$broadcast('msNavigation::collapse');\n                            });\n\n                            // Add class to the body\n                            bodyEl.addClass('ms-navigation-folded');\n\n                            // Set fold expander\n                            setFoldExpander();\n                        }\n                    }\n\n                    // Sidenav locked open status watcher\n                    scope.$watch(function ()\n                    {\n                        return sidenav.isLockedOpen();\n                    }, function (current, old)\n                    {\n                        if ( angular.isUndefined(current) || angular.equals(current, old) )\n                        {\n                            return;\n                        }\n\n                        var folded = msNavigationService.getFolded();\n\n                        if ( folded )\n                        {\n                            if ( current )\n                            {\n                                // Collapse everything\n                                $rootScope.$broadcast('msNavigation::collapse');\n                            }\n                            else\n                            {\n                                // Expand the active one and its parents\n                                var activeItem = msNavigationService.getActiveItem();\n                                if ( activeItem )\n                                {\n                                    activeItem.scope.$emit('msNavigation::stateMatched');\n                                }\n                            }\n                        }\n                    });\n\n                    // Folded status watcher\n                    scope.$watch('folded', function (current, old)\n                    {\n                        if ( angular.isUndefined(current) || angular.equals(current, old) )\n                        {\n                            return;\n                        }\n\n                        setFolded(current);\n                    });\n\n                    /**\n                     * Set folded status\n                     *\n                     * @param folded\n                     */\n                    function setFolded(folded)\n                    {\n                        // Store folded status on the service for global access\n                        msNavigationService.setFolded(folded);\n\n                        if ( folded )\n                        {\n                            // Collapse everything\n                            $rootScope.$broadcast('msNavigation::collapse');\n\n                            // Add class to the body\n                            bodyEl.addClass('ms-navigation-folded');\n\n                            // Set fold expander\n                            setFoldExpander();\n                        }\n                        else\n                        {\n                            // Expand the active one and its parents\n                            var activeItem = msNavigationService.getActiveItem();\n                            if ( activeItem )\n                            {\n                                activeItem.scope.$emit('msNavigation::stateMatched');\n                            }\n\n                            // Remove body class\n                            bodyEl.removeClass('ms-navigation-folded ms-navigation-folded-open');\n\n                            // Remove fold collapser\n                            removeFoldCollapser();\n                        }\n                    }\n\n                    /**\n                     * Set fold expander\n                     */\n                    function setFoldExpander()\n                    {\n                        iElement.parent().append(foldExpanderEl);\n\n                        // Let everything settle for a moment\n                        // before registering the event listener\n                        $timeout(function ()\n                        {\n                            foldExpanderEl.on('mouseenter touchstart', onFoldExpanderHover);\n                        });\n                    }\n\n                    /**\n                     * Set fold collapser\n                     */\n                    function setFoldCollapser()\n                    {\n                        bodyEl.find('#main').append(foldCollapserEl);\n                        foldCollapserEl.on('mouseenter touchstart', onFoldCollapserHover);\n                    }\n\n                    /**\n                     * Remove fold collapser\n                     */\n                    function removeFoldCollapser()\n                    {\n                        foldCollapserEl.remove();\n                    }\n\n                    /**\n                     * onHover event of foldExpander\n                     */\n                    function onFoldExpanderHover(event)\n                    {\n                        if ( event )\n                        {\n                            event.preventDefault();\n                        }\n\n                        // Set folded open status\n                        msNavigationService.setFoldedOpen(true);\n\n                        // Expand the active one and its parents\n                        var activeItem = msNavigationService.getActiveItem();\n                        if ( activeItem )\n                        {\n                            activeItem.scope.$emit('msNavigation::stateMatched');\n                        }\n\n                        // Add class to the body\n                        bodyEl.addClass('ms-navigation-folded-open');\n\n                        // Remove the fold opener\n                        foldExpanderEl.remove();\n\n                        // Set fold collapser\n                        setFoldCollapser();\n                    }\n\n                    /**\n                     * onHover event of foldCollapser\n                     */\n                    function onFoldCollapserHover(event)\n                    {\n                        if ( event )\n                        {\n                            event.preventDefault();\n                        }\n\n                        // Set folded open status\n                        msNavigationService.setFoldedOpen(false);\n\n                        // Collapse everything\n                        $rootScope.$broadcast('msNavigation::collapse');\n\n                        // Remove body class\n                        bodyEl.removeClass('ms-navigation-folded-open');\n\n                        // Remove the fold collapser\n                        foldCollapserEl.remove();\n\n                        // Set fold expander\n                        setFoldExpander();\n                    }\n\n                    /**\n                     * Public access for toggling folded status externally\n                     */\n                    scope.toggleFolded = function ()\n                    {\n                        var folded = msNavigationService.getFolded();\n\n                        setFolded(!folded);\n                    };\n\n                    /**\n                     * On $stateChangeStart\n                     */\n                    scope.$on('$stateChangeStart', function ()\n                    {\n                        // Close the sidenav\n                        sidenav.close();\n                    });\n\n                    // Cleanup\n                    scope.$on('$destroy', function ()\n                    {\n                        foldCollapserEl.off('mouseenter touchstart');\n                        foldExpanderEl.off('mouseenter touchstart');\n                    });\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function MsNavigationNodeController($scope, $element, $rootScope, $animate, $state, msNavigationService)\n    {\n        var vm = this;\n\n        // Data\n        vm.element = $element;\n        vm.node = $scope.node;\n        vm.hasChildren = undefined;\n        vm.collapsed = undefined;\n        vm.collapsable = undefined;\n        vm.group = undefined;\n        vm.animateHeightClass = 'animate-height';\n\n        // Methods\n        vm.toggleCollapsed = toggleCollapsed;\n        vm.collapse = collapse;\n        vm.expand = expand;\n        vm.getClass = getClass;\n        vm.isHidden = isHidden;\n\n        //////////\n\n        init();\n\n        /**\n         * Initialize\n         */\n        function init()\n        {\n            // Setup the initial values\n\n            // Has children?\n            vm.hasChildren = vm.node.children.length > 0;\n\n            // Is group?\n            vm.group = !!(angular.isDefined(vm.node.group) && vm.node.group === true);\n\n            // Is collapsable?\n            if ( !vm.hasChildren || vm.group )\n            {\n                vm.collapsable = false;\n            }\n            else\n            {\n                vm.collapsable = !!(angular.isUndefined(vm.node.collapsable) || typeof vm.node.collapsable !== 'boolean' || vm.node.collapsable === true);\n            }\n\n            // Is collapsed?\n            if ( !vm.collapsable )\n            {\n                vm.collapsed = false;\n            }\n            else\n            {\n                vm.collapsed = !!(angular.isUndefined(vm.node.collapsed) || typeof vm.node.collapsed !== 'boolean' || vm.node.collapsed === true);\n            }\n\n            // Expand all parents if we have a matching state or\n            // the current state is a child of the node's state\n            if ( vm.node.state === $state.current.name || $state.includes(vm.node.state) )\n            {\n                // If state params are defined, make sure they are\n                // equal, otherwise do not set the active item\n                if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\n                {\n                    return;\n                }\n\n                $scope.$emit('msNavigation::stateMatched');\n\n                // Also store the current active menu item\n                msNavigationService.setActiveItem(vm.node, $scope);\n            }\n\n            $scope.$on('msNavigation::stateMatched', function ()\n            {\n                // Expand if the current scope is collapsable and is collapsed\n                if ( vm.collapsable && vm.collapsed )\n                {\n                    $scope.$evalAsync(function ()\n                    {\n                        vm.collapsed = false;\n                    });\n                }\n            });\n\n            // Listen for collapse event\n            $scope.$on('msNavigation::collapse', function (event, path)\n            {\n                if ( vm.collapsed || !vm.collapsable )\n                {\n                    return;\n                }\n\n                // If there is no path defined, collapse\n                if ( angular.isUndefined(path) )\n                {\n                    vm.collapse();\n                }\n                // If there is a path defined, do not collapse\n                // the items that are inside that path. This will\n                // prevent parent items from collapsing\n                else\n                {\n                    var givenPathParts = path.split('.'),\n                        activePathParts = [];\n\n                    var activeItem = msNavigationService.getActiveItem();\n                    if ( activeItem )\n                    {\n                        activePathParts = activeItem.node._path.split('.');\n                    }\n\n                    // Test for given path\n                    if ( givenPathParts.indexOf(vm.node._id) > -1 )\n                    {\n                        return;\n                    }\n\n                    // Test for active path\n                    if ( activePathParts.indexOf(vm.node._id) > -1 )\n                    {\n                        return;\n                    }\n\n                    vm.collapse();\n                }\n            });\n\n            // Listen for $stateChangeSuccess event\n            $scope.$on('$stateChangeSuccess', function ()\n            {\n                if ( vm.node.state === $state.current.name )\n                {\n                    // If state params are defined, make sure they are\n                    // equal, otherwise do not set the active item\n                    if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\n                    {\n                        return;\n                    }\n\n                    // Update active item on state change\n                    msNavigationService.setActiveItem(vm.node, $scope);\n\n                    // Collapse everything except the one we're using\n                    $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\n                }\n\n                // Expand the parents if we the current\n                // state is a child of the node's state\n                if ( $state.includes(vm.node.state) )\n                {\n                    // If state params are defined, make sure they are\n                    // equal, otherwise do not set the active item\n                    if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\n                    {\n                        return;\n                    }\n\n                    // Emit the stateMatched\n                    $scope.$emit('msNavigation::stateMatched');\n                }\n            });\n        }\n\n        /**\n         * Toggle collapsed\n         */\n        function toggleCollapsed()\n        {\n            if ( vm.collapsed )\n            {\n                vm.expand();\n            }\n            else\n            {\n                vm.collapse();\n            }\n        }\n\n        /**\n         * Collapse\n         */\n        function collapse()\n        {\n            // Grab the element that we are going to collapse\n            var collapseEl = vm.element.children('ul');\n\n            // Grab the height\n            var height = collapseEl[0].offsetHeight;\n\n            $scope.$evalAsync(function ()\n            {\n                // Set collapsed status\n                vm.collapsed = true;\n\n                // Add collapsing class to the node\n                vm.element.addClass('collapsing');\n\n                // Animate the height\n                $animate.animate(collapseEl,\n                    {\n                        'display': 'block',\n                        'height' : height + 'px'\n                    },\n                    {\n                        'height': '0px'\n                    },\n                    vm.animateHeightClass\n                ).then(\n                    function ()\n                    {\n                        // Clear the inline styles after animation done\n                        collapseEl.css({\n                            'display': '',\n                            'height' : ''\n                        });\n\n                        // Clear collapsing class from the node\n                        vm.element.removeClass('collapsing');\n                    }\n                );\n\n                // Broadcast the collapse event so child items can also be collapsed\n                $scope.$broadcast('msNavigation::collapse');\n            });\n        }\n\n        /**\n         * Expand\n         */\n        function expand()\n        {\n            // Grab the element that we are going to expand\n            var expandEl = vm.element.children('ul');\n\n            // Move the element out of the dom flow and\n            // make it block so we can get its height\n            expandEl.css({\n                'position'  : 'absolute',\n                'visibility': 'hidden',\n                'display'   : 'block',\n                'height'    : 'auto'\n            });\n\n            // Grab the height\n            var height = expandEl[0].offsetHeight;\n\n            // Reset the style modifications\n            expandEl.css({\n                'position'  : '',\n                'visibility': '',\n                'display'   : '',\n                'height'    : ''\n            });\n\n            $scope.$evalAsync(function ()\n            {\n                // Set collapsed status\n                vm.collapsed = false;\n\n                // Add expanding class to the node\n                vm.element.addClass('expanding');\n\n                // Animate the height\n                $animate.animate(expandEl,\n                    {\n                        'display': 'block',\n                        'height' : '0px'\n                    },\n                    {\n                        'height': height + 'px'\n                    },\n                    vm.animateHeightClass\n                ).then(\n                    function ()\n                    {\n                        // Clear the inline styles after animation done\n                        expandEl.css({\n                            'height': ''\n                        });\n\n                        // Clear expanding class from the node\n                        vm.element.removeClass('expanding');\n                    }\n                );\n\n                // If item expanded, broadcast the collapse event from rootScope so that the other expanded items\n                // can be collapsed. This is necessary for keeping only one parent expanded at any time\n                $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\n            });\n        }\n\n        /**\n         * Return the class\n         *\n         * @returns {*}\n         */\n        function getClass()\n        {\n            return vm.node.class;\n        }\n\n        /**\n         * Check if node should be hidden\n         *\n         * @returns {boolean}\n         */\n        function isHidden()\n        {\n            if ( angular.isDefined(vm.node.hidden) && angular.isFunction(vm.node.hidden) )\n            {\n                return vm.node.hidden();\n            }\n\n            return false;\n        }\n    }\n\n    /** @ngInject */\n    function msNavigationNodeDirective()\n    {\n        return {\n            restrict        : 'A',\n            bindToController: {\n                node: '=msNavigationNode'\n            },\n            controller      : 'MsNavigationNodeController as vm',\n            compile         : function (tElement)\n            {\n                tElement.addClass('ms-navigation-node');\n\n                return function postLink(scope, iElement, iAttrs, MsNavigationNodeCtrl)\n                {\n                    // Add custom classes\n                    iElement.addClass(MsNavigationNodeCtrl.getClass());\n\n                    // Add group class if it's a group\n                    if ( MsNavigationNodeCtrl.group )\n                    {\n                        iElement.addClass('group');\n                    }\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msNavigationItemDirective()\n    {\n        return {\n            restrict: 'A',\n            require : '^msNavigationNode',\n            compile : function (tElement)\n            {\n                tElement.addClass('ms-navigation-item');\n\n                return function postLink(scope, iElement, iAttrs, MsNavigationNodeCtrl)\n                {\n                    // If the item is collapsable...\n                    if ( MsNavigationNodeCtrl.collapsable )\n                    {\n                        iElement.on('click', MsNavigationNodeCtrl.toggleCollapsed);\n                    }\n\n                    // Cleanup\n                    scope.$on('$destroy', function ()\n                    {\n                        iElement.off('click');\n                    });\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msNavigationHorizontalDirective(msNavigationService)\n    {\n        return {\n            restrict   : 'E',\n            scope      : {\n                root: '@'\n            },\n            controller : 'MsNavigationController as vm',\n            templateUrl: 'app/core/directives/ms-navigation/templates/horizontal.html',\n            transclude : true,\n            compile    : function (tElement)\n            {\n                tElement.addClass('ms-navigation-horizontal');\n\n                return function postLink(scope)\n                {\n                    // Store the navigation in the service for public access\n                    msNavigationService.setNavigationScope(scope);\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function MsNavigationHorizontalNodeController($scope, $element, $rootScope, $state, msNavigationService)\n    {\n        var vm = this;\n\n        // Data\n        vm.element = $element;\n        vm.node = $scope.node;\n        vm.hasChildren = undefined;\n        vm.group = undefined;\n\n        // Methods\n        vm.getClass = getClass;\n\n        //////////\n\n        init();\n\n        /**\n         * Initialize\n         */\n        function init()\n        {\n            // Setup the initial values\n\n            // Is active\n            vm.isActive = false;\n\n            // Has children?\n            vm.hasChildren = vm.node.children.length > 0;\n\n            // Is group?\n            vm.group = !!(angular.isDefined(vm.node.group) && vm.node.group === true);\n\n            // Mark all parents as active if we have a matching state\n            // or the current state is a child of the node's state\n            if ( vm.node.state === $state.current.name || $state.includes(vm.node.state) )\n            {\n                // If state params are defined, make sure they are\n                // equal, otherwise do not set the active item\n                if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\n                {\n                    return;\n                }\n\n                $scope.$emit('msNavigation::stateMatched');\n\n                // Also store the current active menu item\n                msNavigationService.setActiveItem(vm.node, $scope);\n            }\n\n            $scope.$on('msNavigation::stateMatched', function ()\n            {\n                // Mark as active if has children\n                if ( vm.hasChildren )\n                {\n                    $scope.$evalAsync(function ()\n                    {\n                        vm.isActive = true;\n                    });\n                }\n            });\n\n            // Listen for clearActive event\n            $scope.$on('msNavigation::clearActive', function ()\n            {\n                if ( !vm.hasChildren )\n                {\n                    return;\n                }\n\n                var activePathParts = [];\n\n                var activeItem = msNavigationService.getActiveItem();\n                if ( activeItem )\n                {\n                    activePathParts = activeItem.node._path.split('.');\n                }\n\n                // Test for active path\n                if ( activePathParts.indexOf(vm.node._id) > -1 )\n                {\n                    $scope.$evalAsync(function ()\n                    {\n                        vm.isActive = true;\n                    });\n                }\n                else\n                {\n                    $scope.$evalAsync(function ()\n                    {\n                        vm.isActive = false;\n                    });\n                }\n\n            });\n\n            // Listen for $stateChangeSuccess event\n            $scope.$on('$stateChangeSuccess', function ()\n            {\n                if ( vm.node.state === $state.current.name || $state.includes(vm.node.state) )\n                {\n                    // If state params are defined, make sure they are\n                    // equal, otherwise do not set the active item\n                    if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\n                    {\n                        return;\n                    }\n\n                    // Update active item on state change\n                    msNavigationService.setActiveItem(vm.node, $scope);\n\n                    // Clear all active states except the one we're using\n                    $rootScope.$broadcast('msNavigation::clearActive');\n                }\n            });\n        }\n\n        /**\n         * Return the class\n         *\n         * @returns {*}\n         */\n        function getClass()\n        {\n            return vm.node.class;\n        }\n    }\n\n    /** @ngInject */\n    function msNavigationHorizontalNodeDirective()\n    {\n        return {\n            restrict        : 'A',\n            bindToController: {\n                node: '=msNavigationHorizontalNode'\n            },\n            controller      : 'MsNavigationHorizontalNodeController as vm',\n            compile         : function (tElement)\n            {\n                tElement.addClass('ms-navigation-horizontal-node');\n\n                return function postLink(scope, iElement, iAttrs, MsNavigationHorizontalNodeCtrl)\n                {\n                    // Add custom classes\n                    iElement.addClass(MsNavigationHorizontalNodeCtrl.getClass());\n\n                    // Add group class if it's a group\n                    if ( MsNavigationHorizontalNodeCtrl.group )\n                    {\n                        iElement.addClass('group');\n                    }\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msNavigationHorizontalItemDirective($mdMedia)\n    {\n        return {\n            restrict: 'A',\n            require : '^msNavigationHorizontalNode',\n            compile : function (tElement)\n            {\n                tElement.addClass('ms-navigation-horizontal-item');\n\n                return function postLink(scope, iElement, iAttrs, MsNavigationHorizontalNodeCtrl)\n                {\n                    iElement.on('click', onClick);\n\n                    function onClick()\n                    {\n                        if ( !MsNavigationHorizontalNodeCtrl.hasChildren || $mdMedia('gt-md') )\n                        {\n                            return;\n                        }\n\n                        iElement.toggleClass('expanded');\n                    }\n\n                    // Cleanup\n                    scope.$on('$destroy', function ()\n                    {\n                        iElement.off('click');\n                    });\n                };\n            }\n        };\n    }\n\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .factory('msNavFoldService', msNavFoldService)\n        .directive('msNavIsFolded', msNavIsFoldedDirective)\n        .controller('MsNavController', MsNavController)\n        .directive('msNav', msNavDirective)\n        .directive('msNavTitle', msNavTitleDirective)\n        .directive('msNavButton', msNavButtonDirective)\n        .directive('msNavToggle', msNavToggleDirective);\n\n    /** @ngInject */\n    function msNavFoldService()\n    {\n        var foldable = {};\n\n        var service = {\n            setFoldable    : setFoldable,\n            isNavFoldedOpen: isNavFoldedOpen,\n            toggleFold     : toggleFold,\n            openFolded     : openFolded,\n            closeFolded    : closeFolded\n        };\n\n        return service;\n\n        //////////\n\n        /**\n         * Set the foldable\n         *\n         * @param scope\n         * @param element\n         */\n        function setFoldable(scope, element)\n        {\n            foldable = {\n                'scope'  : scope,\n                'element': element\n            };\n        }\n\n        /**\n         * Is folded open\n         */\n        function isNavFoldedOpen()\n        {\n            return foldable.scope.isNavFoldedOpen();\n        }\n\n        /**\n         * Toggle fold\n         */\n        function toggleFold()\n        {\n            foldable.scope.toggleFold();\n        }\n\n        /**\n         * Open folded navigation\n         */\n        function openFolded()\n        {\n            foldable.scope.openFolded();\n        }\n\n        /**\n         * Close folded navigation\n         */\n        function closeFolded()\n        {\n            foldable.scope.closeFolded();\n        }\n    }\n\n    /** @ngInject */\n    function msNavIsFoldedDirective($document, $rootScope, msNavFoldService)\n    {\n        return {\n            restrict: 'A',\n            link    : function (scope, iElement, iAttrs)\n            {\n                var isFolded = (iAttrs.msNavIsFolded === 'true'),\n                    isFoldedOpen = false,\n                    body = angular.element($document[0].body),\n                    openOverlay = angular.element('<div id=\"ms-nav-fold-open-overlay\"></div>'),\n                    closeOverlay = angular.element('<div id=\"ms-nav-fold-close-overlay\"></div>'),\n                    sidenavEl = iElement.parent();\n\n                // Initialize the service\n                msNavFoldService.setFoldable(scope, iElement, isFolded);\n\n                // Set the fold status for the first time\n                if ( isFolded )\n                {\n                    fold();\n                }\n                else\n                {\n                    unfold();\n                }\n\n                /**\n                 * Is nav folded open\n                 */\n                function isNavFoldedOpen()\n                {\n                    return isFoldedOpen;\n                }\n\n                /**\n                 * Toggle fold\n                 */\n                function toggleFold()\n                {\n                    isFolded = !isFolded;\n\n                    if ( isFolded )\n                    {\n                        fold();\n                    }\n                    else\n                    {\n                        unfold();\n                    }\n                }\n\n                /**\n                 * Fold the navigation\n                 */\n                function fold()\n                {\n                    // Add classes\n                    body.addClass('ms-nav-folded');\n\n                    // Collapse everything and scroll to the top\n                    $rootScope.$broadcast('msNav::forceCollapse');\n                    iElement.scrollTop(0);\n\n                    // Append the openOverlay to the element\n                    sidenavEl.append(openOverlay);\n\n                    // Event listeners\n                    openOverlay.on('mouseenter touchstart', function (event)\n                    {\n                        openFolded(event);\n                        isFoldedOpen = true;\n                    });\n                }\n\n                /**\n                 * Open folded navigation\n                 */\n                function openFolded(event)\n                {\n                    if ( angular.isDefined(event) )\n                    {\n                        event.preventDefault();\n                    }\n\n                    body.addClass('ms-nav-folded-open');\n\n                    // Update the location\n                    $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n                    // Remove open overlay\n                    sidenavEl.find(openOverlay).remove();\n\n                    // Append close overlay and bind its events\n                    sidenavEl.parent().append(closeOverlay);\n                    closeOverlay.on('mouseenter touchstart', function (event)\n                    {\n                        closeFolded(event);\n                        isFoldedOpen = false;\n                    });\n                }\n\n                /**\n                 * Close folded navigation\n                 */\n                function closeFolded(event)\n                {\n                    if ( angular.isDefined(event) )\n                    {\n                        event.preventDefault();\n                    }\n\n                    // Collapse everything and scroll to the top\n                    $rootScope.$broadcast('msNav::forceCollapse');\n                    iElement.scrollTop(0);\n\n                    body.removeClass('ms-nav-folded-open');\n\n                    // Remove close overlay\n                    sidenavEl.parent().find(closeOverlay).remove();\n\n                    // Append open overlay and bind its events\n                    sidenavEl.append(openOverlay);\n                    openOverlay.on('mouseenter touchstart', function (event)\n                    {\n                        openFolded(event);\n                        isFoldedOpen = true;\n                    });\n                }\n\n                /**\n                 * Unfold the navigation\n                 */\n                function unfold()\n                {\n                    body.removeClass('ms-nav-folded ms-nav-folded-open');\n\n                    // Update the location\n                    $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n                    iElement.off('mouseenter mouseleave');\n                }\n\n                // Expose functions to the scope\n                scope.toggleFold = toggleFold;\n                scope.openFolded = openFolded;\n                scope.closeFolded = closeFolded;\n                scope.isNavFoldedOpen = isNavFoldedOpen;\n\n                // Cleanup\n                scope.$on('$destroy', function ()\n                {\n                    openOverlay.off('mouseenter touchstart');\n                    closeOverlay.off('mouseenter touchstart');\n                    iElement.off('mouseenter mouseleave');\n                });\n            }\n        };\n    }\n\n\n    /** @ngInject */\n    function MsNavController()\n    {\n        var vm = this,\n            disabled = false,\n            toggleItems = [],\n            lockedItems = [];\n\n        // Data\n\n        // Methods\n        vm.isDisabled = isDisabled;\n        vm.enable = enable;\n        vm.disable = disable;\n        vm.setToggleItem = setToggleItem;\n        vm.getLockedItems = getLockedItems;\n        vm.setLockedItem = setLockedItem;\n        vm.clearLockedItems = clearLockedItems;\n\n        //////////\n\n        /**\n         * Is navigation disabled\n         *\n         * @returns {boolean}\n         */\n        function isDisabled()\n        {\n            return disabled;\n        }\n\n        /**\n         * Disable the navigation\n         */\n        function disable()\n        {\n            disabled = true;\n        }\n\n        /**\n         * Enable the navigation\n         */\n        function enable()\n        {\n            disabled = false;\n        }\n\n        /**\n         * Set toggle item\n         *\n         * @param element\n         * @param scope\n         */\n        function setToggleItem(element, scope)\n        {\n            toggleItems.push({\n                'element': element,\n                'scope'  : scope\n            });\n        }\n\n        /**\n         * Get locked items\n         *\n         * @returns {Array}\n         */\n        function getLockedItems()\n        {\n            return lockedItems;\n        }\n\n        /**\n         * Set locked item\n         *\n         * @param element\n         * @param scope\n         */\n        function setLockedItem(element, scope)\n        {\n            lockedItems.push({\n                'element': element,\n                'scope'  : scope\n            });\n        }\n\n        /**\n         * Clear locked items list\n         */\n        function clearLockedItems()\n        {\n            lockedItems = [];\n        }\n    }\n\n    /** @ngInject */\n    function msNavDirective($rootScope, $mdComponentRegistry, msNavFoldService)\n    {\n        return {\n            restrict  : 'E',\n            scope     : {},\n            controller: 'MsNavController',\n            compile   : function (tElement)\n            {\n                tElement.addClass('ms-nav');\n\n                return function postLink(scope)\n                {\n                    // Update toggle status according to the ui-router current state\n                    $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n                    // Update toggles on state changes\n                    var stateChangeSuccessEvent = $rootScope.$on('$stateChangeSuccess', function ()\n                    {\n                        $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n                        // Close navigation sidenav on stateChangeSuccess\n                        $mdComponentRegistry.when('navigation').then(function (navigation)\n                        {\n                            navigation.close();\n\n                            if ( msNavFoldService.isNavFoldedOpen() )\n                            {\n                                msNavFoldService.closeFolded();\n                            }\n                        });\n                    });\n\n                    // Cleanup\n                    scope.$on('$destroy', function ()\n                    {\n                        stateChangeSuccessEvent();\n                    });\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msNavTitleDirective()\n    {\n        return {\n            restrict: 'A',\n            compile : function (tElement)\n            {\n                tElement.addClass('ms-nav-title');\n\n                return function postLink()\n                {\n\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msNavButtonDirective()\n    {\n        return {\n            restrict: 'AE',\n            compile : function (tElement)\n            {\n                tElement.addClass('ms-nav-button');\n\n                return function postLink()\n                {\n\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msNavToggleDirective($rootScope, $q, $animate, $state)\n    {\n        return {\n            restrict: 'A',\n            require : '^msNav',\n            scope   : true,\n            compile : function (tElement, tAttrs)\n            {\n                tElement.addClass('ms-nav-toggle');\n\n                // Add collapsed attr\n                if ( angular.isUndefined(tAttrs.collapsed) )\n                {\n                    tAttrs.collapsed = true;\n                }\n\n                tElement.attr('collapsed', tAttrs.collapsed);\n\n                return function postLink(scope, iElement, iAttrs, MsNavCtrl)\n                {\n                    var classes = {\n                        expanded         : 'expanded',\n                        expandAnimation  : 'expand-animation',\n                        collapseAnimation: 'collapse-animation'\n                    };\n\n                    // Store all related states\n                    var links = iElement.find('a');\n                    var states = [];\n                    var regExp = /\\(.*\\)/g;\n\n                    angular.forEach(links, function (link)\n                    {\n                        var state = angular.element(link).attr('ui-sref');\n\n                        if ( angular.isUndefined(state) )\n                        {\n                            return;\n                        }\n\n                        // Remove any parameter definition from the state name before storing it\n                        state = state.replace(regExp, '');\n\n                        states.push(state);\n                    });\n\n                    // Store toggle-able element and its scope in the main nav controller\n                    MsNavCtrl.setToggleItem(iElement, scope);\n\n                    // Click handler\n                    iElement.children('.ms-nav-button').on('click', toggle);\n\n                    // Toggle function\n                    function toggle()\n                    {\n                        // If navigation is disabled, do nothing...\n                        if ( MsNavCtrl.isDisabled() )\n                        {\n                            return;\n                        }\n\n                        // Disable the entire navigation to prevent spamming\n                        MsNavCtrl.disable();\n\n                        if ( isCollapsed() )\n                        {\n                            // Clear the locked items list\n                            MsNavCtrl.clearLockedItems();\n\n                            // Emit pushToLockedList event\n                            scope.$emit('msNav::pushToLockedList');\n\n                            // Collapse everything but locked items\n                            $rootScope.$broadcast('msNav::collapse');\n\n                            // Expand and then...\n                            expand().then(function ()\n                            {\n                                // Enable the entire navigation after animations completed\n                                MsNavCtrl.enable();\n                            });\n                        }\n                        else\n                        {\n                            // Collapse with all children\n                            scope.$broadcast('msNav::forceCollapse');\n                        }\n                    }\n\n                    // Cleanup\n                    scope.$on('$destroy', function ()\n                    {\n                        iElement.children('.ms-nav-button').off('click');\n                    });\n\n                    /*---------------------*/\n                    /* Scope Events        */\n                    /*---------------------*/\n\n                    /**\n                     * Collapse everything but locked items\n                     */\n                    scope.$on('msNav::collapse', function ()\n                    {\n                        // Only collapse toggles that are not locked\n                        var lockedItems = MsNavCtrl.getLockedItems();\n                        var locked = false;\n\n                        angular.forEach(lockedItems, function (lockedItem)\n                        {\n                            if ( angular.equals(lockedItem.scope, scope) )\n                            {\n                                locked = true;\n                            }\n                        });\n\n                        if ( locked )\n                        {\n                            return;\n                        }\n\n                        // Collapse and then...\n                        collapse().then(function ()\n                        {\n                            // Enable the entire navigation after animations completed\n                            MsNavCtrl.enable();\n                        });\n                    });\n\n                    /**\n                     * Collapse everything\n                     */\n                    scope.$on('msNav::forceCollapse', function ()\n                    {\n                        // Collapse and then...\n                        collapse().then(function ()\n                        {\n                            // Enable the entire navigation after animations completed\n                            MsNavCtrl.enable();\n                        });\n                    });\n\n                    /**\n                     * Expand toggles that match with the current states\n                     */\n                    scope.$on('msNav::expandMatchingToggles', function ()\n                    {\n                        var currentState = $state.current.name;\n                        var shouldExpand = false;\n\n                        angular.forEach(states, function (state)\n                        {\n                            if ( currentState === state )\n                            {\n                                shouldExpand = true;\n                            }\n                        });\n\n                        if ( shouldExpand )\n                        {\n                            expand();\n                        }\n                        else\n                        {\n                            collapse();\n                        }\n                    });\n\n                    /**\n                     * Add toggle to the locked list\n                     */\n                    scope.$on('msNav::pushToLockedList', function ()\n                    {\n                        // Set expanded item on main nav controller\n                        MsNavCtrl.setLockedItem(iElement, scope);\n                    });\n\n                    /*---------------------*/\n                    /* Internal functions  */\n                    /*---------------------*/\n\n                    /**\n                     * Is element collapsed\n                     *\n                     * @returns {bool}\n                     */\n                    function isCollapsed()\n                    {\n                        return iElement.attr('collapsed') === 'true';\n                    }\n\n                    /**\n                     * Is element expanded\n                     *\n                     * @returns {bool}\n                     */\n                    function isExpanded()\n                    {\n                        return !isCollapsed();\n                    }\n\n                    /**\n                     * Expand the toggle\n                     *\n                     * @returns $promise\n                     */\n                    function expand()\n                    {\n                        // Create a new deferred object\n                        var deferred = $q.defer();\n\n                        // If the menu item is already expanded, do nothing..\n                        if ( isExpanded() )\n                        {\n                            // Reject the deferred object\n                            deferred.reject({'error': true});\n\n                            // Return the promise\n                            return deferred.promise;\n                        }\n\n                        // Set element attr\n                        iElement.attr('collapsed', false);\n\n                        // Grab the element to expand\n                        var elementToExpand = angular.element(iElement.find('ms-nav-toggle-items')[0]);\n\n                        // Move the element out of the dom flow and\n                        // make it block so we can get its height\n                        elementToExpand.css({\n                            'position'  : 'absolute',\n                            'visibility': 'hidden',\n                            'display'   : 'block',\n                            'height'    : 'auto'\n                        });\n\n                        // Grab the height\n                        var height = elementToExpand[0].offsetHeight;\n\n                        // Reset the style modifications\n                        elementToExpand.css({\n                            'position'  : '',\n                            'visibility': '',\n                            'display'   : '',\n                            'height'    : ''\n                        });\n\n                        // Animate the height\n                        scope.$evalAsync(function ()\n                        {\n                            $animate.animate(elementToExpand,\n                                {\n                                    'display': 'block',\n                                    'height' : '0px'\n                                },\n                                {\n                                    'height': height + 'px'\n                                },\n                                classes.expandAnimation\n                            ).then(\n                                function ()\n                                {\n                                    // Add expanded class\n                                    elementToExpand.addClass(classes.expanded);\n\n                                    // Clear the inline styles after animation done\n                                    elementToExpand.css({'height': ''});\n\n                                    // Resolve the deferred object\n                                    deferred.resolve({'success': true});\n                                }\n                            );\n                        });\n\n                        // Return the promise\n                        return deferred.promise;\n                    }\n\n                    /**\n                     * Collapse the toggle\n                     *\n                     * @returns $promise\n                     */\n                    function collapse()\n                    {\n                        // Create a new deferred object\n                        var deferred = $q.defer();\n\n                        // If the menu item is already collapsed, do nothing..\n                        if ( isCollapsed() )\n                        {\n                            // Reject the deferred object\n                            deferred.reject({'error': true});\n\n                            // Return the promise\n                            return deferred.promise;\n                        }\n\n                        // Set element attr\n                        iElement.attr('collapsed', true);\n\n                        // Grab the element to collapse\n                        var elementToCollapse = angular.element(iElement.find('ms-nav-toggle-items')[0]);\n\n                        // Grab the height\n                        var height = elementToCollapse[0].offsetHeight;\n\n                        // Animate the height\n                        scope.$evalAsync(function ()\n                        {\n                            $animate.animate(elementToCollapse,\n                                {\n                                    'height': height + 'px'\n                                },\n                                {\n                                    'height': '0px'\n                                },\n                                classes.collapseAnimation\n                            ).then(\n                                function ()\n                                {\n                                    // Remove expanded class\n                                    elementToCollapse.removeClass(classes.expanded);\n\n                                    // Clear the inline styles after animation done\n                                    elementToCollapse.css({\n                                        'display': '',\n                                        'height' : ''\n                                    });\n\n                                    // Resolve the deferred object\n                                    deferred.resolve({'success': true});\n                                }\n                            );\n                        });\n\n                        // Return the promise\n                        return deferred.promise;\n                    }\n                };\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .controller('msMasonryController', msMasonryController)\n        .directive('msMasonry', msMasonry)\n        .directive('msMasonryItem', msMasonryItem);\n\n    /** @ngInject */\n    function msMasonryController($scope, $window, $mdMedia, $timeout)\n    {\n        var vm = this,\n            defaultOpts = {\n                columnCount     : 5,\n                respectItemOrder: false,\n                reLayoutDebounce: 400,\n                responsive      : {\n                    md: 3,\n                    sm: 2,\n                    xs: 1\n                }\n            },\n            reLayoutTimeout = true;\n\n        vm.options = null;\n        vm.container = [];\n        vm.containerPos = '';\n        vm.columnWidth = '';\n        vm.items = [];\n\n        // Methods\n        vm.reLayout = reLayout;\n        vm.initialize = initialize;\n        vm.waitImagesLoaded = waitImagesLoaded;\n\n        function initialize()\n        {\n            vm.options = !vm.options ? defaultOpts : angular.extend(defaultOpts, vm.options);\n\n\n            watchContainerResize();\n        }\n\n        $scope.$on('msMasonry:relayout', function ()\n        {\n            reLayout();\n        });\n\n        function waitImagesLoaded(element, callback)\n        {\n            if ( typeof imagesLoaded !== 'undefined' )\n            {\n                var imgLoad = $window.imagesLoaded(element);\n\n                imgLoad.on('done', function ()\n                {\n                    callback();\n                });\n            }\n            else\n            {\n                callback();\n            }\n        }\n\n        function watchContainerResize()\n        {\n            $scope.$watch(\n                function ()\n                {\n                    return vm.container.width();\n                },\n                function (newValue, oldValue)\n                {\n                    if ( newValue !== oldValue )\n                    {\n                        reLayout();\n                    }\n                }\n            );\n        }\n\n        function reLayout()\n        {\n            // Debounce for relayout\n            if ( reLayoutTimeout )\n            {\n                $timeout.cancel(reLayoutTimeout);\n            }\n\n            reLayoutTimeout = $timeout(function ()\n            {\n                start();\n\n                $scope.$broadcast('msMasonry:relayoutFinished');\n\n            }, vm.options.reLayoutDebounce);\n\n            // Start relayout\n            function start()\n            {\n                vm.containerPos = vm.container[0].getBoundingClientRect();\n\n                updateColumnOptions();\n\n                $scope.$broadcast('msMasonry:relayoutStarted');\n\n                vm.items = vm.container.find('ms-masonry-item');\n\n                //initialize lastRowBottomArr\n                var referenceArr = Array.apply(null, new Array(vm.columnCount)).map(function ()\n                {\n                    return 0;\n                });\n\n                // set item positions\n                for ( var i = 0; i < vm.items.length; i++ )\n                {\n                    var item = vm.items[i],\n                        xPos, yPos, column, refTop;\n\n                    item = angular.element(item);\n\n                    if ( item.scope() )\n                    {\n                        item.scope().$broadcast('msMasonryItem:startReLayout');\n                    }\n\n                    item.css({'width': vm.columnWidth});\n\n                    if ( vm.options.respectItemOrder )\n                    {\n                        column = i % vm.columnCount;\n                        refTop = referenceArr[column];\n                    }\n                    else\n                    {\n                        refTop = Math.min.apply(Math, referenceArr);\n                        column = referenceArr.indexOf(refTop);\n                    }\n\n                    referenceArr[column] = refTop + item[0].getBoundingClientRect().height;\n\n                    xPos = Math.round(column * vm.columnWidth);\n                    yPos = refTop;\n\n                    item.css({'transform': 'translate3d(' + xPos + 'px,' + yPos + 'px,0px)'});\n                    item.addClass('placed');\n\n                    if ( item.scope() )\n                    {\n                        item.scope().$broadcast('msMasonryItem:finishReLayout');\n                    }\n                }\n            }\n        }\n\n        function updateColumnOptions()\n        {\n            vm.columnCount = vm.options.columnCount;\n\n            if ( $mdMedia('gt-md') )\n            {\n                vm.columnCount = vm.options.columnCount;\n            }\n            else if ( $mdMedia('md') )\n            {\n                vm.columnCount = (vm.columnCount > vm.options.responsive.md ? vm.options.responsive.md : vm.columnCount);\n            }\n            else if ( $mdMedia('sm') )\n            {\n                vm.columnCount = (vm.columnCount > vm.options.responsive.sm ? vm.options.responsive.sm : vm.columnCount);\n            }\n            else\n            {\n                vm.columnCount = vm.options.responsive.xs;\n            }\n\n            vm.columnWidth = vm.containerPos.width / vm.columnCount;\n\n        }\n    }\n\n    /** @ngInject */\n    function msMasonry($timeout)\n    {\n        return {\n            restrict  : 'AEC',\n            controller: 'msMasonryController',\n            compile   : compile\n        };\n        function compile(element, attributes)\n        {\n            return {\n                pre : function preLink(scope, iElement, iAttrs, controller)\n                {\n                    controller.options = angular.fromJson(attributes.options || '{}');\n                    controller.container = element;\n                },\n                post: function postLink(scope, iElement, iAttrs, controller)\n                {\n                    $timeout(function ()\n                    {\n                        controller.initialize();\n                    });\n                }\n            };\n        }\n    }\n\n    /** @ngInject */\n    function msMasonryItem()\n    {\n        return {\n            restrict: 'AEC',\n            require : '^msMasonry',\n            priority: 1,\n            link    : link\n        };\n\n        function link(scope, element, attributes, controller)\n        {\n            controller.waitImagesLoaded(element, function ()\n            {\n                controller.reLayout();\n\n            });\n\n            scope.$on('msMasonryItem:finishReLayout', function ()\n            {\n                scope.$watch(function ()\n                {\n                    return element.height();\n                }, function (newVal, oldVal)\n                {\n                    if ( newVal !== oldVal )\n                    {\n                        controller.reLayout();\n                    }\n                });\n            });\n\n            element.on('$destroy', function ()\n            {\n                controller.reLayout();\n            });\n        }\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .controller('msMaterialColorPickerController', msMaterialColorPickerController)\n        .directive('msMaterialColorPicker', msMaterialColorPicker);\n\n    /** @ngInject */\n    function msMaterialColorPickerController($scope, $mdColorPalette, $mdMenu, fuseGenerator)\n    {\n        var vm = this;\n        vm.palettes = $mdColorPalette; // Material Color Palette\n        vm.selectedPalette = false;\n        vm.selectedHues = false;\n        $scope.$selectedColor = {};\n\n        // Methods\n        vm.activateHueSelection = activateHueSelection;\n        vm.selectColor = selectColor;\n        vm.removeColor = removeColor;\n\n        /**\n         * Initialize / Watch model changes\n         */\n        $scope.$watch('ngModel', setSelectedColor);\n\n        /**\n         * Activate Hue Selection\n         * @param palette\n         * @param hues\n         */\n        function activateHueSelection(palette, hues)\n        {\n            vm.selectedPalette = palette;\n            vm.selectedHues = hues;\n        }\n\n        /**\n         * Select Color\n         * @type {selectColor}\n         */\n        function selectColor(palette, hue)\n        {\n            // Update Selected Color\n            updateSelectedColor(palette, hue);\n\n            // Update Model Value\n            updateModel();\n\n            // Hide The picker\n            $mdMenu.hide();\n        }\n\n        function removeColor()\n        {\n            vm.selectedColor = {\n                palette: '',\n                hue    : '',\n                class  : ''\n            };\n\n            activateHueSelection(false, false);\n\n            updateModel();\n        }\n\n        /**\n         * Set SelectedColor by model type\n         */\n        function setSelectedColor()\n        {\n            if ( !vm.modelCtrl.$viewValue || vm.modelCtrl.$viewValue === '' )\n            {\n                removeColor();\n                return;\n            }\n\n            var palette, hue;\n\n            // If ModelType Class\n            if ( vm.msModelType === 'class' )\n            {\n                var color = vm.modelCtrl.$viewValue.split('-');\n                if ( color.length >= 5 )\n                {\n                    palette = color[1] + '-' + color[2];\n                    hue = color[3];\n                }\n                else\n                {\n                    palette = color[1];\n                    hue = color[2];\n                }\n            }\n\n            // If ModelType Object\n            else if ( vm.msModelType === 'obj' )\n            {\n                palette = vm.modelCtrl.$viewValue.palette;\n                hue = vm.modelCtrl.$viewValue.hue || 500;\n            }\n\n            // Update Selected Color\n            updateSelectedColor(palette, hue);\n        }\n\n        /**\n         * Update Selected Color\n         * @param palette\n         * @param hue\n         */\n        function updateSelectedColor(palette, hue)\n        {\n            vm.selectedColor = {\n                palette     : palette,\n                hue         : hue,\n                class       : 'md-' + palette + '-' + hue + '-bg',\n                bgColorValue: fuseGenerator.rgba(vm.palettes[palette][hue].value),\n                fgColorValue: fuseGenerator.rgba(vm.palettes[palette][hue].contrast)\n            };\n\n            // If Model object not Equals the selectedColor update it\n            // it can be happen when the model only have pallete and hue values\n            if ( vm.msModelType === 'obj' && !angular.equals(vm.selectedColor, vm.modelCtrl.$viewValue) )\n            {\n                // Update Model Value\n                updateModel();\n            }\n\n            activateHueSelection(palette, vm.palettes[palette]);\n\n            $scope.$selectedColor = vm.selectedColor;\n        }\n\n        /**\n         * Update Model Value by model type\n         */\n        function updateModel()\n        {\n            if ( vm.msModelType === 'class' )\n            {\n                vm.modelCtrl.$setViewValue(vm.selectedColor.class);\n            }\n            else if ( vm.msModelType === 'obj' )\n            {\n                vm.modelCtrl.$setViewValue(vm.selectedColor);\n            }\n        }\n    }\n\n    /** @ngInject */\n    function msMaterialColorPicker()\n    {\n        return {\n            require    : ['msMaterialColorPicker', 'ngModel'],\n            restrict   : 'E',\n            scope      : {\n                ngModel    : '=',\n                msModelType: '@?'\n            },\n            controller : 'msMaterialColorPickerController as vm',\n            transclude : true,\n            templateUrl: 'app/core/directives/ms-material-color-picker/ms-material-color-picker.html',\n            link       : function (scope, element, attrs, controllers, transclude)\n            {\n                var ctrl = controllers[0];\n\n                /**\n                 *  Pass model controller to directive controller\n                 */\n                ctrl.modelCtrl = controllers[1];\n\n                /**\n                 * ModelType: 'obj', 'class'(default)\n                 * @type {string|string}\n                 */\n                ctrl.msModelType = scope.msModelType || 'class';\n\n                transclude(scope, function (clone)\n                {\n                    clone = clone.filter(function (i, el)\n                    {\n                        return ( el.nodeType === 1 ) ? true : false;\n                    });\n\n                    if ( clone.length )\n                    {\n                        element.find('ms-color-picker-button').replaceWith(clone);\n                    }\n                });\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .directive('msInfoBar', msInfoBarDirective);\n\n    /** @ngInject */\n    function msInfoBarDirective($document)\n    {\n        return {\n            restrict   : 'E',\n            scope      : {},\n            transclude : true,\n            templateUrl: 'app/core/directives/ms-info-bar/ms-info-bar.html',\n            link       : function (scope, iElement)\n            {\n                var body = $document.find('body'),\n                    bodyClass = 'ms-info-bar-active';\n\n                // Add body class\n                body.addClass(bodyClass);\n\n                /**\n                 * Remove the info bar\n                 */\n                function removeInfoBar()\n                {\n                    body.removeClass(bodyClass);\n                    iElement.remove();\n                    scope.$destroy();\n                }\n\n                // Expose functions\n                scope.removeInfoBar = removeInfoBar;\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .controller('MsFormWizardController', MsFormWizardController)\n        .directive('msFormWizard', msFormWizardDirective)\n        .directive('msFormWizardForm', msFormWizardFormDirective)\n    ;\n\n    /** @ngInject */\n    function MsFormWizardController()\n    {\n        var vm = this;\n\n        // Data\n        vm.forms = [];\n        vm.selectedIndex = 0;\n\n        // Methods\n        vm.registerForm = registerForm;\n\n        vm.previousStep = previousStep;\n        vm.nextStep = nextStep;\n        vm.firstStep = firstStep;\n        vm.lastStep = lastStep;\n\n        vm.totalSteps = totalSteps;\n        vm.isFirstStep = isFirstStep;\n        vm.isLastStep = isLastStep;\n\n        vm.currentStepInvalid = currentStepInvalid;\n        vm.previousStepInvalid = previousStepInvalid;\n        vm.formsIncomplete = formsIncomplete;\n        vm.resetForm = resetForm;\n\n        //////////\n\n        /**\n         * Register form\n         *\n         * @param form\n         */\n        function registerForm(form)\n        {\n            vm.forms.push(form);\n        }\n\n        /**\n         * Go to previous step\n         */\n        function previousStep()\n        {\n            if ( isFirstStep() )\n            {\n                return;\n            }\n\n            vm.selectedIndex--;\n        }\n\n        /**\n         * Go to next step\n         */\n        function nextStep()\n        {\n            if ( isLastStep() )\n            {\n                return;\n            }\n\n            vm.selectedIndex++;\n        }\n\n        /**\n         * Go to first step\n         */\n        function firstStep()\n        {\n            vm.selectedIndex = 0;\n        }\n\n        /**\n         * Go to last step\n         */\n        function lastStep()\n        {\n            vm.selectedIndex = totalSteps() - 1;\n        }\n\n        /**\n         * Return total steps\n         *\n         * @returns {int}\n         */\n        function totalSteps()\n        {\n            return vm.forms.length;\n        }\n\n        /**\n         * Is first step?\n         *\n         * @returns {boolean}\n         */\n        function isFirstStep()\n        {\n            return vm.selectedIndex === 0;\n        }\n\n        /**\n         * Is last step?\n         *\n         * @returns {boolean}\n         */\n        function isLastStep()\n        {\n            return vm.selectedIndex === totalSteps() - 1;\n        }\n\n        /**\n         * Is current step invalid?\n         *\n         * @returns {boolean}\n         */\n        function currentStepInvalid()\n        {\n            return angular.isDefined(vm.forms[vm.selectedIndex]) && vm.forms[vm.selectedIndex].$invalid;\n        }\n\n        /**\n         * Is previous step invalid?\n         *\n         * @returns {boolean}\n         */\n        function previousStepInvalid()\n        {\n            return vm.selectedIndex > 0 && angular.isDefined(vm.forms[vm.selectedIndex - 1]) && vm.forms[vm.selectedIndex - 1].$invalid;\n        }\n\n        /**\n         * Check if there is any incomplete forms\n         *\n         * @returns {boolean}\n         */\n        function formsIncomplete()\n        {\n            for ( var x = 0; x < vm.forms.length; x++ )\n            {\n                if ( vm.forms[x].$invalid )\n                {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        /**\n         * Reset form\n         */\n        function resetForm()\n        {\n            // Go back to the first step\n            vm.selectedIndex = 0;\n\n            // Make sure all the forms are back in the $pristine & $untouched status\n            for ( var x = 0; x < vm.forms.length; x++ )\n            {\n                vm.forms[x].$setPristine();\n                vm.forms[x].$setUntouched();\n            }\n        }\n    }\n\n    /** @ngInject */\n    function msFormWizardDirective()\n    {\n        return {\n            restrict  : 'E',\n            scope     : true,\n            controller: 'MsFormWizardController as msWizard',\n            compile   : function (tElement)\n            {\n                tElement.addClass('ms-form-wizard');\n\n                return function postLink()\n                {\n\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msFormWizardFormDirective()\n    {\n        return {\n            restrict: 'A',\n            require : ['form', '^msFormWizard'],\n            compile : function (tElement)\n            {\n                tElement.addClass('ms-form-wizard-form');\n\n                return function postLink(scope, iElement, iAttrs, ctrls)\n                {\n                    var formCtrl = ctrls[0],\n                        MsFormWizardCtrl = ctrls[1];\n\n                    MsFormWizardCtrl.registerForm(formCtrl);\n                };\n            }\n        };\n    }\n\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .provider('msDatepickerFixConfig', msDatepickerFixConfigProvider)\n        .directive('msDatepickerFix', msDatepickerFix);\n\n    /** @ngInject */\n    function msDatepickerFixConfigProvider()\n    {\n        var service = this;\n\n        // Default configuration\n        var defaultConfig = {\n            // To view\n            formatter: function (val)\n            {\n                if ( !val )\n                {\n                    return '';\n                }\n\n                return val === '' ? val : new Date(val);\n            },\n            // To model\n            parser   : function (val)\n            {\n                if ( !val )\n                {\n                    return '';\n                }\n\n                return moment(val).add(moment(val).utcOffset(), 'm').toDate();\n            }\n        };\n\n        // Methods\n        service.config = config;\n\n        //////////\n\n        /**\n         * Extend default configuration with the given one\n         *\n         * @param configuration\n         */\n        function config(configuration)\n        {\n            defaultConfig = angular.extend({}, defaultConfig, configuration);\n        }\n\n        /**\n         * Service\n         */\n        service.$get = function ()\n        {\n            return defaultConfig;\n        };\n    }\n\n    /** @ngInject */\n    function msDatepickerFix(msDatepickerFixConfig)\n    {\n        return {\n            require : 'ngModel',\n            priority: 1,\n            link    : function (scope, elem, attrs, ngModel)\n            {\n                ngModel.$formatters.push(msDatepickerFixConfig.formatter); // to view\n                ngModel.$parsers.push(msDatepickerFixConfig.parser); // to model\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .directive('msCard', msCardDirective);\n\n    /** @ngInject */\n    function msCardDirective()\n    {\n        return {\n            restrict: 'E',\n            scope   : {\n                templatePath: '=template',\n                card        : '=ngModel',\n                vm          : '=viewModel'\n            },\n            template: '<div class=\"ms-card-content-wrapper\" ng-include=\"templatePath\" onload=\"cardTemplateLoaded()\"></div>',\n            compile : function (tElement)\n            {\n                // Add class\n                tElement.addClass('ms-card');\n\n                return function postLink(scope, iElement)\n                {\n                    // Methods\n                    scope.cardTemplateLoaded = cardTemplateLoaded;\n\n                    //////////\n\n                    /**\n                     * Emit cardTemplateLoaded event\n                     */\n                    function cardTemplateLoaded()\n                    {\n                        scope.$emit('msCard::cardTemplateLoaded', iElement);\n                    }\n                };\n            }\n        };\n    }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.services.workday', [])\n    .service('WorkdayService', WorkdayService);\n\n  /** @ngInject */\n  function WorkdayService($q, $rootScope, $interval, api, Session, WORKDAY_STATUSES, Workday) {\n\n    var service = this;\n\n    service.status = WORKDAY_STATUSES.NOT_STARTED;\n\n    service.start = function (notes) {\n      api.account.workday.save({option: 'start', notes: notes}, function (response, callback, status) {\n        angular.extend(Session.user.workday, new Workday(response));\n      });\n    };\n\n    service.pause = function (notes) {\n      api.account.workday.save({option: 'pause', notes: notes}, function (response, callback, status) {\n        angular.extend(Session.user.workday, new Workday(response));\n      });\n    };\n\n    service.finish = function (notes) {\n      api.account.workday.save({option: 'finish', notes: notes}, function (response, callback, status) {\n        angular.extend(Session.user.workday, new Workday(response));\n      });\n    };\n\n  }\n\n}());\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.services.version', [])\n    .service('Version', version);\n\n  /** @ngInject */\n  function version() {\n\n    var service = this;\n\n    service.major = 1;\n    service.minor = 12;\n    service.build = 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    .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    .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('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('ndPosOrderProductVariantsTableController', ndPosOrderProductVariantsTableController)\n    .directive('ndPosOrderProductVariantsTable', ndPosOrderProductVariantsTable);\n\n  /** @ngInject */\n  function ndPosOrderProductVariantsTable() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/pos-order-product-variants-table/nd-pos-order-product-variants-table.html',\n      scope: {\n        order: '=',\n        saving: '=',\n        warehouses: '=',\n        updateOrder: '&',\n        updateDebounce: '&'\n      },\n      controllerAs: 'vm',\n      controller: 'ndPosOrderProductVariantsTableController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndPosOrderProductVariantsTableController(api,\n                                                    Utils,\n                                                    apiResolver,\n                                                    Session,\n                                                    $mdToast,\n                                                    $window,\n                                                    $mdDialog,\n                                                    $filter,\n                                                    $scope,\n                                                    POS_ORDER_SHIPPING_STATUSES) {\n    var vm = this;\n\n    // Data\n    vm.order = $scope.order;\n    vm.paymentMethods = $scope.paymentMethods;\n    vm.warehouses = $scope.warehouses;\n    vm.pos_order_product_variants_copy = angular.copy(vm.order.pos_order_product_variants);\n\n\n    vm.showSave = false;\n    // FIXME create vm.saving = $scope.saving; not it uses $scope.saving direclty\n\n    // Methods\n    vm.canEditPosOrderProductVariant = canEditPosOrderProductVariant;\n    vm.canEditPosOrderProductVariantDiscount = canEditPosOrderProductVariantDiscount;\n    vm.amountChanged = amountChanged;\n    vm.getMinimumAmount = getMinimumAmount;\n    vm.deletePosOrderProductVariant = deletePosOrderProductVariant;\n    vm.checkEnterPressed = checkEnterPressed;\n    vm.viewStock = viewStock;\n    vm.hideStockDialog = hideStockDialog;\n    vm.priceClicked = priceClicked;\n    vm.finishCustomPriceEdition = finishCustomPriceEdition;\n    vm.finishDiscountEdition = finishDiscountEdition;\n    vm.canEditPopvLine = canEditPopvLine;\n\n\n    // Functions\n    function canEditPosOrderProductVariant() {\n      return vm.order.autocode &&\n        vm.order.shipping_status === POS_ORDER_SHIPPING_STATUSES.POS_ORDER_SHIPPING_STATUS_PENDING;\n    }\n\n    function canEditPosOrderProductVariantDiscount(popv) {\n      return !popv.custom_price_incl_tax &&\n        popv.amount && canEditPosOrderProductVariant();\n    }\n\n    function amountChanged(popv) {\n      if (popv.amount === 0 || angular.isUndefined(popv.amount)) {\n        var index = vm.order.pos_order_product_variants.findIndex(function (p) {\n          return p.id === popv.id;\n        });\n        if (vm.order.site && vm.order.site.id) {\n          popv.amount = vm.pos_order_product_variants_copy[index].amount;\n        } else {\n          vm.order.pos_order_product_variants.splice(index, 1);\n        }\n      }\n      $scope.updateOrder();\n    }\n\n    function getMinimumAmount(popv_id) {\n      if (vm.order.site && vm.order.site.id) {\n        var index = vm.order.pos_order_product_variants.findIndex(function (p) {\n          return p.id === popv_id;\n        });\n\n        return vm.pos_order_product_variants_copy[index].amount;\n      }\n\n    }\n\n    function deletePosOrderProductVariant(popv) {\n      if (popv.amount < 0) {\n        popv.amount += 1;\n      } else {\n        popv.amount -= 1;\n      }\n      amountChanged(popv);\n    }\n\n    function checkEnterPressed($event) {\n      // If enter is pressed, blur input\n      if (event.which === 13) {\n        var target = $event.target;\n        target.blur();\n      }\n    }\n\n    function viewStock(popv, ev) {\n      apiResolver.resolve('inventories.products@get', {\n        'id': popv.product,\n        'serializer': 'ProductStockSerializer'\n      }).then(function (response) {\n        vm.selectedProductStock = response;\n        vm.selectedProductVariant = popv.product_variant;\n        vm.showStockDetails = true;\n\n        $mdDialog.show({\n          contentElement: '#ecommerceOrderStockDialog',\n          parent: angular.element(document.getElementById(document.body)),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          fullscreen: true\n        }).then(function (result) {\n          $mdDialog.hide();\n        }, function () {\n          $mdDialog.hide();\n        });\n      });\n    }\n\n    function hideStockDialog() {\n      $mdDialog.hide();\n    }\n\n\n\n    function canEditPopvLine(popv) {\n      return vm.order.canEditPosOrderProductVariant() && !vm.order.isPopvFulfilled(popv.id) || popv.recentlyAdded;\n    }\n\n    function priceClicked(popv) {\n      if (vm.order.canEditPosOrderProductVariant()) {\n        popv.editingPrice = true;\n      }\n    }\n\n    function finishCustomPriceEdition(popv) {\n      popv.editingPrice = false;\n      popv.setCustomPriceInclTax(popv.custom_price_incl_tax);\n      $scope.updateOrder();\n    }\n\n    function finishDiscountEdition(popv){\n      popv.setDiscount(popv.discount);\n      $scope.updateOrder();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller(\n      'ndPosOrderPaymentMethodsCardController',\n      ndPosOrderPaymentMethodsCardController\n    )\n    .directive('ndPosOrderPaymentMethodsCard', ndPosOrderPaymentMethodsCard);\n\n  /** @ngInject */\n  function ndPosOrderPaymentMethodsCard() {\n    return {\n      restrict: 'E',\n      templateUrl:\n        'app/directives/pos-order-payment-methods-card/nd-pos-order-payment-methods-card.html',\n      scope: {\n        order: '=',\n        paymentMethods: '=',\n        saving: '=',\n        updateOrder: '&',\n      },\n      controllerAs: 'vm',\n      controller: 'ndPosOrderPaymentMethodsCardController',\n    };\n  }\n\n  /** @ngInject */\n  function ndPosOrderPaymentMethodsCardController(\n    api,\n    Utils,\n    apiResolver,\n    Session,\n    $mdToast,\n    $window,\n    $mdDialog,\n    $filter,\n    $scope,\n    $state,\n    PosOrderPaymentMethod\n  ) {\n    var vm = this;\n\n    // Data\n    vm.order = $scope.order;\n    vm.paymentMethods = $scope.paymentMethods;\n\n    // FIXME create vm.saving = $scope.saving; not it uses $scope.saving direclty\n\n    // Methods\n    vm.addPayment = addPayment;\n    vm.updatePayment = updatePayment;\n    vm.deletePayment = deletePayment;\n    vm.assignPending = assignPending;\n    vm.showNoPaymentMethods = showNoPaymentMethods;\n    vm.callUpdateOrder = callUpdateOrder;\n    vm.goToRegisterActivity = goToRegisterActivity;\n    vm.paymentMethodEditingDisabled = paymentMethodEditingDisabled;\n\n    // Methods\n    function callUpdateOrder() {\n      $scope.updateOrder();\n    }\n\n    function addPayment() {\n      if (vm.order.deleted || vm.paymentMethods.length === 0) {\n        return;\n      }\n\n      // If it's a sale made from a registers, check if the activity is closed\n      // If the activity is close, ask to the user in which register activity wants to add the payment\n      if (vm.order.register) {\n        if (vm.order.register_activity_closed) {\n          $mdDialog\n            .show({\n              controller: 'SelectRegisterActivityController',\n              controllerAs: 'vm',\n              templateUrl:\n                'app/main/apps/ecommerce/views/order/dialogs/select-register-activity/select-register-activity.html',\n              parent: angular.element(document.body),\n              clickOutsideToClose: false,\n            })\n            .then(\n              function (registerActivityId) {\n                api.inventories.posOrderPaymentMethods.save(\n                  {\n                    payment_method: vm.paymentMethods[0].id,\n                    payment_method_name: vm.paymentMethods[0].name,\n                    amount: 0.0,\n                    pos_order: vm.order.id,\n                    register_activity: registerActivityId,\n                  },\n                  function (response, callback, status) {\n                    if (status === 201) {\n                      vm.order.pos_order_payment_methods.push(\n                        new PosOrderPaymentMethod(response)\n                      );\n                    }\n                  }\n                );\n              },\n              function () {\n                // Nothing to do\n              }\n            );\n        } else {\n          vm.order.pos_order_payment_methods.push(\n            new PosOrderPaymentMethod({\n              payment_method: vm.paymentMethods[0].id,\n              payment_method_name: vm.paymentMethods[0].name,\n              amount: 0.0,\n              given_amount: 0.0,\n              pos_order: vm.order.id,\n            })\n          );\n        }\n      } else {\n        vm.order.pos_order_payment_methods.push(\n          new PosOrderPaymentMethod({\n            payment_method: vm.paymentMethods[0].id,\n            payment_method_name: vm.paymentMethods[0].name,\n            amount: 0.0,\n            given_amount: 0.0,\n            pos_order: vm.order.id,\n          })\n        );\n      }\n    }\n\n    /**\n     * Updates the payment method. If the activity is closed, asks the user to update it.\n     * @param oldValue\n     * @param posOrderPaymentMethod\n     */\n    function updatePayment() {\n      if (vm.order.deleted || $scope.saving) {\n        return;\n      }\n      // Force 0 to those null amount\n      vm.order.pos_order_payment_methods.forEach(function (popm) {\n        if (!popm.given_amount) {\n          popm.given_amount = 0;\n        }\n      });\n      $scope.updateOrder();\n    }\n\n    function deletePayment(posOrderPaymentMethod) {\n      if (vm.order.deleted) {\n        return;\n      }\n      vm.order.pos_order_payment_methods.splice(\n        vm.order.pos_order_payment_methods.findIndex(function (popm) {\n          if (popm.id === undefined && posOrderPaymentMethod.id === undefined) {\n            return popm.$$hashKey === posOrderPaymentMethod.$$hashKey;\n          }\n          return popm.id === posOrderPaymentMethod.id;\n        }),\n        1\n      );\n\n      updatePayment();\n    }\n\n    function assignPending(paymentMethod) {\n      var totalPending = vm.order.getPendingToAssigned();\n      if (parseFloat(totalPending) !== 0.0) {\n        paymentMethod.given_amount = parseFloat(Utils.twoDecimals(\n          parseFloat(totalPending) + paymentMethod.given_amount\n        ));\n      }\n      updatePayment();\n    }\n\n    function showNoPaymentMethods() {\n      return (\n        (!vm.order.pos_order_payment_methods ||\n          !vm.order.pos_order_payment_methods.length) &&\n        (!vm.order.devolution_cards || !vm.order.devolution_cards.length) &&\n        !vm.order.generated_devolution_card\n      );\n    }\n\n    function goToRegisterActivity(regidterActivityId) {\n      $state.go('app.sale.register_closure', { id: regidterActivityId });\n    }\n\n    function paymentMethodEditingDisabled(popm) {\n      return $scope.saving || (popm.pos_order_refunds && popm.pos_order_refunds.length) || (popm.payment_method_instance && popm.payment_method_instance.payment_gateway) ;\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPosOrderFulfillmentCardController', ndPosOrderFulfillmentCardController)\n    .directive('ndPosOrderFulfillmentCard', ndPosOrderFulfillmentCard);\n\n  /** @ngInject */\n  function ndPosOrderFulfillmentCard() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/pos-order-fulfillment-card/nd-pos-order-fulfillment-card.html',\n      scope: {\n        order: '=',\n        fulfillment: '=',\n        refunds: '=',\n        warehouses: '=',\n        paymentMethods: '=',\n        // Parameters from ScanAndGo\n        shippingBoxes: '=?',\n        sendcloudShippingMethods: '=?',\n        highlightProducts: '=?',\n        enableBarcodeListener: '=?',\n        autoAssignShippingBox: '=?',\n        volumetricWeight: '=?',\n        scanAndGo: '=?',\n        printLabelsAutomatically: '=?',\n        printDeliveriesAutomatically: '=?'\n      },\n      controllerAs: 'vm',\n      controller: 'ndPosOrderFulfillmentCardController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndPosOrderFulfillmentCardController(api,\n                                               Utils,\n                                               apiResolver,\n                                               Session,\n                                               $mdToast,\n                                               $window,\n                                               $mdDialog,\n                                               $filter,\n                                               $scope,\n                                               $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  /**\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    .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  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('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('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('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('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('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('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('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    .directive('ndFulfillmentTextBox', ndFulfillmentTextBox);\n\n  /** @ngInject */\n  function ndFulfillmentTextBox() {\n    return {\n      replace: false,\n      restrict: 'E',\n      template: '<span ng-class=\"getClass()\">{{getText() | translate}}</span>',\n      scope: {\n        type: '='\n      },\n      controller: ['$scope', 'POS_ORDER_FULFILLMENTS', function ($scope,\n                                                                 POS_ORDER_FULFILLMENTS) {\n        $scope.getText = function () {\n          return 'ORDER.' + POS_ORDER_FULFILLMENTS[$scope.type];\n        }\n\n        $scope.getClass = function () {\n          return POS_ORDER_FULFILLMENTS[$scope.type];\n        }\n      }]\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndContactsListController', ndContactsListController)\n    .directive('ndContactsList', ndContactsList);\n\n  /** @ngInject */\n  function ndContactsList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        view: '=',\n      },\n      controller: 'ndContactsListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-contacts-list/nd-contacts-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndContactsListController($scope, $timeout, $rootScope, $filter, $sce, api, CONTACT_TYPES, COUNTRIES_DICT) {\n\n    // Data\n    var vm = this;\n    vm.COUNTRIES_DICT = COUNTRIES_DICT;\n    vm.url = api.urls.inventories.contacts.replace('/:id/:option', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.view = $scope.view;\n    vm.storageLabel = vm.view === 'customers' ? 'UIGridSaleCustomersControllerV3' : 'UIGridInventoryContactsControllerV3';\n    vm.contactPaymentMethods = {};\n    vm.hasSearch = null;\n\n    // Methods\n    $scope.getTypeBadge = getTypeBadge;\n    $scope.getCountryName = getCountryName;\n    vm.updateHasSearch = updateHasSearch;\n    vm.updateSorting = updateSorting;\n\n    // Initialize\n    initialize();\n\n    $scope.$watch('status.search', function() {\n      vm.updateHasSearch();\n      vm.updateSorting();\n    });\n\n    // Functions\n    function initialize() {\n      vm.updateHasSearch();\n\n      vm.columns = {\n        type: {\n          displayName: $filter('translate')('CONTACTS.TYPE'),\n          headerTooltip: $filter('translate')('CONTACTS.TYPE'),\n          field: 'type',\n          permission: vm.view === 'contacts',\n          visible: true,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getTypeBadge(row.entity.type)\"></div>'\n        }, first_name: {\n          displayName: $filter('translate')('CONTACTS.CONTACT_PERSON'),\n          field: 'first_name',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\"><a ui-sref=\"app.contacts.contact.details({id:row.entity.id})\">{{row.entity.first_name || \"-\"}} {{row.entity.last_name || \"-\"}}</a></div>'\n        }, email: {\n          displayName: $filter('translate')('CONTACTS.EMAIL'),\n          field: 'email',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.email || \"-\"}}</div>'\n        }, name: {\n          displayName: $filter('translate')('CONTACTS.LEGAL_NAME'),\n          field: 'name',\n          permission: true,\n          visible: vm.view === 'contacts',\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\"><a ui-sref=\"app.contacts.contact.details({id:row.entity.id})\">{{row.entity.name}}</a></div>'\n        }, vat: {\n          displayName: $filter('translate')('CONTACTS.VAT'),\n          field: 'vat',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.vat || \"-\"}}</div>'\n        }, commercial_name: {\n          displayName: $filter('translate')('CONTACTS.COMMERCIAL_NAME'),\n          field: 'commercial_name',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\"><a ui-sref=\"app.contacts.contact.details({id:row.entity.id})\">{{row.entity.commercial_name}}</a></div>'\n        }, phone: {\n          displayName: $filter('translate')('CONTACTS.PHONE'),\n          field: 'phone',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.phone || \"-\"}}</div>'\n        }, mobile_phone: {\n          displayName: $filter('translate')('CONTACTS.MOBILE_PHONE_NUMBER'),\n          field: 'mobile_phone',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.mobile_phone || \"-\"}}</div>'\n        }, code: {\n          displayName: $filter('translate')('CONTACTS.CODE'),\n          field: 'code',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.code || \"-\"}}</div>'\n        }, birthday: {\n          displayName: $filter('translate')('CONTACTS.BIRTHDAY'),\n          field: 'birthday',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableSorting: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.birthday || \"-\"}}</div>'\n        }, currency: {\n          displayName: $filter('translate')('CONTACTS.CURRENCY'),\n          field: 'currency',\n          permission: true,\n          visible: false,\n          minWidth: 50,\n          width: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.currency || \"-\"}}</div>'\n        }, tags: {\n          displayName: $filter('translate')('CONTACTS.TAGS'),\n          field: 'tags',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-tags\"><span class=\"text-boxed\" ng-repeat=\"tag in grid.getCellValue(row, col)\">{{tag}}</span></div>'\n        }, balance: {\n          displayName: $filter('translate')('CONTACTS.BALANCE'),\n          field: 'balance',\n          permission: true,\n          visible: vm.view === 'customers',\n          minWidth: 100,\n          width: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-right',\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getPrice(row.entity.balance)}}</div>'\n        }, purchase_count: {\n          displayName: $filter('translate')('CONTACTS.SALES'),\n          field: 'purchase_count',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.purchase_count || \"-\"}}</div>'\n        }, gender: {\n          displayName: $filter('translate')('CONTACTS.GENDER'),\n          field: 'gender',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<span ng-if=\"row.entity.gender==\\'1\\'\" translate=\"CUSTOMERS.MALE\"></span>' +\n            '<span ng-if=\"row.entity.gender==\\'2\\'\" translate=\"CUSTOMERS.FEMALE\"></span>' +\n            '<span ng-if=\"row.entity.gender==\\'3\\'\" translate=\"CUSTOMERS.OTHER\"></span>' +\n          '</div>'\n        }, person_type: {\n          displayName: $filter('translate')('CONTACTS.PERSON_TYPE'),\n          field: 'person_type',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<span ng-if=\"row.entity.person_type==\\'1\\'\" translate=\"CONTACTS.NATURAL_PERSON_TYPE\"></span>' +\n            '<span ng-if=\"row.entity.person_type==\\'2\\'\" translate=\"CONTACTS.JURIDICAL_PERSON_TYPE\"></span>' +\n          '</div>'\n        }, notes: {\n          displayName: $filter('translate')('CONTACTS.NOTES'),\n          field: 'notes',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.notes || \"-\"}}</div>'\n        }, website: {\n          displayName: $filter('translate')('CONTACTS.WEBSITE'),\n          field: 'website',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\"><a href=\"{{row.entity.website}}\" target=\"_blank\">{{row.entity.website || \"-\"}}</a></div>'\n        }, iban: {\n          displayName: $filter('translate')('CONTACTS.IBAN'),\n          field: 'iban',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.iban || \"-\"}}</div>'\n        }, swift: {\n          displayName: $filter('translate')('CONTACTS.SWIFT'),\n          field: 'swift',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.swift || \"-\"}}</div>'\n        }, persons: {\n          displayName: $filter('translate')('CONTACTS.PERSONS'),\n          field: 'persons',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\"><span ng-repeat=\"person in row.entity.persons\" >{{person.first_name}} {{person.last_name}}{{$last ? \\'\\' : \\', \\'}}</span></div>'\n        }, postal_addresses: {\n          displayName: $filter('translate')('CONTACTS.CITY'),\n          field: 'postal_addresses',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\"><span ng-repeat=\"address in row.entity.postal_addresses\">{{address.city}}<span ng-if=\"address.zip\"> ({{address.zip}})</span>{{$last ? \\'\\' : \\', \\'}}</span></div>'\n        }, country: {\n          displayName: $filter('translate')('CONTACTS.COUNTRY'),\n          field: 'country',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\" ng-if=\"row.entity.country\">{{grid.appScope.$parent.getCountryName(row.entity.country)}}</div>' +\n            '<div class=\"cell-middle\" ng-if=\"!row.entity.country\"><span ng-repeat=\"address in row.entity.postal_addresses\">{{grid.appScope.$parent.getCountryName(address.country)}}{{$last ? \\'\\' : \\', \\'}}</span></div>'\n        }, invoice_type: {\n          displayName: $filter('translate')('CONTACTS.INVOICE_TYPE'),\n          field: 'invoice_type',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<span ng-if=\"row.entity.invoice_type==\\'1\\'\" translate=\"CONTACTS.CONTACT_INVOICE_TYPE_NATIONAL\"></span>' +\n            '<span ng-if=\"row.entity.invoice_type==\\'2\\'\" translate=\"CONTACTS.CONTACT_INVOICE_TYPE_INTRACOMMUNITY\"></span>' +\n            '<span ng-if=\"row.entity.invoice_type==\\'3\\'\" translate=\"CONTACTS.CONTACT_INVOICE_TYPE_EXPORTATION\"></span>' +\n          '</div>'\n        }, exclude_taxes: {\n          displayName: $filter('translate')('CONTACTS.EXCLUDE_TAXES'),\n          field: 'exclude_taxes',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"cell-middle\"><span ng-if=\"row.entity.exclude_taxes\" translate=\"GENERAL.YES\"></span><span ng-if=\"!row.entity.exclude_taxes\" translate=\"GENERAL.NO\"></span></div>'\n        }, surcharge: {\n          displayName: $filter('translate')('CONTACTS.SURCHARGE'),\n          field: 'surcharge',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"cell-middle\"><span ng-if=\"row.entity.surcharge\" translate=\"GENERAL.YES\"></span><span ng-if=\"!row.entity.surcharge\" translate=\"GENERAL.NO\"></span></div>'\n        }, discount: {\n          displayName: $filter('translate')('CONTACTS.DISCOUNT'),\n          field: 'discount',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.discount || \"0\"}}%</div>'\n        }, early_payment_discount: {\n          displayName: $filter('translate')('CONTACTS.EARLY_PAYMENT_DISCOUNT'),\n          field: 'early_payment_discount',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.early_payment_discount || \"0\"}}%</div>'\n        }, sales_channel: {\n          displayName: $filter('translate')('CONTACTS.SALES_CHANNEL'),\n          field: 'sales_channel',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-if=\"row.entity.sales_channel_instance\">{{row.entity.sales_channel_instance.name}}</div>'\n        }, created_at: {\n          displayName: $filter('translate')('CONTACTS.CREATED_AT'),\n          headerTooltip: $filter('translate')('CONTACTS.CREATED_AT'),\n          field: 'created_at',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.created_at)}}</div>'\n        }, updated_at: {\n          displayName: $filter('translate')('PRODUCT.UPDATED_AT'),\n          headerTooltip: $filter('translate')('PRODUCT.UPDATED_AT'),\n          field: 'updated_at',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.updated_at)}}</div>'\n        }, last_visit: {\n          displayName: $filter('translate')('CUSTOMERS.LAST_VISIT'),\n          headerTooltip: $filter('translate')('CUSTOMERS.LAST_VISIT'),\n          field: 'last_visit',\n          permission: true,\n          visible: vm.view === 'customers',\n          minWidth: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.last_visit)}}</div>'\n        }, total_pos_orders: {\n          displayName: $filter('translate')('CUSTOMERS.TICKETS'),\n          headerTooltip: $filter('translate')('CUSTOMERS.TICKETS'),\n          field: 'total_pos_orders',\n          permission: true,\n          visible: vm.view === 'customers',\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          cellClass: 'cell-centered',\n          enableHiding: true\n        }, total_pos_orders_revenue: {\n          displayName: $filter('translate')('CUSTOMERS.REVENUE'),\n          headerTooltip: $filter('translate')('CUSTOMERS.REVENUE'),\n          field: 'total_pos_orders_revenue',\n          permission: true,\n          visible: vm.view === 'customers',\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          cellClass: 'cell-centered',\n          enableHiding: true\n        }, total_pos_order_items_avg: {\n          displayName: $filter('translate')('CUSTOMERS.ITEMS_AVG'),\n          headerTooltip: $filter('translate')('CUSTOMERS.ITEMS_AVG'),\n          field: 'total_pos_order_items_avg',\n          permission: true,\n          visible: vm.view === 'customers',\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          cellClass: 'cell-centered',\n          enableHiding: true\n        }, total_pos_order_revenue_avg: {\n          displayName: $filter('translate')('CUSTOMERS.REVENUE_AVG'),\n          headerTooltip: $filter('translate')('CUSTOMERS.REVENUE_AVG'),\n          field: 'total_pos_order_revenue_avg',\n          permission: true,\n          visible: vm.view === 'customers',\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          cellClass: 'cell-centered',\n          enableHiding: true\n        }\n      };      \n    }\n\n    function updateHasSearch() {\n      vm.hasSearch = Boolean(vm.status && vm.status.search && vm.status.search.trim().length > 0);\n    }\n\n    function updateSorting() {\n      if (vm.columns) {\n        $scope.$broadcast('ndGrid::sortEnabledChanged');\n      }\n    }\n\n    function getTypeBadge(type) {\n      return $sce.trustAsHtml('<span>' + $filter('translate')('CONTACTS.' + CONTACT_TYPES[type]) + '</span>');\n    }\n\n    function getCountryName(country) {\n      return vm.COUNTRIES_DICT[country];\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndContactsController', ndContactsController)\n    .directive('ndContacts', ndContacts);\n\n  /** @ngInject */\n  function ndContacts() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/nd-contacts/nd-contacts.html',\n      scope: {\n        contactInstance: '=',\n        contactId: '=',\n        contactIdChange: '&',\n        ngDisabled: '=',\n        ndInput: '=?',\n        placeholder: '=',\n        avoidCheckEquals: '=?',\n        createButton: '=?',\n        required: '='\n      },\n      controller: 'ndContactsController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndContactsController($scope, $timeout, api, $q, $filter, $mdDialog, $document, SEARCH_MAX_LENGTH) {\n\n    // Cons\n    $scope.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    $scope.openingDialog = false;\n\n    // Methods\n    $scope.querySearch = querySearch;\n    $scope.selectItem = selectItem;\n    $scope.displayFunction = displayFunction;\n    $scope.getPlaceholder = getPlaceholder;\n    $scope.createContact = createContact;\n\n    function getPlaceholder(){\n      if($scope.placeholder){\n        return $filter('translate')($scope.placeholder);\n      }else{\n        return $filter('translate')('CONTACTS.CONTACT');\n      }\n    }\n\n    function querySearch() {\n\n      var deferred = $q.defer();\n      $scope.searchText = $scope.searchText.substring(0, $scope.SEARCH_MAX_LENGTH);\n\n      api.inventories.contacts.get(\n        {\n          search: $scope.searchText\n        },\n        function (results) {\n\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function selectItem(item) {\n      if (typeof item === 'object') {\n        if (item && item.id && (item.name || item.first_name)) {\n          // If is different data\n          if ($scope.avoidCheckEquals || $scope.contactId !== item.id) {\n            $scope.contactInstance = item;\n            $scope.contactId = item.id;\n\n            $timeout(function () {\n              if (angular.isDefined($scope.contactIdChange)) {\n                $scope.contactIdChange();\n              }\n            }, 100);\n          }\n        }\n      } else {\n        // If is different data\n        if ($scope.contactId) {\n          $scope.contactInstance = null;\n          $scope.contactId = null;\n\n          $timeout(function () {\n            if (angular.isDefined($scope.contactIdChange)) {\n              $scope.contactIdChange();\n            }\n          }, 100);\n        }\n      }\n    }\n\n    function displayFunction(value) {\n      return value.name ? value.name : (value.first_name + ' ' + value.last_name);\n    }\n\n    function createContact() {\n\n\n        // Hiding the mdAutocomplete content:\n        //angular.element('.customer-autocomplete input').scope().$mdAutocompleteCtrl.hidden = true;\n        if($scope.openingDialog){\n          return;\n        }\n\n        $scope.openingDialog = true;\n\n        $mdDialog.show({\n          controller: 'ContactDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/contacts/views/contacts/dialogs/contact/contact-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: false,\n          multiple: true,\n          locals: {\n            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.quick-panel', [\n            'app.services.workday'\n        ])\n        .config(config);\n\n    /** @ngInject */\n    function config($translatePartialLoaderProvider, msApiProvider)\n    {\n        // Translation\n        $translatePartialLoaderProvider.addPart('app/quick-panel');\n    }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.quick-panel')\n    .controller('QuickPanelController', QuickPanelController);\n\n  /** @ngInject */\n  function QuickPanelController(msApi,\n                                $mdSidenav,\n                                $scope,\n                                $window,\n                                $timeout,\n                                $http,\n                                $state,\n                                $rootScope,\n                                WorkdayService,\n                                WORKDAY_STATUSES,\n                                SEARCH_MAX_LENGTH,\n                                Session) {\n    var vm = this;\n\n    $scope.WORKDAY_STATUSES = WORKDAY_STATUSES;\n    $scope.$state = $state;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.date = new Date();\n    vm.workdayService = WorkdayService;\n    vm.settings = {\n      notify: true,\n      cloud: false,\n      retro: true\n    };\n    vm.posts = [];\n    vm.postsByState = {};\n    vm.postsFilter = '';\n    vm.selectedIndex = 0;\n    vm.hasWorkActivityFeature = false;\n\n    // Methods\n    vm.closeQuickPanel = closeQuickPanel;\n    vm.toDate = toDate;\n    vm.start = start;\n    vm.pause = pause;\n    vm.finish = finish;\n\n    // Initialize\n    init();\n\n    function init() {\n      vm.hasWorkActivityFeature = !Session.hasSubscription || Session.hasFeature('app.quick_panel.workday_activity');\n    }\n\n    // Functions\n    function toDate(date) {\n      return new Date(date);\n    }\n\n    function start() {\n      vm.workdayService.start(angular.copy(vm.notes));\n      vm.notes = null;\n    }\n\n    function pause() {\n      vm.workdayService.pause(angular.copy(vm.notes));\n      vm.notes = null;\n    }\n\n    function finish() {\n      vm.workdayService.finish(angular.copy(vm.notes));\n      vm.notes = null;\n    }\n\n    function closeQuickPanel(){\n      $mdSidenav('quick-panel').close();\n    }\n  }\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.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.navigation', [])\n        .config(config);\n\n    /** @ngInject */\n    function config()\n    {\n        \n    }\n\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.navigation')\n    .controller('SignUpNavigationController', SignUpNavigationController);\n\n  /** @ngInject */\n  function SignUpNavigationController($scope, msNavigationService) {\n\n    var vm = this;\n\n    // Data\n    vm.bodyEl = angular.element('body');\n    vm.folded = false;\n    vm.msScrollOptions = {\n      suppressScrollX: true\n    };\n\n    vm.appname = 'Stockagile';\n\n    // Methods\n    vm.toggleMsNavigationFolded = toggleMsNavigationFolded;\n\n    //////////\n\n    /**\n     * Toggle folded status\n     */\n    function toggleMsNavigationFolded() {\n      vm.folded = !vm.folded;\n    }\n\n    // Close the mobile menu on $stateChangeSuccess\n    $scope.$on('$stateChangeSuccess', function () {\n      vm.bodyEl.removeClass('ms-navigation-horizontal-mobile-menu-active');\n    });\n\n    /**\n     * Start\n     */\n\n    msNavigationService.saveItem('start', {\n      title: 'NAVIGATION.START',\n      weight: 1,\n      state: 'app.analytics.start',\n      svgIcon: 'assets/images/custom-material-design-icons/home-outline.e6cef25a.svg',\n    });\n\n\n    /**\n     * ANALYTICS\n     */\n\n    msNavigationService.saveItem('analytics', {\n      title: 'NAVIGATION.ANALYTICS_MODULE',\n      icon: 'icon-chart-arc',\n      weight: 1,\n      class: 'analytics'\n    });\n\n    msNavigationService.saveItem('analytics.retail-dashboard', {\n      title: 'NAVIGATION.RETAIL_D',\n      state: 'app.analytics.retail_dashboard.realtime',\n    });\n\n\n    msNavigationService.saveItem('analytics.wholesale-dashboard', {\n      title: 'NAVIGATION.WHOLESALE_D',\n      state: 'app.analytics.wholesale_dashboard.realtime',\n    });\n\n\n    msNavigationService.saveItem('analytics.inventory-dashboard', {\n      title: 'NAVIGATION.INVENTORY_D',\n      state: 'app.analytics.inventory_dashboard.stocks',\n    });\n\n    msNavigationService.saveItem('analytics.report', {\n      translate: 'REPORTS.REPORTS',\n      title: 'Reports',\n      state: 'app.analytics.report',\n    });\n\n\n    /**\n     * CONTACTS\n     */\n\n    msNavigationService.saveItem('contacts', {\n      title: 'NAVIGATION.CONTACTS',\n      //group: true,\n      weight: 1,\n      state: 'app.contacts',\n      icon: 'icon-account-outline',\n      class: 'contacts'\n    });\n\n    /**\n     * INVENTORY\n     */\n\n    msNavigationService.saveItem('inventory', {\n      title: 'NAVIGATION.INVENTORY_MODULE',\n      icon: 'icon-package-variant-closed',\n      class: 'inventory'\n    });\n\n    msNavigationService.saveItem('inventory.collections', {\n      translate: 'NAVIGATION.COLLECTIONS',\n      title: 'Collections',\n      state: 'app.inventory.collections',\n    });\n\n    msNavigationService.saveItem('inventory.products', {\n      translate: 'NAVIGATION.PRODUCTS',\n      title: 'Products',\n      state: 'app.inventory.products',\n    });\n\n    msNavigationService.saveItem('inventory.variants', {\n      translate: 'NAVIGATION.VARIANTS',\n      title: 'Variants',\n      state: 'app.inventory.variants',\n    });\n\n    /*msNavigationService.saveItem('inventory.pricing', {\n      translate: 'NAVIGATION.PRICING',\n      title: 'Pricing',\n      state: 'app.inventory.pricing',\n    });*/\n\n    msNavigationService.saveItem('inventory.stocks', {\n      translate: 'NAVIGATION.STOCKS',\n      title: 'Stocks',\n      state: 'app.inventory.stocks',\n    });\n\n    msNavigationService.saveItem('inventory.stocktakings', {\n      translate: 'NAVIGATION.STOCKTAKINGS',\n      title: 'Stocktakings',\n      state: 'app.inventory.stocktakings',\n    });\n\n    msNavigationService.saveItem('inventory.purchases', {\n      translate: 'NAVIGATION.PURCHASES',\n      title: 'Purchases',\n      state: 'app.inventory.purchases',\n    });\n\n    msNavigationService.saveItem('inventory.transfers', {\n      translate: 'NAVIGATION.TRANSFERS',\n      title: 'Transfers',\n      state: 'app.inventory.transfers',\n    });\n\n    msNavigationService.saveItem('inventory.adjustments', {\n      translate: 'NAVIGATION.ADJUSTMENTS',\n      title: 'Adjustments',\n      state: 'app.inventory.adjustments',\n    });\n\n    /*msNavigationService.saveItem('contacts', {\n      translate: 'NAVIGATION.CONTACTS',\n      title: 'Contacts',\n      state: 'app.contacts',\n    });*/\n\n    msNavigationService.saveItem('inventory.warehouses', {\n      translate: 'NAVIGATION.LOCATIONS',\n      title: 'Warehouses',\n      state: 'app.inventory.warehouses',\n    });\n\n    /*msNavigationService.saveItem('inventory.labels-generator', {\n      translate: 'NAVIGATION.LABELS_GENERATOR',\n      title: 'Label Generator',\n      state: 'app.inventory.labels-generator',\n    });*/\n\n    /**\n     * MANUFACTURE\n     */\n\n    msNavigationService.saveItem('manufacture', {\n      title: 'NAVIGATION.MANUFACTURE_MODULE',\n      //group: true,\n      weight: 2,\n      icon: 'icon-factory',\n      class: 'manufacture'\n    });\n\n    msNavigationService.saveItem('manufacture.collections', {\n      translate: 'NAVIGATION.COLLECTIONS',\n      title: 'Collections',\n      state: 'app.manufacture.collections',\n    });\n\n    msNavigationService.saveItem('manufacture.materials', {\n      translate: 'NAVIGATION.MATERIALS',\n      title: 'Materials',\n      state: 'app.manufacture.materials',\n    });\n\n    msNavigationService.saveItem('manufacture.productions', {\n      translate: 'NAVIGATION.PRODUCTIONS',\n      title: 'Productions',\n      state: 'app.manufacture.productions',\n    });\n\n    /**\n     * WHOLESALE\n     */\n\n    msNavigationService.saveItem('wholesale', {\n      title: 'NAVIGATION.WHOLESALE_MODULE',\n      //group: true,\n      weight: 4,\n      svgIcon: 'assets/images/custom-material-design-icons/warehouse.1e982d37.svg',\n      class: 'wholesale'\n    });\n\n    msNavigationService.saveItem('wholesale.sales', {\n      translate: 'NAVIGATION.SALES',\n      title: 'Sales',\n      state: 'app.wholesale.sales',\n    });\n\n    msNavigationService.saveItem('wholesale.deliveries', {\n      translate: 'NAVIGATION.DELIVERIES',\n      title: 'Deliveries',\n      state: 'app.wholesale.deliveries',\n    });\n\n    msNavigationService.saveItem('wholesale.b2b_ecommerce', {\n      translate: 'NAVIGATION.B2B_ECOMMERCE',\n      title: 'B2B Ecommerce',\n      state: 'app.wholesale.b2b_ecommerce',\n    });\n\n    /**\n     * SALE\n     */\n\n    msNavigationService.saveItem('sale', {\n      title: 'NAVIGATION.RETAIL_MODULE',\n      //group: true,\n      weight: 4,\n      svgIcon: 'assets/images/custom-material-design-icons/store-outline.583690c9.svg',\n      class: 'sale'\n    });\n\n    msNavigationService.saveItem('sale.sell', {\n      translate: 'NAVIGATION.SELL',\n      title: 'Sell',\n      state: 'app.sale.sell',\n    });\n\n    msNavigationService.saveItem('sale.sales_log', {\n      translate: 'NAVIGATION.SALES_LOG',\n      title: 'Sales Log',\n      state: 'app.sale.sales_log',\n    });\n\n    /*msNavigationService.saveItem('sale.registers', {\n      translate: 'NAVIGATION.REGISTERS',\n      title: 'Registers',\n      state: 'app.sale.registers',\n    });*/\n\n    msNavigationService.saveItem('sale.register_closures', {\n      translate: 'NAVIGATION.REGISTER_CLOSURES',\n      title: 'Register Closures',\n      state: 'app.sale.register_closures',\n    });\n\n    msNavigationService.saveItem('sale.customers', {\n      translate: 'NAVIGATION.CUSTOMERS',\n      title: 'Cash Management',\n      state: 'app.sale.customers',\n    });\n\n    msNavigationService.saveItem('sale.goals', {\n      translate: 'NAVIGATION.GOALS',\n      title: 'Goals',\n      state: 'app.sale.goals',\n    });\n\n    msNavigationService.saveItem('sale.gift-cards', {\n      translate: 'NAVIGATION.GIFT_CARDS',\n      title: 'Gift Cards',\n      state: 'app.sale.gift-cards',\n    });\n\n    msNavigationService.saveItem('sale.promotions', {\n      translate: 'NAVIGATION.PROMOTIONS',\n      title: 'Promotions',\n      state: 'app.sale.promotions',\n    });\n\n\n    /**\n     * ECOMMERCE\n     */\n\n    msNavigationService.saveItem('ecommerce', {\n      title: 'NAVIGATION.ECOMMERCE_MODULE',\n      //group: true,\n      weight: 5,\n      icon: 'icon-laptop',\n      class: 'ecommerce'\n    });\n\n    msNavigationService.saveItem('ecommerce.sites', {\n      translate: 'NAVIGATION.CHANNELS',\n      title: 'Channels',\n      state: 'app.ecommerce.sites',\n    });\n\n    msNavigationService.saveItem('ecommerce.orders', {\n      translate: 'NAVIGATION.ORDERS',\n      title: 'Orders',\n      state: 'app.ecommerce.orders',\n    });\n\n    msNavigationService.saveItem('ecommerce.sorting', {\n      translate: 'NAVIGATION.SORTING',\n      title: 'Sorting',\n      state: 'app.ecommerce.sorting',\n    });\n\n    /**\n     * ACCOUNTING\n     */\n\n    msNavigationService.saveItem('accounting', {\n      title: 'NAVIGATION.ACCOUNTING_MODULE',\n      //group: true,\n      weight: 5,\n      svgIcon: 'assets/images/custom-material-design-icons/file-document-outline.0472566f.svg',\n      class: 'accounting'\n    });\n\n    msNavigationService.saveItem('accounting.invoices', {\n      translate: 'NAVIGATION.INVOICES',\n      title: 'Invoices',\n      state: 'app.accounting.invoices',\n    });\n\n    msNavigationService.saveItem('accounting.proformas', {\n      translate: 'NAVIGATION.PROFORMAS',\n      title: 'Invoices',\n      state: 'app.accounting.proformas',\n    });\n\n    msNavigationService.saveItem('accounting.quotes', {\n      translate: 'NAVIGATION.QUOTES',\n      title: 'Invoices',\n      state: 'app.accounting.quotes',\n    });\n\n    msNavigationService.saveItem('accounting.payments', {\n      translate: 'NAVIGATION.PAYMENTS',\n      title: 'Payments',\n      state: 'app.accounting.payments',\n    });\n\n    /**\n     * APPS\n     */\n     msNavigationService.saveItem('apps', {\n      translate: 'NAVIGATION.APPS',\n      title: 'Apps',\n      //group: true,\n      weight: 5,\n      state: 'app.integration_apps.apps',\n      permission: 'app.integration_apps',\n      svgIcon: 'assets/images/custom-material-design-icons/shape-plus.f33dffff.svg',\n      class: 'accounting'\n    });\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.navigation')\n    .controller('NavigationController', NavigationController);\n\n  /** @ngInject */\n  function NavigationController($scope, Session, msNavigationService, $filter) {\n\n    var vm = this;\n\n    // Data\n    vm.bodyEl = angular.element('body');\n    vm.folded = false;\n    vm.msScrollOptions = {\n      suppressScrollX: true\n    };\n\n    // Methods\n    vm.toggleMsNavigationFolded = toggleMsNavigationFolded;\n\n    //////////\n\n    /**\n     * Toggle folded status\n     */\n    function toggleMsNavigationFolded() {\n      vm.folded = !vm.folded;\n    }\n\n    // Close the mobile menu on $stateChangeSuccess\n    $scope.$on('$stateChangeSuccess', function() {\n      vm.bodyEl.removeClass('ms-navigation-horizontal-mobile-menu-active');\n    });\n\n    addStartNavigation();\n    addAnalyticsNavigation();\n    addContactsNavigation();\n    addCatalogNavigation();\n    addInventoryNavigation();\n    addPlanningNavigation();\n    addWholesaleNavigation();\n    addRetailNavigation();\n    addEcommerceNavigation();\n    addAccountingNavigation();\n\n    function addStartNavigation() {\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.start') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('start', {\n          title: 'NAVIGATION.START',\n          weight: 1,\n          state: 'app.analytics.start',\n          permission: 'app.analytics.start',\n          svgIcon: 'assets/images/custom-material-design-icons/home-outline.e6cef25a.svg'\n        });\n      }\n    }\n\n    function addAnalyticsNavigation() {\n      if (!Session.hasSubscription || Session.hasAnyFeature([\n        'app.analytics.health',\n        'app.analytics.inventory.overview',\n        'app.analytics.sales',\n        'app.analytics.retail_dashboard.realtime',\n        'app.analytics.wholesale_dashboard.realtime',\n        'app.analytics.report'\n      ]) || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics', {\n          title: 'NAVIGATION.ANALYTICS_MODULE',\n          permission: 'app.analytics',\n          icon: 'icon-chart-arc',\n          weight: 1,\n          class: 'analytics'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.health') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics.health', {\n          title: 'NAVIGATION.HEALTH',\n          state: 'app.analytics.health',\n          permission: 'app.analytics.health'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.inventory.overview') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics.inventory', {\n          title: 'NAVIGATION.INVENTORY_D',\n          state: 'app.analytics.inventory.overview',\n          permission: 'app.analytics.inventory.overview'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.sales') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics.sales', {\n          title: 'NAVIGATION.SALE_ANALYTICS',\n          state: 'app.analytics.sales',\n          permission: 'app.analytics.sales',\n          newFeatureBadge: 'SALES_DYNAMIC_REPORTS'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.products') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics.products', {\n          title: 'NAVIGATION.PRODUCTS',\n          state: 'app.analytics.products',\n          permission: 'app.analytics.products',\n          newFeatureBadge: 'PRODUCTS_DYNAMIC_REPORTS'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.retail_dashboard.realtime') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics.retail-dashboard', {\n          title: 'NAVIGATION.RETAIL_D',\n          state: 'app.analytics.retail_dashboard.realtime',\n          permission: 'app.analytics.retail_dashboard.realtime'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.wholesale_dashboard.realtime') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics.wholesale-dashboard', {\n          title: 'NAVIGATION.WHOLESALE_D',\n          state: 'app.analytics.wholesale_dashboard.realtime',\n          permission: 'app.analytics.wholesale_dashboard.realtime'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.report') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics.report', {\n          translate: 'REPORTS.REPORTS',\n          title: 'Reports',\n          state: 'app.analytics.report',\n          permission: 'app.analytics.report'\n        });\n      }\n    }\n\n    function addContactsNavigation() {\n      if (!Session.hasSubscription || Session.hasFeature('app.contacts') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('contacts', {\n          title: 'NAVIGATION.CONTACTS',\n          //group: true,\n          weight: 1,\n          permission: 'app.contacts',\n          state: 'app.contacts',\n          icon: 'icon-account-outline',\n          class: 'contacts'\n        });\n      }\n    }\n\n    function addCatalogNavigation() {\n      if (!Session.hasSubscription || Session.hasAnyFeature([\n        'app.inventory.collections',\n        'app.inventory.products',\n        'app.inventory.variants',\n        'app.inventory.product_bundles',\n        'app.manufacture.materials',\n        'app.inventory.product-locations'\n      ]) || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('catalog', {\n          title: 'NAVIGATION.CATALOG',\n          permission: 'app.inventory',\n          icon: 'icon-tag-text-outline',\n          class: 'catalog'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.collections') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('catalog.collections', {\n          translate: 'NAVIGATION.COLLECTIONS',\n          title: 'Collections',\n          state: 'app.inventory.collections',\n          permission: 'app.inventory.collections'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.products') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('catalog.products', {\n          translate: 'NAVIGATION.PRODUCTS',\n          title: 'Products',\n          state: 'app.inventory.products',\n          permission: 'app.inventory.products'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.variants') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('catalog.variants', {\n          translate: 'NAVIGATION.VARIANTS',\n          title: 'Variants',\n          state: 'app.inventory.variants',\n          permission: 'app.inventory.variants'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.product_bundles') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('catalog.product_bundles', {\n          translate: 'NAVIGATION.PRODUCT_BUNDLES',\n          title: 'Product bundles',\n          state: 'app.inventory.product_bundles',\n          permission: 'app.inventory.product_bundles'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.manufacture.materials') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('catalog.materials', {\n          translate: 'NAVIGATION.MATERIALS',\n          title: 'Materials',\n          state: 'app.manufacture.materials',\n          permission: 'app.manufacture.materials'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.product-locations') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('catalog.product_locations', {\n          translate: 'NAVIGATION.PRODUCT_LOCATIONS',\n          title: 'Locations',\n          state: 'app.inventory.product-locations',\n          permission: 'app.inventory.product-locations',\n          newFeatureBadge: 'NEW_PRODUCT_LOCATIONS'\n        });\n      }\n    }\n\n    function addInventoryNavigation() {\n      if (!Session.hasSubscription || Session.hasAnyFeature([\n        'app.inventory.warehouses',\n        'app.inventory.stocks',\n        'app.inventory.uids',\n        'app.inventory.stocktakings',\n        'app.manufacture.productions',\n        'app.inventory.purchases',\n        'app.inventory.transfers',\n        'app.inventory.adjustments',\n        'app.inventory.pickings'\n      ]) || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory', {\n          title: 'NAVIGATION.INVENTORY_MODULE',\n          permission: 'app.inventory',\n          icon: 'icon-package-variant-closed',\n          class: 'inventory'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.warehouses') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.warehouses', {\n          translate: 'NAVIGATION.LOCATIONS',\n          title: 'Warehouses',\n          state: 'app.inventory.warehouses',\n          permission: 'app.inventory.warehouses',\n          newFeatureBadge: 'NEW_STOCK_LOCATIONS'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.stocks') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.stocks', {\n          translate: 'NAVIGATION.STOCKS',\n          title: 'Stocks',\n          state: 'app.inventory.stocks',\n          permission: 'app.inventory.stocks'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.uids') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.uids', {\n          translate: 'NAVIGATION.UIDS',\n          title: 'UIDs',\n          state: 'app.inventory.uids',\n          permission: 'app.inventory.uids'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.stocktakings') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.stocktakings', {\n          translate: 'NAVIGATION.STOCKTAKINGS',\n          title: 'Stocktakings',\n          state: 'app.inventory.stocktakings',\n          permission: 'app.inventory.stocktakings'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.manufacture.productions') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.productions', {\n          translate: 'NAVIGATION.PRODUCTIONS',\n          title: 'Productions',\n          state: 'app.manufacture.productions',\n          permission: 'app.manufacture.productions'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.purchases') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.purchases', {\n          translate: 'NAVIGATION.PURCHASES',\n          title: 'Purchases',\n          state: 'app.inventory.purchases',\n          permission: 'app.inventory.purchases'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.transfers') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.transfers', {\n          translate: 'NAVIGATION.TRANSFERS',\n          title: 'Transfers',\n          state: 'app.inventory.transfers',\n          permission: 'app.inventory.transfers'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.adjustments') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.adjustments', {\n          translate: 'NAVIGATION.ADJUSTMENTS',\n          title: 'Adjustments',\n          state: 'app.inventory.adjustments',\n          permission: 'app.inventory.adjustments'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.picking_packing') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.pickings-packing', {\n          translate: 'NAVIGATION.PICKING_PACKING',\n          title: 'Picking&Packing',\n          state: 'app.inventory.picking_packing',\n          permission: 'app.inventory.pickings'\n        });\n      }\n    }\n\n    function addPlanningNavigation() {\n      if (Session.company.has_inventory_analytics) {\n        msNavigationService.saveItem('planning', {\n          title: 'NAVIGATION.PLANNING_MODULE',\n          //group: true,\n          weight: 2,\n          permission: 'app.planning',\n          svgIcon: 'assets/images/custom-material-design-icons/chart-timeline-variant-shimmer.f4b01ffc.svg',\n          class: 'planning'\n        });\n        if (!Session.hasSubscription || Session.hasFeature('app.planning.replenishment') || !Session.company.hide_upgrade_features_in_menu) {\n          msNavigationService.saveItem('planning.replenishment', {\n            translate: 'NAVIGATION.REPLENISHMENT',\n            title: 'Replenishment',\n            state: 'app.planning.replenishment',\n            permission: 'app.planning.replenishment'\n          });\n        }\n        if (!Session.hasSubscription || Session.hasFeature('app.planning.reorder') || !Session.company.hide_upgrade_features_in_menu) {\n          msNavigationService.saveItem('planning.reorder', {\n            translate: 'NAVIGATION.REORDER',\n            title: 'Reorder',\n            state: 'app.planning.reorder',\n            permission: 'app.planning.reorder'\n          });\n        }\n        msNavigationService.saveItem('planning.rebalancing', {\n          translate: 'NAVIGATION.REBALANCING',\n          title: 'Rebalancing',\n          state: 'app.planning.rebalancing',\n          disabled: true\n          // permission: 'app.planning.rebalancing'\n        });\n        msNavigationService.saveItem('planning.buying', {\n          translate: 'NAVIGATION.BUYING',\n          title: 'Buying',\n          state: 'app.planning.buying',\n          disabled: true\n          // permission: 'app.planning.buying'\n        });\n      }\n    }\n\n    function addWholesaleNavigation() {\n      if (!Session.hasSubscription || Session.hasAnyFeature([\n        'app.wholesale.presales',\n        'app.wholesale.sales',\n        'app.wholesale.deliveries',\n        'app.wholesale.b2b_ecommerces'\n      ]) || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('wholesale', {\n          title: 'NAVIGATION.WHOLESALE_MODULE',\n          //group: true,\n          weight: 4,\n          permission: 'app.wholesale',\n          svgIcon: 'assets/images/custom-material-design-icons/warehouse.1e982d37.svg',\n          class: 'wholesale'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.wholesale.presales') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('wholesale.presales', {\n          translate: 'NAVIGATION.PRESALES',\n          title: 'Presales',\n          state: 'app.wholesale.presales',\n          permission: 'app.wholesale.presales'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.wholesale.sales') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('wholesale.sales', {\n          translate: 'NAVIGATION.SALES',\n          title: 'Sales',\n          state: 'app.wholesale.sales',\n          permission: 'app.wholesale.sales',\n          newFeatureBadge: 'SALES_DTO'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.wholesale.deliveries') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('wholesale.deliveries', {\n          translate: 'NAVIGATION.DELIVERIES',\n          title: 'Deliveries',\n          state: 'app.wholesale.deliveries',\n          permission: 'app.wholesale.deliveries'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.wholesale.b2b_ecommerces') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('wholesale.b2b_ecommerces', {\n          translate: 'NAVIGATION.B2B_ECOMMERCES',\n          title: 'B2BS Ecommerce',\n          state: 'app.wholesale.b2b_ecommerces',\n          permission: 'app.wholesale.b2b_ecommerces'\n        });\n      }\n    }\n\n    function addRetailNavigation() {\n      if (!Session.hasSubscription || Session.hasAnyFeature([\n        'app.sale.sell',\n        'app.sale.sales_log',\n        'app.sale.register_closures',\n        'app.sale.customers',\n        'app.sale.goals',\n        'app.sale.gift-cards',\n        'app.sale.promotions'\n      ]) || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale', {\n          title: 'NAVIGATION.RETAIL_MODULE',\n          //group: true,\n          weight: 4,\n          permission: 'app.sale',\n          svgIcon: 'assets/images/custom-material-design-icons/store-outline.583690c9.svg',\n          class: 'sale'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.sale.sell') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale.sell', {\n          translate: 'NAVIGATION.SELL',\n          title: 'Sell',\n          state: 'app.sale.sell',\n          permission: 'app.sale.sell'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.sale.sales_log') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale.sales_log', {\n          translate: 'NAVIGATION.SALES_LOG',\n          title: 'Sales Log',\n          state: 'app.sale.sales_log',\n          permission: 'app.sale.sales_log'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.sale.register_closures') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale.register_closures', {\n          translate: 'NAVIGATION.REGISTER_CLOSURES',\n          title: 'Register Closures',\n          state: 'app.sale.register_closures',\n          permission: 'app.sale.register_closures'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.sale.customers') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale.customers', {\n          translate: 'NAVIGATION.CUSTOMERS',\n          title: 'Cash Management',\n          state: 'app.sale.customers',\n          permission: 'app.sale.customers'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.sale.goals') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale.goals', {\n          translate: 'NAVIGATION.GOALS',\n          title: 'Goals',\n          state: 'app.sale.goals',\n          permission: 'app.sale.goals'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.sale.gift-cards') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale.gift-cards', {\n          translate: 'NAVIGATION.GIFT_CARDS',\n          title: 'Gift Cards',\n          state: 'app.sale.gift-cards',\n          permission: 'app.sale.gift-cards'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.sale.promotions') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale.promotions', {\n          translate: 'NAVIGATION.PROMOTIONS',\n          title: 'Promotions',\n          state: 'app.sale.promotions',\n          permission: 'app.sale.promotions'\n        });\n      }\n    }\n\n    function addEcommerceNavigation() {\n      if (!Session.hasSubscription || Session.hasAnyFeature([\n        'app.ecommerce.sites',\n        'app.ecommerce.orders',\n        'app.ecommerce.picking',\n        'app.ecommerce.scan_and_go'\n      ]) || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('ecommerce', {\n          title: 'NAVIGATION.ECOMMERCE_MODULE',\n          //group: true,\n          weight: 5,\n          permission: 'app.ecommerce',\n          icon: 'icon-laptop',\n          class: 'ecommerce'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.ecommerce.sites') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('ecommerce.sites', {\n          translate: 'NAVIGATION.CHANNELS',\n          title: 'Channels',\n          state: 'app.ecommerce.sites',\n          permission: 'app.ecommerce.sites'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.ecommerce.orders') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('ecommerce.orders', {\n          translate: 'NAVIGATION.ORDERS',\n          title: 'Orders',\n          state: 'app.ecommerce.orders',\n          permission: 'app.ecommerce.orders'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.ecommerce.picking') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('ecommerce.picking', {\n          translate: 'NAVIGATION.PICKING',\n          title: 'Picking',\n          state: 'app.ecommerce.picking',\n          permission: 'app.ecommerce.picking'\n\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.ecommerce.scan_and_go') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('ecommerce.scan_and_go', {\n          translate: 'NAVIGATION.SCAN_AND_GO',\n          title: 'Scan & Go',\n          state: 'app.ecommerce.scan_and_go',\n          permission: 'app.ecommerce.scan_and_go'\n        });\n      }\n    }\n\n    function addAccountingNavigation() {\n      if (!Session.hasSubscription || Session.hasAnyFeature([\n        'app.accounting.invoices',\n        'app.accounting.proformas',\n        'app.accounting.quotes',\n        'app.accounting.payments',\n        'app.integration_apps'\n      ]) || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('accounting', {\n          title: 'NAVIGATION.ACCOUNTING_MODULE',\n          //group: true,\n          weight: 5,\n          permission: 'app.accounting',\n          svgIcon: 'assets/images/custom-material-design-icons/file-document-outline.0472566f.svg',\n          class: 'accounting'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.accounting.invoices') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('accounting.invoices', {\n          translate: 'NAVIGATION.INVOICES',\n          title: 'Invoices',\n          state: 'app.accounting.invoices',\n          permission: 'app.accounting.invoices'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.accounting.proformas') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('accounting.proformas', {\n          translate: 'NAVIGATION.PROFORMAS',\n          title: 'Invoices',\n          state: 'app.accounting.proformas',\n          permission: 'app.accounting.proformas'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.accounting.quotes') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('accounting.quotes', {\n          translate: 'NAVIGATION.QUOTES',\n          title: 'Invoices',\n          state: 'app.accounting.quotes',\n          permission: 'app.accounting.quotes'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.accounting.payments') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('accounting.payments', {\n          translate: 'NAVIGATION.PAYMENTS',\n          title: 'Payments',\n          state: 'app.accounting.payments',\n          permission: 'app.accounting.payments'\n        });\n      }\n\n      if (!Session.hasSubscription || Session.hasFeature('app.integration_apps.apps') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('integration_apps', {\n          translate: 'NAVIGATION.APPS',\n          title: 'Apps',\n          weight: 5,\n          state: 'app.integration_apps.apps',\n          permission: 'app.integration_apps',\n          svgIcon: 'assets/images/custom-material-design-icons/shape-plus.f33dffff.svg',\n          class: 'integration_apps'\n        });\n      }\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.preview-panel')\n    .controller('PreviewPanelController', PreviewPanelController);\n    \n  /** @ngInject */\n  function PreviewPanelController($mdSidenav, $rootScope) {\n    \n    var vm = this;\n    vm.loading = true;\n    vm.preview = '';\n    vm.previewTemplate = '';\n    vm.params = {};\n    \n    // Methods\n\n    // Initialization\n    initialize();\n  \n    // Functions\n    function initialize(){\n      $rootScope.$on('previewPanel::open', function(event, params){\n        vm.loading = true;\n        vm.preview = params.preview;\n        vm.previewTemplate = 'app/preview-panel/previews/' + params.preview + '/' + params.preview + '.html';\n        vm.params = params.params;    \n        $mdSidenav('preview-panel').onClose(function() {\n            vm.loading = true;\n            vm.preview = '';\n            vm.previewTemplate = '';\n            vm.params = {};\n            $rootScope.$broadcast('previewPanel::close');\n        });\n        $mdSidenav('preview-panel').open();\n      });\n      \n      $rootScope.$on('previewPanel::loaded', function(event, params){\n        vm.loading = false;\n      });\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('fuse')\n    .controller('MainController', MainController);\n\n  /** @ngInject */\n  function MainController($scope, $rootScope, $window, Session) {\n    // Data\n\n    // Offline connexion alert\n    $scope.userName = '';\n    $scope.remainingDays = '';\n    $scope.showFreemiumBanner = '';\n\n    $scope.hideFreemiumBanner = hideFreemiumBanner;\n\n    init();\n\n    function init() {\n\n      // Remove the splash screen\n      $scope.$on('$viewContentAnimationEnded', function (event) {\n        if (event.targetScope.$id === $scope.$id) {\n          $rootScope.$broadcast('msSplashScreen::remove');\n        }\n      });\n\n      if (Session.showFreemiumBanner()) {\n        $scope.userName = Session.user.first_name;\n        $scope.remainingDays = Session.company.trial_remaining_days;\n        $scope.showFreemiumBanner = true;\n      }\n\n      if ($scope.remainingDays < 1) {\n        // TODO redirect screen\n      }\n    }\n\n\n    function hideFreemiumBanner() {\n      $scope.showFreemiumBanner = false;\n    }\n  }\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .run(runBlock);\n\n    /** @ngInject */\n    function runBlock(msUtils, fuseGenerator, fuseConfig)\n    {\n        /**\n         * Generate extra classes based on registered themes so we\n         * can use same colors with non-angular-material elements\n         */\n        fuseGenerator.generate();\n\n        /**\n         * Disable md-ink-ripple effects on mobile\n         * if 'disableMdInkRippleOnMobile' config enabled\n         */\n        if ( fuseConfig.getConfig('disableMdInkRippleOnMobile') && msUtils.isMobile() )\n        {\n            var bodyEl = angular.element('body');\n            bodyEl.attr('md-no-ink', true);\n        }\n\n        /**\n         * Put isMobile() to the html as a class\n         */\n        if ( msUtils.isMobile() )\n        {\n            angular.element('html').addClass('is-mobile');\n        }\n\n        /**\n         * Put browser information to the html as a class\n         */\n        var browserInfo = msUtils.detectBrowser();\n        if ( browserInfo )\n        {\n            var htmlClass = browserInfo.browser + ' ' + browserInfo.version + ' ' + browserInfo.os;\n            angular.element('html').addClass(htmlClass);\n        }\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .config(config);\n\n    /** @ngInject */\n    function config($ariaProvider, $logProvider, msScrollConfigProvider, fuseConfigProvider)\n    {\n        // Enable debug logging\n        $logProvider.debugEnabled(true);\n\n        /*eslint-disable */\n\n        // ng-aria configuration\n        $ariaProvider.config({\n            tabindex: false\n        });\n\n        // Fuse theme configurations\n        fuseConfigProvider.config({\n            'disableCustomScrollbars'        : true,\n            'disableCustomScrollbarsOnMobile': true,\n            'disableMdInkRippleOnMobile'     : true\n        });\n\n        // msScroll configuration\n        msScrollConfigProvider.config({\n            wheelPropagation: false\n        });\n\n        /*eslint-enable */\n    }\n})();\n\n(function() {\n  'use strict';\n\n  angular.module('fuse').run(runBlock);\n\n  /** @ngInject */\n  function runBlock($rootScope, $timeout, $state, $location, $filter, $mdDialog, $cookies, Session, apiResolver, editableThemes, Version, api, HTTP_STATUS, TrackerService, FeatureService, BarcodeService) {\n\n    $rootScope.session = Session;\n    $rootScope.BarcodeService = BarcodeService;\n    $rootScope.state = $state;\n\n    // Data\n    var stateChangeStartEvent;\n    var stateChangeSuccessEvent;\n    var showTermsDialogEvent;\n    var showTermsDialogOpened = false;\n\n    // TODO check if it's used, delete if not\n    // 3rd Party Dependencies -> Angular-xeditable: https://vitalets.github.io/angular-xeditable/#\n    editableThemes.default.submitTpl = '<md-button class=\"md-icon-button no-padding\" type=\"submit\" aria-label=\"save\"><md-icon md-font-icon=\"icon-checkbox-marked-circle\" class=\"md-accent-fg md-hue-1\"></md-icon></md-button>';\n    editableThemes.default.cancelTpl = '<md-button class=\"md-icon-button no-padding\" ng-click=\"$form.$cancel()\" aria-label=\"cancel\"><md-icon md-font-icon=\"icon-close-circle\" class=\"icon-cancel\"></md-icon></md-button>';\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      // Session initialization\n      Session.loadFromStorage();\n\n      // This is to logout the company user if we log with the contact token\n      if ($location.path().indexOf('/hub') === 0) {\n        if (Session.isAuthenticated()) {\n          Session.removeUser(Session.user.username);\n          Session.destroy();\n        }\n        var token = $location.search()['t'];\n        if (token) {\n          var now = new Date();\n          var expireDate = new Date(now);\n          expireDate.setDate(now.getDate() + 1);\n          $cookies.put('contact_token', token, {\n            'expires': expireDate,\n            'domain': api.baseDomainCookie\n          });\n        }\n      }\n\n      if (!Session.isAuthenticated()) {\n        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/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/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/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-transfer-deliveries-list/nd-transfer-deliveries-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-transfer-deliveries-list\\\" layout=\\\"column\\\" layout-fill><nd-grid \\ncolumns=\\\"vm.columns\\\" layout-fill flex layout=\\\"column\\\" url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\" \\nselected=\\\"selected\\\"></nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-transfers-list/nd-transfers-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-transfers-list\\\" layout=\\\"column\\\" layout-fill><nd-grid columns=\\\"vm.columns\\\" \\nlayout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\"></nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-users-list/nd-users-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-contacts-list\\\" layout=\\\"column\\\" layout-fill><nd-grid columns=\\\"vm.columns\\\" \\nlayout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\"></nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-verifactu-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/customer/wbCustomerDetail/wbCustomerDetail.html\",\"<form name=\\\"customerForm\\\" class=\\\"md-inline-form\\\" novalidate ng-submit=\\\"saveCustomer()\\\"><div layout=\\\"column\\\" \\nlayout-gt-sm=\\\"row\\\"><md-input-container flex><label translate=\\\"CUSTOMER.DETAILS.NAME\\\"></label><input type=\\\"text\\\" \\nname=\\\"name\\\" ng-model=\\\"customer.first_name\\\" required><div ng-messages=\\\"customerForm.name.$error\\\" \\nng-show=\\\"customerForm.name.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"ACCOUNT.COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container><md-input-container flex><label \\ntranslate=\\\"CUSTOMER.DETAILS.SURNAME\\\"></label><input type=\\\"text\\\" name=\\\"surname\\\" ng-model=\\\"customer.last_name\\\" required>\\n<div ng-messages=\\\"customerForm.surname.$error\\\" ng-show=\\\"customerForm.surname.$touched\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"ACCOUNT.COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container>\\n<md-input-container flex><label translate=\\\"CUSTOMER.DETAILS.EMAIL\\\"></label><input type=\\\"text\\\" name=\\\"email\\\" \\nng-model=\\\"customer.email\\\"></md-input-container></div><div layout=\\\"column\\\" layout-gt-xs=\\\"row\\\"><md-input-container flex>\\n<label translate=\\\"CUSTOMER.DETAILS.PHONE\\\"></label><input type=\\\"text\\\" name=\\\"phone\\\" ng-model=\\\"customer.phone\\\">\\n</md-input-container><md-input-container flex><label translate=\\\"CUSTOMER.DETAILS.ADDRESS\\\"></label><input type=\\\"text\\\" \\nname=\\\"address\\\" ng-model=\\\"customer.address\\\"></md-input-container><md-input-container flex><label \\ntranslate=\\\"CUSTOMER.DETAILS.CITY\\\"></label><input type=\\\"text\\\" name=\\\"city\\\" ng-model=\\\"customer.city\\\"></md-input-container>\\n</div><div layout=\\\"column\\\" layout-gt-xs=\\\"row\\\"><md-input-container flex><label translate=\\\"CUSTOMER.DETAILS.ZIP\\\"></label>\\n<input type=\\\"text\\\" name=\\\"zip\\\" ng-model=\\\"customer.zip\\\"></md-input-container><md-input-container flex \\nng-if=\\\"hideGender == false\\\"><label translate=\\\"CUSTOMER.DETAILS.GENDER\\\"></label><md-select ng-model=\\\"customer.gender\\\">\\n<md-option value=\\\"1\\\" translate=\\\"CUSTOMER.DETAILS.MALE\\\"></md-option><md-option value=\\\"2\\\" \\ntranslate=\\\"CUSTOMER.DETAILS.FEMALE\\\"></md-option></md-select></md-input-container><md-input-container flex><label \\ntranslate=\\\"CUSTOMER.DETAILS.CREATED_AT\\\"></label><input type=\\\"date\\\" name=\\\"created_at\\\" ng-model=\\\"creation_date\\\" \\ndisabled=\\\"disabled\\\"></md-input-container></div><div layout=\\\"column\\\" layout-gt-xs=\\\"row\\\" ng-if=\\\"hideComments == false\\\">\\n<md-input-container flex><label translate=\\\"CUSTOMER.DETAILS.COMMENTS\\\"></label><input type=\\\"text\\\" name=\\\"created_at\\\" \\nng-model=\\\"customer.comments\\\"></md-input-container></div><md-button class=\\\"md-raised md-primary md-raised\\\" \\naria-label=\\\"Save\\\" ng-if=\\\"hideSaveButton == false\\\" ng-disabled=\\\"customerForm.$invalid\\\" translate=\\\"ACCOUNT.SAVE\\\" \\nng-click=\\\"saveCustomer()\\\"></md-button><md-button class=\\\"md-raised md-warn\\\" aria-label=\\\"Delete\\\" \\ntranslate=\\\"CUSTOMER.DETAILS.DELETE\\\" ng-click=\\\"deleteCustomer()\\\" ng-disabled=\\\"isNewCustomer\\\" \\nng-if=\\\"hideDeleteButton == false\\\"></md-button></form>\");\n$templateCache.put(\"app/directives/dashboard-items/nd-dashboard-items-card/nd-dashboard-items-card.html\",\"<md-card class=\\\"nd-dashboard-item\\\"><md-card-title><md-card-title-text><span class=\\\"h3 text-bold\\\">\\n{{vm.title | translate}}</span></md-card-title-text></md-card-title><md-card-content layout-fill><div \\nclass=\\\"loading h-250\\\" ng-if=\\\"vm.loading\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular>\\n</md-progress-circular></div><div layout=\\\"row\\\" layout-wrap><div \\nng-repeat=\\\"dashboardItem in vm.dashboardItems | orderBy: \\'position\\'\\\" ng-click=\\\"vm.dashboardItemClicked(dashboardItem)\\\" \\nflex=\\\"100\\\" flex-gt-md=\\\"50\\\"><div class=\\\"dashboard-item\\\"><div class=\\\"dashboard-item-card\\\" layout=\\\"column\\\"><div \\nclass=\\\"dashboard-item-image\\\" style=\\\"background-image: url({{dashboardItem.image}})\\\"></div><div \\nclass=\\\"dashboard-item-floating-image\\\" layout=\\\"row\\\" layout-align=\\\"end center\\\" ng-if=\\\"dashboardItem.floating_image\\\"><img \\nng-src=\\\"{{dashboardItem.floating_image}}\\\"></div><div class=\\\"dashboard-item-content\\\"><div class=\\\"dashboard-item-title\\\">\\n{{vm.getDashboardItemTitle(dashboardItem)}}</div><div class=\\\"dashboard-item-body secondary-text\\\">\\n{{vm.getDashboardItemBody(dashboardItem)}}</div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon=\\\"icon-clock\\\" class=\\\"s14 md-primary mr-5\\\" ng-if=\\\"dashboardItem.minutes\\\"></md-icon><span \\nng-if=\\\"dashboardItem.minutes\\\" class=\\\"mr-5\\\">{{dashboardItem.minutes}} {{\\\"GENERAL.MINUTE_ABBR\\\" | translate}}</span>\\n<md-icon md-font-icon=\\\"icon-play-circle-outline\\\" class=\\\"s14 md-primary mr-5\\\" ng-if=\\\"dashboardItem.videos\\\"></md-icon>\\n<span ng-if=\\\"dashboardItem.videos\\\" class=\\\"mr-5\\\">\\n{{dashboardItem.videos}} {{ (dashboardItem.videos === 1 ? \\\"START.VIDEO\\\" : \\\"START.VIDEOS\\\") | translate}}</span> <span \\nflex></span></div></div></div></div></div></div></md-card-content></md-card>\");\n$templateCache.put(\"app/directives/invoice/neworderinvoice/wbNewOrderInvoice.html\",\"<div class=\\\"invoice\\\"><md-card class=\\\"no-margin\\\"><md-card-title layout=\\\"column\\\" class=\\\"pt-40 pl-40 pr-40 pb-0\\\" \\nng-hide=\\\"hideTitle\\\"><span class=\\\"md-title\\\">Bill</span><div layout=\\\"row\\\"><span class=\\\"md-subhead\\\">Order code:</span> \\n<span class=\\\"md-subhead md-accent-fg pl-10\\\">{{order.code}}</span></div></md-card-title><md-card-content class=\\\"pt-40\\\">\\n<table class=\\\"simple\\\"><thead><tr><td class=\\\"pl-24\\\">Code - Item</td><td class=\\\"text-right pr-24\\\">Price</td></tr></thead>\\n<tbody><tr ng-repeat=\\\"item in list | orderBy: \\'code\\'\\\"><td><span>#{{item.code}}</span> - {{item.item.item_type.name}} - \\n<span class=\\\"secondary-text\\\">{{item.item.action.name}}</span></td><td class=\\\"text-right h4\\\">\\n{{item.final_price.toFixed(2)}}{{item.meta_currency | currencyCharacter}}</td></tr><tr class=\\\"subtotal\\\" \\nng-if=\\\"showSubtotal\\\"><td class=\\\"text-uppercase pl-24 secondary-text\\\">Sub total</td><td \\nclass=\\\"text-right pr-24 secondary-text h4\\\">{{getSubTotal()}}{{company.currency | currencyCharacter}}</td></tr><tr \\nclass=\\\"tax\\\"><td class=\\\"text-uppercase pl-24 secondary-text\\\">Tax ({{company.vat}}%)</td><td \\nclass=\\\"text-right pr-24 secondary-text h4\\\">{{getTotalTax()}}{{company.currency | currencyCharacter}}</td></tr><tr><td \\nclass=\\\"text-uppercase pl-24 text-bold h2\\\">Total</td><td class=\\\"text-right pr-24 text-bold h2\\\">\\n{{getTotal()}}{{company.currency | currencyCharacter}}</td></tr></tbody></table></md-card-content></md-card></div>\");\n$templateCache.put(\"app/directives/item/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/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/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/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-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-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-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/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/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/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/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/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-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/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/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-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/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/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/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/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/esc-pos-printer-dialog/esc-pos-printer-dialog.html\",\"<md-dialog aria-label=\\\"Choose products\\\"><md-dialog-content><h2 translate=\\\"SALES.GIFT_TICKET\\\">Gift Ticket</h2><p \\ntranslate=\\\"SALES.SELECT_GIFT_TICKET_PRODUCTS\\\">Select those produts to print on the gift ticket</p><md-list>\\n<md-list-item ng-repeat=\\\"product in vm.products track by $index\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-checkbox ng-model=\\\"product.selected\\\" class=\\\"m-0\\\"></md-checkbox><strong class=\\\"mr-10\\\">{{product.gift_amount}}\\n</strong><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><img class=\\\"table-thumbnails mr-10\\\" \\nng-class=\\\"{\\'default-icon\\': !product.cover_thumbnail}\\\" \\nsrc=\\\"{{product.cover_thumbnail ? product.cover_thumbnail : \\'/assets/images/package-variant-closed.9c71cbbe.png\\'}}\\\"><div \\nlayout=\\\"column\\\" class=\\\"mr-8\\\"><a ng-click=\\\"vm.goToProduct(product.product)\\\">{{product.product_name}}</a> <small>\\n{{product.product_variant_size_name}} - {{product.product_variant_color_name}}</small> <small \\nclass=\\\"m-0 secondary-text\\\">{{ ::product.brand_name}}</small> <span ng-if=\\\"product.promotion\\\" class=\\\"m-0\\\">\\n{{ product.promotion_name}}</span></div></div><md-icon class=\\\"md-secondary no-margin\\\" \\nng-click=\\\"vm.removeGiftAmount(product)\\\" md-font-icon=\\\"icon-minus-box\\\"></md-icon><md-icon \\nclass=\\\"md-secondary no-margin\\\" ng-click=\\\"vm.addGiftAmount(product)\\\" md-font-icon=\\\"icon-plus-box\\\"></md-icon></div>\\n</md-list-item></md-list></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button ng-click=\\\"vm.hide()\\\">\\n{{(vm.isEco ? \\'SALES.SEND\\' : \\'SALES.PRINT\\') | translate}}</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/services/dialogs/request-pin-dialog/request-pin-dialog.html\",\"<md-dialog id=\\\"request-pin-dialog\\\"><md-dialog-content><div class=\\\"h2\\\">{{\\'USERS.CHANGE_USER\\' | translate}}</div><p \\ntranslate=\\\"USERS.CHANGE_USER_BODY\\\" \\ndata-translate-values=\\\"{firstName: vm.user.data.first_name, lastName:vm.user.data.last_name}\\\"></p><form name=\\\"pinForm\\\" \\nautocomplete=\\\"off\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"h-24\\\"><div \\nng-repeat=\\\"number in vm.pin track by $index\\\" class=\\\"h3\\\">*</div></div><div ng-if=\\\"!vm.valid\\\" \\nclass=\\\"red-fg full-width text-center\\\" translate=\\\"USERS.INVALID_PIN\\\">Invalid pin</div><div class=\\\"full-height\\\" flex \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\"><div flex layout=\\\"row\\\"><div class=\\\"p-5\\\" flex><div class=\\\"grey-100-bg key\\\" \\nflex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(1)\\\">1</div></div><div class=\\\"p-5\\\" flex><div \\nclass=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(2)\\\">2</div></div><div \\nclass=\\\"p-5\\\" flex><div class=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(3)\\\">3</div></div></div><div flex layout=\\\"row\\\"><div class=\\\"p-5\\\" flex><div \\nclass=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(4)\\\">4</div></div><div \\nclass=\\\"p-5\\\" flex><div class=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(5)\\\">5</div></div><div class=\\\"p-5\\\" flex><div class=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(6)\\\">6</div></div></div><div flex layout=\\\"row\\\"><div class=\\\"p-5\\\" \\nflex><div class=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(7)\\\">7</div>\\n</div><div class=\\\"p-5\\\" flex><div class=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(8)\\\">8</div></div><div class=\\\"p-5\\\" flex><div class=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(9)\\\">9</div></div></div><div flex layout=\\\"row\\\"><div class=\\\"p-5\\\" \\nflex><div class=\\\"key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.cancel()\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></div></div><div class=\\\"p-5\\\" flex><div class=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(0)\\\">0</div></div><div class=\\\"p-5\\\" flex><div class=\\\"key\\\" flex \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.clearValue()\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon>\\n</div></div></div></div></form></md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/services/dialogs/terms-and-conditions/terms-and-conditions-dialog.html\",\"<md-dialog id=\\\"terms-dialog\\\" data-test-id=\\\"tst-terms-dialog\\\" aria-label=\\\"Accept Terms\\\"><form name=\\\"termsForm\\\" \\nclass=\\\"md-inline-form\\\" novalidate autocomplete=\\\"false\\\"><md-dialog-content><h2 class=\\\"mb-32\\\">\\n{{\\'GENERAL.ACCEPT_TERMS_AND_CONDITIONS_TITLE\\' | translate}}</h2><div \\ntranslate=\\\"GENERAL.ACCEPT_TERMS_AND_CONDITIONS_MSG\\\" translate-values=\\\"{finalUserContract: vm.finalUserContract}\\\"></div>\\n<md-checkbox type=\\\"checkbox\\\" data-test-id=\\\"checkbox-terms\\\" ng-model=\\\"vm.user.terms_and_conditions_accepted\\\"><span \\ntranslate=\\\"GENERAL.ACCEPT_TERMS\\\">Accept Terms and conditions</span></md-checkbox></md-dialog-content><md-dialog-actions\\n layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><md-button ng-click=\\\"vm.logout()\\\" translate=\\\"TOOLBAR.LOGOUT\\\" \\ntranslate-attr-aria-label=\\\"TOOLBAR.LOGOUT\\\">Logout</md-button><span flex></span><md-button type=\\\"submit\\\" \\ndata-test-id=\\\"save-TandC-button\\\" ng-click=\\\"vm.save()\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"!vm.user.terms_and_conditions_accepted\\\" aria-label=\\\"SAVE\\\" translate=\\\"GENERAL.SAVE\\\" \\ntranslate-attr-aria-label=\\\"GENERAL.SAVE\\\">SAVE</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/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/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/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/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/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/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/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/products/products.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"products\\\" layout=\\\"row\\\"><div class=\\\"center\\\" flex layout=\\\"column\\\">\\n<nd-barcode-listener callback=\\\"vm.barcodeListenerCallback(barcode)\\\"></nd-barcode-listener><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" ng-if=\\\"vm.tableType === \\'p\\'\\\" translate=\\\"PRODUCTS.PRODUCTS\\\">\\n</span> <span class=\\\"h2\\\" ng-if=\\\"vm.tableType === \\'v\\'\\\" translate=\\\"PRODUCT.VARIANTS\\\"></span> <span class=\\\"h2\\\" \\nng-if=\\\"vm.tableType === \\'m\\'\\\" translate=\\\"NAVIGATION.MATERIALS\\\"></span> <span class=\\\"h2\\\" ng-if=\\\"vm.tableType === \\'b\\'\\\" \\ntranslate=\\\"PRODUCTS.BUNDLES\\\"></span><nd-new-feature-badge id=\\\"NEW_PRODUCTS_TABLE\\\" remove-margin=\\\"true\\\">\\n</nd-new-feature-badge><div flex layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"m-0 mr-10 stroked\\\" \\nui-sref=\\\"app.inventory.labels-generator\\\">{{\\'LABELS_GENERATOR.LABELS_GENERATOR\\' | translate}}</md-button><md-button \\nclass=\\\"m-0 mr-10 stroked\\\" has-permission=\\\"app.inventory.import.products,app.inventory.import.images\\\" \\nnd-track-click=\\\"import products\\\" ng-click=\\\"vm.showImportDialog()\\\" ng-if=\\\"vm.tableType === \\'p\\'\\\" \\ntranslate=\\\"TOOLBAR.IMPORT\\\"></md-button><md-button class=\\\"m-0 md-primary md-raised\\\" \\nng-if=\\\"vm.tableType !== \\'v\\' && vm.tableType !== \\'b\\'\\\" has-permission=\\\"inventory.products.create\\\" \\nnd-track-click=\\\"new product\\\" ng-click=\\\"vm.showQuickProductCreatorDialog()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon><span \\nng-if=\\\"vm.tableType === \\'p\\'\\\">{{\\'PRODUCT.NEW_PRODUCT\\' | translate}}</span> <span ng-if=\\\"vm.tableType === \\'m\\'\\\">\\n{{\\'MATERIAL.NEW_MATERIAL\\' | translate}}</span></div></md-button><md-button class=\\\"m-0 md-primary md-raised\\\" \\nng-if=\\\"vm.tableType === \\'b\\'\\\" has-permission=\\\"inventory.products.create\\\" nd-track-click=\\\"new bundle\\\" \\nui-sref=\\\"app.inventory.products.new-product({ isBundle: true })\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'PRODUCT.NEW_PRODUCT_BUNDLE\\' | translate}}</div></md-button>\\n</div></div><div class=\\\"content-card\\\" layout=\\\"row\\\"><md-sidenav class=\\\"sidenav border-right md-padding\\\" \\nmd-component-id=\\\"sidenav\\\" md-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper>\\n<nd-products-filters status=\\\"vm.status\\\" on-filters-change=\\\"vm.filterChanged()\\\"></nd-products-filters></md-sidenav><div \\nflex layout=\\\"column\\\"><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\naria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-gt-lg hide-gt-md \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button>\\n<md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-md hide-sm hide-xs \\nng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon>\\n</md-button><div class=\\\"filter-notification\\\" ng-if=\\\"vm.status.notifications\\\"><span class=\\\"notification-number\\\">\\n{{vm.status.notifications}}</span><md-icon md-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div>\\n<md-input-container class=\\\"nd-search-input w-200\\\" md-no-float><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nclass=\\\"secondary-text\\\" id=\\\"product-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks \\nng-change=\\\"vm.filterChanged()\\\" ng-model=\\\"vm.status.search\\\" ng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" \\ntranslate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><span \\nclass=\\\"secondary-text ml-10\\\" ng-if=\\\"vm.keptSelectionArray.length\\\">\\n{{\\'PRODUCTS.N_PRODUCTS_SELECTED\\' | translate: { n: vm.keptSelectionArray.length } }} </span><span flex></span>\\n<md-button class=\\\"md-icon-button\\\" ng-if=\\\"vm.tableType !== \\'v\\'\\\" has-permission=\\\"inventory.products.bulk_update\\\" \\nng-click=\\\"vm.openProductsEditDialog($event)\\\" ng-disabled=\\\"vm.gridApi.selection.getSelectedCount() == 0\\\"><md-icon \\nmd-font-icon=\\\"icon-pencil-box\\\"></md-icon><md-tooltip><span translate=\\\"PRODUCTS.BULK_EDIT\\\"></span></md-tooltip>\\n</md-button><md-button aria-label=\\\"Print Overview\\\" ng-if=\\\"vm.tableType !== \\'v\\'\\\" class=\\\"md-icon-button\\\" \\nhas-permission=\\\"app.inventory.products.product.overview\\\" ng-click=\\\"vm.printOverview($event)\\\" \\nng-disabled=\\\"vm.gridApi.selection.getSelectedCount() == 0\\\" translate-attr-aria-label=\\\"PRODUCTS.PRINT_OVERVIEW\\\"><md-icon\\n md-font-icon=\\\"icon-printer\\\"></md-icon><md-tooltip><span translate=\\\"PRODUCTS.PRINT_OVERVIEW\\\"></span></md-tooltip>\\n</md-button></div><div class=\\\"full-width h-0\\\"><md-progress-linear class=\\\"loader md-primary\\\" md-mode=\\\"indeterminate\\\" \\nng-if=\\\"vm.loading\\\"></md-progress-linear></div><md-content class=\\\"content no-padding uid-grid-container\\\" flex><div \\nclass=\\\"grid\\\" style=\\\"height: 100%\\\" ui-grid=\\\"vm.gridOptions\\\" ui-grid-auto-resize ui-grid-cellnav ui-grid-exporter \\nui-grid-move-columns ui-grid-pagination ui-grid-pinning ui-grid-resize-columns ui-grid-save-state ui-grid-selection>\\n</div></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/purchase.html\",\"<div class=\\\"page-layout simple right-sidenav\\\" id=\\\"purchase\\\" layout=\\\"row\\\"><div class=\\\"page-layout simple tabbed\\\" flex \\nlayout=\\\"column\\\" ms-scroll><div class=\\\"header no-padding\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button black-fg\\\" ng-if=\\\"!vm.idCollection && !vm.purchase.collection\\\" translate \\ntranslate-attr-aria-label=\\\"PURCHASE.GO_TO_PURCHASES\\\" ui-sref=\\\"app.inventory.purchases\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><md-button class=\\\"md-icon-button black-fg\\\" \\nng-if=\\\"vm.idCollection || vm.purchase.collection\\\" translate translate-attr-aria-label=\\\"PURCHASE.GO_TO_PURCHASES\\\" \\nui-sref=\\\"app.wholesale.presales.presale.purchases({idPresale: vm.purchase.collection})\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"!vm.isNewPurchase\\\"><div class=\\\"h2\\\" translate=\\\"PURCHASE.PURCHASE\\\"></div>\\n<div class=\\\"h2 secondary-text ml-10 pl-10 border-left\\\"><span>{{vm.purchase.autocode}}</span></div><div \\nclass=\\\"h2 secondary-text ml-10 pl-10 border-left\\\" flex hide-md hide-sm hide-xs ng-if=\\\"vm.purchase.target_warehouse\\\">\\n<span flex translate=\\\"PURCHASE.TO_WAREHOUSE\\\"></span>: <span flex>{{vm.purchase.target_warehouse_name}}</span></div>\\n<span class=\\\"secondary-text ml-10 pl-10 border-left left-bar\\\"></span> <span class=\\\"status status-badge\\\" \\nng-class=\\\"vm.getStatusColorClass()\\\">{{vm.getStatusLabel()}}</span></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.isNewPurchase\\\"><div class=\\\"h2\\\" translate=\\\"PURCHASE.NEW_PURCHASE\\\"></div></div><span flex></span><md-button \\nclass=\\\"m-0 mr-16 md-primary stroked\\\" has-permission=\\\"inventory.purchases.delete\\\" ng-click=\\\"vm.finish()\\\" \\nng-if=\\\"vm.changingStatus || vm.purchase.status === vm.purchaseOrderStatus.PURCHASE_ORDER_STATUS_PARTIALLY_RECEIVED\\\" \\ntranslate=\\\"PURCHASE.FINISH\\\"><span translate=\\\"PURCHASE.FINISH\\\"></span></md-button><md-button \\nclass=\\\"m-0 mr-16 md-warn stroked\\\" has-permission=\\\"inventory.purchases.delete\\\" ng-click=\\\"vm.delete()\\\" \\nng-disabled=\\\"vm.purchase.status !== vm.purchaseOrderStatus.PURCHASE_ORDER_STATUS_DRAFT\\\" translate=\\\"PURCHASE.DELETE\\\">\\n<span translate=\\\"PURCHASE.DELETE\\\"></span><md-tooltip md-direction=\\\"left\\\" \\nng-show=\\\"vm.purchase.status !== vm.purchaseOrderStatus.PURCHASE_ORDER_STATUS_DRAFT\\\"><span \\ntranslate=\\\"PURCHASE.DELETE_PURCHASE_BUTTON_TOOLTIP\\\"></span></md-tooltip></md-button></div></div><div class=\\\"content\\\" \\nflex layout=\\\"column\\\"><md-nav-bar class=\\\"pb-8\\\" data-test-id=\\\"product-tab-bar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nmd-no-ink-bar=\\\"true\\\" md-selected-nav-item=\\\"vm.currentNavItem\\\" nav-bar-aria-label=\\\"navigation links\\\" \\nng-if=\\\"!vm.isNewPurchase\\\"><md-nav-item has-permission=\\\"app.inventory.purchases.purchase.details\\\" \\nmd-nav-sref=\\\"app.inventory.purchases.purchase.details\\\" name=\\\"details\\\"><span translate=\\\"PURCHASE.DETAILS\\\"></span>\\n</md-nav-item><md-nav-item has-permission=\\\"app.inventory.purchases.purchase.products\\\" \\nmd-nav-sref=\\\"app.inventory.purchases.purchase.products\\\" name=\\\"products\\\"><span translate=\\\"PURCHASE.ORDER_PRODUCTS\\\">\\n</span></md-nav-item><div class=\\\"new-feature\\\" has-permission=\\\"app.inventory.purchases.purchase.products\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><nd-new-feature-badge class=\\\"ml-8\\\" id=\\\"PURCHASE_FCP\\\" remove-margin=\\\"true\\\">\\n</nd-new-feature-badge></div><md-nav-item has-permission=\\\"app.inventory.purchases.purchase.deliveries\\\" \\nmd-nav-sref=\\\"app.inventory.purchases.purchase.deliveries\\\" name=\\\"deliveries\\\" ng-if=\\\"vm.purchase.status > 1\\\"><span \\ntranslate=\\\"PURCHASE.DELIVERY_NOTES\\\"></span></md-nav-item><div class=\\\"new-feature\\\" \\nhas-permission=\\\"app.inventory.purchases.purchase.deliveries\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"vm.purchase.status > 1\\\"><nd-new-feature-badge class=\\\"ml-8\\\" id=\\\"DELIVERY_FCP\\\" remove-margin=\\\"true\\\">\\n</nd-new-feature-badge></div><md-nav-item has-permission=\\\"app.inventory.purchases.purchase.invoices\\\" \\nmd-nav-sref=\\\"app.inventory.purchases.purchase.invoices\\\" name=\\\"invoices\\\" ng-if=\\\"vm.showInvoicesTab\\\"><span \\ntranslate=\\\"PURCHASE.INVOICES\\\"></span></md-nav-item><div class=\\\"new-feature\\\" \\nhas-permission=\\\"app.inventory.purchases.purchase.invoices\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"vm.showInvoicesTab\\\"><nd-new-feature-badge class=\\\"ml-8\\\" id=\\\"INVOICE_FCP\\\" remove-margin=\\\"true\\\">\\n</nd-new-feature-badge></div><md-nav-item has-permission=\\\"app.inventory.purchases.purchase.payments\\\" \\nmd-nav-sref=\\\"app.inventory.purchases.purchase.payments\\\" name=\\\"payments\\\" ng-if=\\\"vm.purchase.status > 1\\\"><span \\ntranslate=\\\"PURCHASE.PAYMENTS\\\"></span></md-nav-item></md-nav-bar><md-content class=\\\"transparent-bg\\\" flex \\nlayout=\\\"column\\\" ui-view=\\\"subcontent\\\"></md-content></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchases/purchases.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"purchases\\\" layout=\\\"row\\\"><div class=\\\"center\\\" flex layout=\\\"column\\\"><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"PURCHASES.PURCHASES\\\"></span><nd-new-feature-badge \\nclass=\\\"ml-8 mt-4\\\" id=\\\"MAIN_PURCHASE_FCP\\\" remove-margin=\\\"true\\\"></nd-new-feature-badge><div flex layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button class=\\\"m-0 md-primary md-raised\\\" has-permission=\\\"inventory.purchases.create\\\" \\nui-sref=\\\"app.inventory.purchases.new.details\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'PURCHASE.NEW_PURCHASE\\' | translate}}</div></md-button></div></div><div \\nclass=\\\"content mb-16 flex-scrollable flex-noshrink\\\" layout=\\\"row\\\"><md-nav-bar data-test-id=\\\"product-tab-bar\\\" \\nmd-no-ink-bar=\\\"true\\\" md-selected-nav-item=\\\"vm.currentNavItem\\\" nav-bar-aria-label=\\\"navigation links\\\"><md-nav-item \\nclass=\\\"nav-item-badge\\\" disabled=\\\"disabled\\\" md-nav-click=\\\"vm.handleNavClick(status.code)\\\" name=\\\"{{status.code}}\\\" \\nng-if=\\\"status.code!=0\\\" ng-repeat=\\\"status in vm.orderStatuses | orderBy: \\'code\\'\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span>{{\\'PURCHASES.TAB_\\' + status.name | translate}}</span><div \\nclass=\\\"custom-badge status-badge\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-class=\\\"vm.orderStatusColors[status.code]\\\"><md-progress-circular md-diameter=\\\"14px\\\" ng-if=\\\"vm.loading\\\">\\n</md-progress-circular><span ng-if=\\\"!vm.loading\\\">{{vm.totalsByStatus[status.code]||0 | number:0}}</span></div></div>\\n</md-nav-item><md-nav-item class=\\\"nav-item-badge\\\" disabled=\\\"disabled\\\" md-nav-click=\\\"vm.handleNavClick(\\'all\\')\\\" \\nname=\\\"all\\\"><span translate=\\\"GENERAL.ALL\\\"></span></md-nav-item></md-nav-bar></div><div class=\\\"content-card\\\" \\nlayout=\\\"row\\\"><md-sidenav class=\\\"sidenav border-right\\\" md-component-id=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper><md-content class=\\\"content\\\" \\nflex ms-scroll><div ng-include=\\\"\\'app/main/apps/inventory/views/purchases/sidenavs/main-sidenav.html\\'\\\"></div>\\n</md-content></md-sidenav><div flex layout=\\\"column\\\"><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-gt-lg hide-gt-md \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button>\\n<md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-md hide-sm hide-xs \\nng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon>\\n</md-button><div class=\\\"filter-notification\\\" ng-if=\\\"vm.getFilterNotifications()\\\"><span class=\\\"notification-number\\\">\\n{{vm.getFilterNotifications()}}</span><md-icon md-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div>\\n<md-input-container class=\\\"nd-search-input\\\" md-no-float><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon>\\n<input id=\\\"purchase-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model-options=\\\"{debounce:200}\\\" \\nng-change=\\\"vm.reloadPurchases()\\\" ng-model=\\\"vm.status.search\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><span flex></span><md-button \\nclass=\\\"md-icon-button\\\" ui-sref=\\\"app.inventory.purchases.calendar\\\"><md-icon md-font-icon=\\\"icon-calendar\\\"></md-icon>\\n<md-tooltip><span translate=\\\"PURCHASES_CALENDAR.PURCHASES_CALENDAR\\\">Purchases</span></md-tooltip></md-button></div>\\n<md-content class=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><nd-purchases-list status=\\\"vm.status\\\">\\n</nd-purchases-list></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchases-calendar/purchases-calendar.html\",\"<div id=\\\"purchases-calendar\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" \\nflex><div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"PURCHASES.PURCHASES\\\"></span><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" flex><md-button class=\\\"m-0 md-primary stroked\\\" \\nhas-permission=\\\"inventory.purchases.create\\\" ui-sref=\\\"app.inventory.purchases.new.details\\\" \\ntranslate=\\\"PURCHASE.NEW_PURCHASE\\\"></md-button></div></div><div layout=\\\"row\\\" class=\\\"content-card\\\"><md-sidenav \\nclass=\\\"sidenav border-right\\\" md-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" \\nms-scroll ms-sidenav-helper><md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/inventory/views/purchases-calendar/sidenavs/main-sidenav.html\\'\\\"></div></md-content>\\n</md-sidenav><div layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-xs hide-sm hide-md ng-click=\\\"vm.sidenavLockedOpen = !vm.sidenavLockedOpen\\\" \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon>\\n<input id=\\\"purchase-search\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\ntranslate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" ng-model-options=\\\"{ debounce: 500 }\\\"></md-input-container>\\n<md-button class=\\\"ml-20\\\" translate=\\\"PURCHASES_CALENDAR.PURCHASES\\\" ng-disabled=\\\"vm.calendarType==\\'purchases\\'\\\" \\nng-click=\\\"vm.calendarType=\\'purchases\\';\\\"></md-button><md-button translate=\\\"PURCHASES_CALENDAR.DELIVERIES\\\" \\nng-disabled=\\\"vm.calendarType==\\'deliveries\\'\\\" ng-click=\\\"vm.calendarType=\\'deliveries\\';\\\"></md-button><span flex></span>\\n<md-progress-circular ng-if=\\\"vm.loading\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular><div class=\\\"\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button class=\\\"md-icon-button arrow\\\" ng-click=\\\"vm.prevYear()\\\" \\naria-label=\\\"Previous\\\"><md-icon md-font-icon=\\\"icon-chevron-left\\\"></md-icon></md-button><div class=\\\"title\\\">\\n{{vm.currentYear}}</div><md-button class=\\\"md-icon-button arrow\\\" ng-click=\\\"vm.nextYear()\\\" aria-label=\\\"Next\\\"><md-icon \\nmd-font-icon=\\\"icon-chevron-right\\\"></md-icon></md-button><md-button class=\\\"md-icon-button\\\" \\nui-sref=\\\"app.inventory.purchases\\\"><md-icon md-font-icon=\\\"icon-view-list\\\"></md-icon><md-tooltip><span \\ntranslate=\\\"NAVIGATION.PURCHASES\\\">Purchases</span></md-tooltip></md-button><md-button class=\\\"md-icon-button\\\" \\nui-sref=\\\"app.inventory.purchases.calendar\\\" ng-disabled=\\\"true\\\"><md-icon class=\\\"md-primary-fg\\\" \\nmd-font-icon=\\\"icon-calendar\\\"></md-icon><md-tooltip><span translate=\\\"PURCHASES_CALENDAR.PURCHASES_CALENDAR\\\">Purchases\\n</span></md-tooltip></md-button></div></div><md-content class=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll>\\n<div layout=\\\"row\\\" layout-wrap><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.JANUARY\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[1]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.FEBRUARY\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[2]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.MARCH\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[3]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.APRIL\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[4]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.MAY\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[5]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.JUNE\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[6]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.JULY\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[7]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.AUGUST\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[8]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.SEPTEMBER\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[9]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.OCTOBER\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[10]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.NOVEMBER\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[11]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.DECEMBER\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[12]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div></div></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocks/stocks.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"inventories-stocks\\\" layout=\\\"row\\\"><div class=\\\"center\\\" flex \\nlayout=\\\"column\\\"><nd-barcode-listener callback=\\\"vm.barcodeListenerCallback(barcode)\\\"></nd-barcode-listener><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h2\\\" translate=\\\"STOCKS.STOCKS\\\"></span>\\n<nd-new-feature-badge class=\\\"ml-8\\\" class=\\\"new-feature-width\\\" id=\\\"NEW_STOCKS_SCREEN\\\" remove-margin=\\\"true\\\">\\n</nd-new-feature-badge></div><div class=\\\"content-card\\\" layout=\\\"row\\\"><md-sidenav \\nclass=\\\"sidenav border-right md-padding\\\" md-component-id=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper><nd-products-filters \\nstatus=\\\"vm.status\\\" on-filters-change=\\\"vm.reloadProducts()\\\"></nd-products-filters><div class=\\\"pt-20\\\"><div class=\\\"mb-10\\\" \\ntranslate=\\\"NAVIGATION.WAREHOUSES\\\"></div><md-input-container class=\\\"m-0 p-0\\\" layout=\\\"column\\\" \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'position\\'\\\"><md-checkbox ng-checked=\\\"vm.exists(warehouse)\\\" \\nng-click=\\\"vm.toggle(warehouse)\\\"><small>{{warehouse.name}}</small></md-checkbox></md-input-container></div></md-sidenav>\\n<div flex layout=\\\"column\\\"><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\naria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-gt-lg hide-gt-md \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" aria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" \\nclass=\\\"icon\\\"></md-icon></md-button><md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" \\nhide-md hide-sm hide-xs ng-click=\\\"vm.sidenavLockedOpen = !vm.sidenavLockedOpen\\\"><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button><div class=\\\"filter-notification\\\" \\nng-if=\\\"vm.status.notifications\\\"><span class=\\\"notification-number\\\">{{vm.status.notifications}}</span><md-icon \\nmd-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div><md-input-container class=\\\"nd-search-input\\\" \\nmd-no-float><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" \\nid=\\\"product-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.search\\\" \\nplaceholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><span flex>\\n</span><div ng-include=\\\"\\'app/directives/nd-stock-legend/nd-stock-legend.html\\'\\\"></div></div><md-content \\nclass=\\\"content p-0 fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable\\\" datatable=\\\"\\\" dt-columns=\\\"vm.dtColumns\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" id=\\\"datatable-table\\\"></table></md-content></div></div></div>\\n</div>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktaking/stocktaking.html\",\"<div id=\\\"stocktaking\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"row\\\"><div class=\\\"page-layout simple tabbed\\\" \\nlayout=\\\"column\\\" flex ms-scroll><div class=\\\"header\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button black-fg\\\" ui-sref=\\\"app.inventory.stocktakings\\\" translate \\ntranslate-attr-aria-label=\\\"STOCKTAKING.GO_TO_STOCKTAKINGS\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon>\\n</md-button><div ng-if=\\\"!vm.isNewStocktaking\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><div class=\\\"h2\\\" \\ntranslate=\\\"STOCKTAKING.STOCKTAKING\\\"></div><div class=\\\"h2 secondary-text ml-10 pl-10 border-left\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span>{{vm.stocktaking.autocode}}</span><div class=\\\"ml-8\\\" ng-if=\\\"vm.stocktaking.partial\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"mr-8\\\" ng-if=\\\"vm.stocktaking.brand\\\">\\n· {{vm.stocktaking.brand_instance.name}} </span><span class=\\\"mr-8\\\" ng-if=\\\"vm.stocktaking.category\\\">\\n· {{vm.stocktaking.category_instance.name}} </span><span class=\\\"mr-8\\\" ng-if=\\\"vm.stocktaking.subcategory\\\">\\n· {{vm.stocktaking.subcategory_instance.name}} </span><span class=\\\"mr-8\\\" ng-if=\\\"vm.stocktaking.season\\\">\\n· {{vm.stocktaking.season_instance.name}} </span><span class=\\\"mr-8\\\" ng-if=\\\"vm.stocktaking.collection\\\">\\n· {{vm.stocktaking.collection_instance.code}}</span></div></div><div class=\\\"h2 secondary-text ml-10 pl-10\\\"><span \\nclass=\\\"pb-5 status-badge \\' + {{vm.getStatusColor(vm.stocktaking.status)}} + \\'\\\">\\n{{vm.getStatusLabel(vm.stocktaking.status)}}</span></div></div><div ng-if=\\\"vm.isNewStocktaking\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex><div class=\\\"h2\\\" translate=\\\"STOCKTAKING.NEW_STOCKTAKING\\\"></div></div><md-button \\nclass=\\\"md-warn stroked m-0\\\" translate=\\\"STOCKTAKING.DELETE\\\" \\nng-if=\\\"vm.stocktaking.status == vm.STOCKTAKING_STATUSES.DRAFT\\\" has-permission=\\\"inventory.stocktakings.delete_draft\\\" \\nng-disabled=\\\"!vm.isEditable()\\\" ng-click=\\\"vm.delete()\\\"></md-button></div><div class=\\\"content\\\" layout=\\\"column\\\" flex>\\n<md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" md-no-ink-bar=\\\"true\\\" nav-bar-aria-label=\\\"navigation links\\\" \\ndata-test-id=\\\"product-tab-bar\\\" ng-if=\\\"!vm.isNewStocktaking\\\"><md-nav-item \\nmd-nav-sref=\\\"app.inventory.stocktakings.stocktaking.details\\\" name=\\\"details\\\"><span translate=\\\"STOCKTAKING.DETAILS\\\">\\nDetails</span></md-nav-item><md-nav-item md-nav-sref=\\\"app.inventory.stocktakings.stocktaking.products\\\" name=\\\"products\\\">\\n<span translate=\\\"STOCKTAKING.PRODUCTS\\\">Products</span></md-nav-item></md-nav-bar><md-content ui-view=\\\"subcontent\\\" \\nclass=\\\"transparent-bg\\\" layout=\\\"column\\\" flex></md-content></div></div><nd-stocktaking-historic \\nstocktaking-historic-array=\\\"vm.stocktakingHistoricArray\\\" stocktaking-historic-next=\\\"vm.stocktakingHistoricNext\\\" \\nshow=\\\"vm.showStocktakingHistoricFunc()\\\" show-header=\\\"vm.stocktaking.status === vm.STOCKTAKING_STATUSES.DRAFT\\\">\\n</nd-stocktaking-historic></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktakings/stocktakings.html\",\"<div id=\\\"stocktakings\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex>\\n<div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"STOCKTAKINGS.STOCKTAKINGS\\\"></span><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" flex><md-button class=\\\"m-0 md-primary md-raised\\\" \\nhas-permission=\\\"inventory.stocktakings.create\\\" ui-sref=\\\"app.inventory.stocktakings.new.details\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'STOCKTAKINGS.NEW_STOCKTAKING\\' | translate}}</div></md-button></div></div><div layout=\\\"row\\\" class=\\\"content-card\\\">\\n<md-sidenav class=\\\"sidenav border-right\\\" md-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" \\nmd-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper><md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/inventory/views/stocktakings/sidenavs/main-sidenav.html\\'\\\"></div></md-content></md-sidenav>\\n<div layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-button class=\\\"md-icon-button sidenav-toggle\\\" hide-xs hide-sm hide-md \\nng-click=\\\"vm.sidenavLockedOpen = !vm.sidenavLockedOpen\\\" aria-label=\\\"Toggle left sidenav\\\"><md-icon \\nmd-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button><div class=\\\"filter-notification\\\" \\nng-if=\\\"vm.getFilterNotifications()\\\"><span class=\\\"notification-number\\\">{{vm.getFilterNotifications()}}</span><md-icon \\nmd-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div><md-input-container md-no-float \\nclass=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"stocktaking-search\\\" \\nng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\"></table></md-content></div></div></div>\\n</div>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/transfer.html\",\"<div id=\\\"transfer\\\" class=\\\"page-layout simple right-sidenav\\\" layout=\\\"row\\\"><div class=\\\"page-layout simple tabbed\\\" \\nlayout=\\\"column\\\" flex ms-scroll><div class=\\\"header no-padding\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button class=\\\"md-icon-button black-fg\\\" \\nui-sref=\\\"app.inventory.transfers\\\" translate translate-attr-aria-label=\\\"TRANSFER.GO_TO_TRANSFERS\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div \\nng-if=\\\"!vm.isNewTransfer\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"h2\\\" \\nng-if=\\\"!vm.transfer.is_replenishment\\\" translate=\\\"TRANSFER.TRANSFER\\\"></div><div class=\\\"h2\\\" \\nng-if=\\\"vm.transfer.is_replenishment\\\" translate=\\\"TRANSFER.REPLENISHMENT\\\"></div><div \\nclass=\\\"h2 ml-10 ph-10 border-left secondary-text border-right\\\">{{vm.transfer.autocode}}</div><div \\nclass=\\\"status-badge ml-10\\\" ng-class=\\\"vm.getStatusColorClass(vm.transfer.status)\\\">\\n{{vm.getStatusLabel(vm.transfer.status)}}</div></div><div ng-if=\\\"vm.isNewTransfer\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div ng-if=\\\"!vm.isReplenishment\\\" class=\\\"h2\\\" translate=\\\"TRANSFER.NEW_TRANSFER\\\"></div><div \\nng-if=\\\"vm.isReplenishment\\\" class=\\\"h2\\\" translate=\\\"TRANSFER.NEW_REPLENISHMENT\\\"></div></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"></div><md-button class=\\\"mr-16 md-warn stroked\\\" translate=\\\"TRANSFER.DELETE\\\" \\nng-if=\\\"vm.showDeleteButton()\\\" has-permission=\\\"inventory.transfers.delete\\\" ng-click=\\\"vm.delete()\\\"></md-button></div>\\n</div></div><div class=\\\"content\\\" layout=\\\"column\\\" flex><md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" \\nmd-no-ink-bar=\\\"true\\\" nav-bar-aria-label=\\\"navigation links\\\" data-test-id=\\\"product-tab-bar\\\" ng-if=\\\"!vm.isNewTransfer\\\" \\nclass=\\\"pb-8\\\"><md-nav-item md-nav-sref=\\\"app.inventory.transfers.transfer.details\\\" \\nhas-permission=\\\"app.inventory.transfers.transfer.details\\\" name=\\\"details\\\"><span translate=\\\"TRANSFER.DETAILS\\\">Details\\n</span></md-nav-item><md-nav-item md-nav-sref=\\\"app.inventory.transfers.transfer.products\\\" \\nhas-permission=\\\"app.inventory.transfers.transfer.products\\\" name=\\\"products\\\" ng-if=\\\"vm.transfer.is_replenishment\\\"><span \\ntranslate=\\\"TRANSFER.ORDER_PRODUCTS\\\">Products</span></md-nav-item><md-nav-item \\nmd-nav-sref=\\\"app.inventory.transfers.transfer.deliveries\\\" has-permission=\\\"app.inventory.transfers.transfer.deliveries\\\" \\nname=\\\"deliveries\\\" ng-if=\\\"vm.transfer.status > 1 && !vm.transfer.single_delivery\\\"><span translate=\\\"TRANSFER.DELIVERIES\\\">\\nDeliveries</span></md-nav-item><md-nav-item md-nav-sref=\\\"app.inventory.transfers.transfer.delivery\\\" \\nhas-permission=\\\"app.inventory.transfers.transfer.delivery\\\" name=\\\"delivery\\\" \\nng-if=\\\"vm.transfer.status >= vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE\\\"><span \\ntranslate=\\\"TRANSFER.DELIVERY\\\">Delivery</span></md-nav-item></md-nav-bar><md-content ui-view=\\\"subcontent\\\" \\nclass=\\\"transparent-bg\\\" layout=\\\"column\\\" flex></md-content></div></div><md-sidenav class=\\\"sidenav md-sidenav-right\\\" \\nmd-is-locked-open=\\\"$mdMedia(\\'gt-md\\') && vm.barcodeLogOpened\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper><div\\n ng-repeat=\\\"pendingBarcode in vm.pendingBarcodes\\\"><div class=\\\"p-5 border-bottom\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center start\\\" style=\\\"background-color: #36C1F1; height: 120px\\\" ng-if=\\\"$index==0\\\" \\nng-class=\\\"{\\'yellow-300-bg\\': pendingBarcode.status == \\'pending\\', \\'white-fg red-500-bg\\': pendingBarcode.status == \\'error\\'}\\\">\\n<div class=\\\"md-padding\\\" ng-if=\\\"pendingBarcode.status == \\'success\\'\\\"><h1 class=\\\"m-0 p-0\\\">\\n{{pendingBarcode.size}} - {{pendingBarcode.color}}</h1><h2 class=\\\"m-0 p-0\\\">{{pendingBarcode.code}}</h2><p \\nclass=\\\"m-0 p-0 secondary-text\\\">{{pendingBarcode.barcode}}</p></div><div class=\\\"m-0 pl-15\\\" \\nng-if=\\\"pendingBarcode.status != \\'success\\'\\\"><md-progress-circular ng-if=\\\"pendingBarcode.status == \\'pending\\'\\\" \\nmd-diameter=\\\"30px\\\" class=\\\"mh-8\\\"></md-progress-circular><p>{{pendingBarcode.barcode}}</p></div></div><div \\nclass=\\\"m-0 p-15 border-bottom\\\" ng-if=\\\"$index!=0\\\" \\nng-class=\\\"{\\'white-fg red-500-bg\\': pendingBarcode.status == \\'error\\', \\'yellow-300-bg\\': pendingBarcode.status == \\'pending\\', \\'white-bg\\': pendingBarcode.status == \\'success\\'}\\\">\\n<div class=\\\"m-0 p-5\\\" ng-if=\\\"pendingBarcode.status == \\'success\\'\\\"><p class=\\\"m-0 p-0\\\">{{pendingBarcode.code}}</p><p \\nclass=\\\"m-0 p-0\\\">{{pendingBarcode.size}} - {{pendingBarcode.color}}</p><p class=\\\"m-0 p-0 secondary-text\\\">\\n{{pendingBarcode.barcode}}</p></div><div class=\\\"m-0 p-5\\\" ng-if=\\\"pendingBarcode.status != \\'success\\'\\\" layout=\\\"row\\\"><p \\nclass=\\\"m-0 p-0\\\">{{pendingBarcode.barcode}}</p><span flex></span><md-progress-circular \\nng-if=\\\"pendingBarcode.status == \\'pending\\'\\\" md-diameter=\\\"10px\\\" class=\\\"mh-8\\\"></md-progress-circular></div></div></div>\\n</md-sidenav></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfers/transfers.html\",\"<div id=\\\"transfers\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"TRANSFERS.TRANSFERS\\\"></span><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" flex><md-button class=\\\"m-0 mr-10 stroked\\\" has-permission=\\\"inventory.transfers.create\\\" \\nui-sref=\\\"app.analytics.report.stock-replenishment\\\" translate=\\\"TRANSFER.REPLENISHMENT_REPORT\\\"></md-button><md-button \\ndata-test-id=\\\"replenishment-button-new\\\" class=\\\"m-0 mr-10 stroked md-primary\\\" \\nhas-permission=\\\"inventory.transfers.create\\\" ui-sref=\\\"app.inventory.transfers.new.details({type:\\'replenishment\\'})\\\" \\nnd-track-click=\\\"new replenishment\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'TRANSFER.NEW_REPLENISHMENT\\' | translate}}</div></md-button><md-button \\nclass=\\\"m-0 md-primary md-raised\\\" data-test-id=\\\"transfer-button-new\\\" has-permission=\\\"inventory.transfers.create\\\" \\nui-sref=\\\"app.inventory.transfers.new.details\\\" nd-track-click=\\\"new transfer\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon>\\n{{\\'TRANSFER.NEW_TRANSFER\\' | translate}}</div></md-button></div></div><div layout=\\\"row\\\" \\nclass=\\\"content mb-16 flex-scrollable flex-noshrink\\\"><md-nav-bar data-test-id=\\\"product-tab-bar\\\" md-no-ink-bar=\\\"true\\\" \\nmd-selected-nav-item=\\\"vm.currentNavItem\\\" nav-bar-aria-label=\\\"navigation links\\\"><md-nav-item \\nng-repeat=\\\"status in vm.orderStatuses | orderBy: \\'code\\'\\\" ng-if=\\\"status.code!=0\\\" class=\\\"nav-item-badge\\\" \\ndisabled=\\\"disabled\\\" md-nav-click=\\\"vm.handleNavClick(status.code)\\\" name=\\\"{{status.code}}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span>{{\\'TRANSFERS.TAB_\\' + status.name | translate}}</span><div \\nclass=\\\"custom-badge status-badge\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-class=\\\"vm.orderStatusColors[status.code]\\\"><md-progress-circular md-diameter=\\\"14px\\\" ng-if=\\\"vm.loading\\\">\\n</md-progress-circular><span ng-if=\\\"!vm.loading\\\">{{vm.totalsByStatus[status.code]||0 | number:0}}</span></div></div>\\n</md-nav-item><md-nav-item class=\\\"nav-item-badge\\\" disabled=\\\"disabled\\\" md-nav-click=\\\"vm.handleNavClick(\\'all\\')\\\" \\nname=\\\"all\\\"><span translate=\\\"GENERAL.ALL\\\"></span></md-nav-item></md-nav-bar></div><div layout=\\\"row\\\" \\nclass=\\\"content-card\\\"><md-sidenav class=\\\"sidenav border-right\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper>\\n<md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/inventory/views/transfers/sidenavs/main-sidenav.html\\'\\\"></div></md-content></md-sidenav><div \\nlayout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-button class=\\\"md-icon-button sidenav-toggle\\\" hide-xs hide-sm hide-md ng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\" \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button><div \\nclass=\\\"filter-notification\\\" ng-if=\\\"vm.getFilterNotifications()\\\"><span class=\\\"notification-number\\\">\\n{{vm.getFilterNotifications()}}</span><md-icon md-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div>\\n<md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon>\\n<input id=\\\"transfer-search\\\" ng-model=\\\"vm.status.search\\\" ng-model-options=\\\"{debounce:200}\\\" \\nng-change=\\\"vm.reloadTransfers()\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><nd-transfers-list status=\\\"vm.status\\\"></nd-transfers-list>\\n</md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/uids/uids.html\",\"<div id=\\\"uids\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"NAVIGATION.UIDS\\\"></span></div><div layout=\\\"row\\\" \\nclass=\\\"content-card\\\"><md-sidenav class=\\\"sidenav border-right\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper>\\n<md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/inventory/views/uids/sidenavs/main-sidenav.html\\'\\\"></div></md-content></md-sidenav><div \\nlayout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"></div><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\"></table></md-content></div></div></div>\\n</div>\");\n$templateCache.put(\"app/main/apps/inventory/views/warehouse/warehouse.html\",\"<div id=\\\"warehouse\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button black-fg\\\" ui-sref=\\\"app.inventory.warehouses\\\" translate \\ntranslate-attr-aria-label=\\\"WAREHOUSES.GO_TO_WAREHOUSES\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button>\\n<div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"h2 mr-8\\\">{{vm.warehouse.name}}</div><nd-warehouse-badge type=\\\"vm.warehouse.type\\\"></nd-warehouse-badge></div><div\\n layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mr-8\\\"><md-button class=\\\"md-primary md-raised mr-8\\\" \\nng-if=\\\"vm.currentNavItem === \\'stock-locations\\'\\\" has-permission=\\\"app.inventory.warehouses.warehouse.stock-locations\\\" \\nng-click=\\\"vm.handleNewStockLocation()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'WAREHOUSE.NEW_LOCATION\\' | translate}}</div></md-button><md-menu \\nhas-permission=\\\"inventory.adjustments.delete\\\"><md-button aria-label=\\\"Actions\\\" class=\\\"md-primary stroked\\\" \\nng-click=\\\"$mdMenu.open($event)\\\" ng-disabled=\\\"vm.loadingDelete\\\"><span translate=\\\"GENERAL.ACTIONS\\\"></span></md-button>\\n<md-menu-content width=\\\"4\\\"><md-menu-item has-permission=\\\"inventory.adjustments.delete\\\"><md-button \\nng-click=\\\"vm.transferAll()\\\" ng-disabled=\\\"vm.loading\\\">{{\\'WAREHOUSE.TRANSFER_ALL\\' | translate}}</md-button>\\n</md-menu-item><md-divider></md-divider><md-menu-item has-permission=\\\"inventory.adjustments.delete\\\"><md-button \\nclass=\\\"md-warn\\\" ng-disabled=\\\"vm.loadingDelete\\\" ng-click=\\\"vm.deleteWarehouse()\\\">{{\\'GENERAL.DELETE\\' | translate}}\\n</md-button></md-menu-item></md-menu-content></md-menu></div></div></div></div><div class=\\\"content\\\" layout=\\\"column\\\" \\nflex><md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" md-no-ink-bar=\\\"true\\\" nav-bar-aria-label=\\\"navigation links\\\" \\ndata-test-id=\\\"product-tab-bar\\\"><md-nav-item md-nav-sref=\\\"app.inventory.warehouses.warehouse.details\\\" \\nhas-permission=\\\"app.inventory.warehouses.warehouse.details\\\" name=\\\"details\\\">{{\\\"WAREHOUSE.DETAILS\\\" | translate}}\\n</md-nav-item><md-nav-item ng-if=\\\"vm.warehouse.type === vm.WAREHOUSE_TYPES.STORE\\\" \\nmd-nav-sref=\\\"app.inventory.warehouses.warehouse.registers\\\" \\nhas-permission=\\\"app.inventory.warehouses.warehouse.registers\\\" name=\\\"registers\\\">{{\\\"WAREHOUSE.REGISTERS\\\" | translate }}\\n</md-nav-item><md-nav-item md-nav-sref=\\\"app.inventory.warehouses.warehouse.stock-locations\\\" \\nhas-permission-and-feature=\\\"app.inventory.warehouses.warehouse.stock-locations\\\" name=\\\"stock-locations\\\"><div flex \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div>{{\\'WAREHOUSE.LOCATIONS\\' | translate}}</div><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" \\nclass=\\\"md-primary-fg has-permission-and-feature-icon\\\"></md-icon><nd-new-feature-badge class=\\\"ml-8 new-feature\\\" \\nid=\\\"NEW_STOCK_LOCATIONS\\\" remove-margin=\\\"true\\\"></nd-new-feature-badge></div></md-nav-item><md-nav-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-change=\\\"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\\\" \\nng-model-options=\\\"{ updateOn: \\'default blur\\', debounce: { default: 300, blur: 0 } }\\\" type=\\\"text\\\"> <span class=\\\"ml-5\\\">%\\n</span></div></td><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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/invoice/dialogs/missing-corrective-serial-number-type-dialog/missing-corrective-serial-number-type-dialog.html\",\"<md-dialog id=\\\"missing-corrective-serial-number-type-dialog\\\" style=\\\"max-width: 500px\\\"><md-dialog-content><h2 \\nclass=\\\"mb-32\\\">{{\\'INVOICE.MISSING_CORRECTIVE_INVOICE_SERIAL_NUMBER_TYPE_TITLE\\' | translate}}</h2><div><span \\ntranslate=\\\"INVOICE.MISSING_CORRECTIVE_INVOICE_SERIAL_NUMBER_TYPE_BODY_1\\\"></span><nd-a \\nstate=\\\"\\'app.inventory.configuration.default_serial_numbers\\'\\\" scroll-to=\\\"\\'corrective-invoice-serial-number\\'\\\">\\n{{\\'INVOICE.MISSING_CORRECTIVE_INVOICE_SERIAL_NUMBER_TYPE_BODY_2\\' | translate}}</nd-a></div></md-dialog-content>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/accounting/views/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/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/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/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/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/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-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-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-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/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/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/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/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/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/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/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/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/ecommerce/views/sorting/sidenavs/main/main-sidenav.html\",\"<md-content ms-scroll class=\\\"content no-padding\\\" flex><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div \\ntranslate=\\\"GENERAL.FILTERS\\\">Filters</div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" \\nmd-font-icon=\\\"icon-tag-text-outline\\\"></md-icon><md-select ng-model=\\\"vm.filterBrands\\\" flex><md-option ng-value=\\\"null\\\" \\ntranslate=\\\"PRODUCT.ALL_BRANDS\\\">All Brands</md-option><md-option ng-repeat=\\\"brand in vm.brandsList | orderBy: \\'name\\'\\\" \\nng-value=\\\"brand.id\\\">{{brand.name}}</md-option></md-select></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nclass=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-folder-multiple\\\"></md-icon><md-select ng-model=\\\"vm.filterCategories\\\" \\nng-change=\\\"vm.checkSubcategory(vm.filterCategories)\\\" flex><md-option ng-value=\\\"null\\\" \\ntranslate=\\\"PRODUCT.ALL_CATEGORIES\\\">All Categories</md-option><md-option \\nng-repeat=\\\"category in vm.categoriesList | orderBy: \\'name\\'\\\" ng-value=\\\"category.id\\\">{{category.name}}</md-option>\\n</md-select></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-folder\\\">\\n</md-icon><md-select ng-model=\\\"vm.filterSubcategories\\\" flex><md-option ng-value=\\\"null\\\" \\ntranslate=\\\"PRODUCT.ALL_SUBCATEGORIES\\\">All Subcategories</md-option><md-option \\nng-repeat=\\\"subcategory in vm.subcategoriesList | filter: vm.filterCategories? vm.filterCategories : false | orderBy: \\'name\\'\\\" \\nng-value=\\\"subcategory.id\\\">{{subcategory.name}}</md-option></md-select></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-weather-sunny\\\"></md-icon><md-select \\nng-model=\\\"vm.filterSeasons\\\" flex><md-option ng-value=\\\"null\\\" translate=\\\"PRODUCT.ALL_SEASONS\\\">All Seasons</md-option>\\n<md-option ng-repeat=\\\"season in vm.seasonsList | orderBy: \\'position\\'\\\" ng-value=\\\"season.id\\\">{{season.name}}</md-option>\\n</md-select></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" has-permission=\\\"app.ecommerce\\\"><md-icon \\nclass=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-web\\\"></md-icon><md-select ng-model=\\\"vm.filterSites\\\" flex><md-option \\nng-value=\\\"null\\\" translate=\\\"PRODUCT.ALL_SITES\\\">All Sites</md-option><md-option \\nng-repeat=\\\"site in vm.sitesList | orderBy: \\'name\\'\\\" ng-value=\\\"site.id\\\">{{site.name}}</md-option></md-select></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mt-20\\\"><md-checkbox ng-model=\\\"vm.discountActive\\\"><span \\ntranslate=\\\"PRODUCT.DISCOUNT_ACTIVE\\\"></span></md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"mt-20\\\"><md-checkbox ng-model=\\\"vm.isNoos\\\"><span translate=\\\"PRODUCT.IS_NOOS\\\"></span></md-checkbox></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mt-20\\\"><md-checkbox ng-model=\\\"vm.duplicatedProducts\\\"><span \\ntranslate=\\\"PRODUCT.DUPLICATED\\\"></span></md-checkbox></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/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/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/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/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/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/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/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/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/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/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-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-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-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/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/purchase/dialogs/bind-invoice-to-order/bind-invoice-to-order.html\",\"<md-dialog id=\\\"add-delivery-note-dialog\\\" class=\\\"\\\"><md-dialog-content><h2 translate=\\\"PURCHASE.LINK_WITH_INVOICE\\\"></h2>\\n<div layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><md-icon ng-if=\\\"vm.order.invoices.length > 0\\\" class=\\\"mr-8 s16\\\" \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"invoice-search-input\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" \\nng-if=\\\"vm.hasInvoices\\\" class=\\\"nd-input\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" flex></div><table class=\\\"dataTable\\\" datatable=\\\"\\\" ng-if=\\\"vm.hasInvoices\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table><div \\nclass=\\\"mb-10\\\" ng-if=\\\"!vm.hasInvoices\\\">{{\\'PURCHASE.NO_INVOICES_TO_LINK\\' | translate}}</div></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\"></md-button><md-button class=\\\"md-primary stroked\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.invoices.create\\')}}\\\" \\nng-click=\\\"vm.linkOrCreateInvoice()\\\" ng-disabled=\\\"vm.invoice != \\'\\'\\\" translate=\\\"PURCHASE.NEW_INVOICE\\\"></md-button>\\n<md-button class=\\\"md-primary md-raised\\\" ng-if=\\\"vm.hasInvoices\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.invoices.update\\')}}\\\" \\nng-click=\\\"vm.linkOrCreateInvoice(vm.invoice)\\\" ng-disabled=\\\"vm.invoice == \\'\\'\\\" translate=\\\"PURCHASE.LINK_WITH_INVOICE\\\">\\n</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/change-provider/change-provider.html\",\"<md-dialog id=\\\"add-delivery-note-dialog\\\" class=\\\"\\\"><md-dialog-content class=\\\"pt-24\\\"><h2 translate=\\\"MODAL.TITLE\\\" \\nclass=\\\"no-margin\\\"></h2><p translate=\\\"MODAL.SUBHEADER\\\"></p><div class=\\\"did-you-know yellow mt-16\\\" layout=\\\"row\\\"><md-icon \\nmd-font-icon=\\\"icon-alert\\\" class=\\\"yellow-fg\\\"></md-icon><div><div flex class=\\\"mb-8 did-you-know-message\\\"><span \\ntranslate=\\\"MODAL.DESCRIPTION\\\"></span></div><ul class=\\\"no-margin\\\"><li translate=\\\"MODAL.OPTION_1_DESCRIPTION\\\"></li><li \\ntranslate=\\\"MODAL.OPTION_2_DESCRIPTION\\\"></li></ul></div></div></md-dialog-content><md-dialog-actions class=\\\"mt-8\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" flex><span translate=\\\"MODAL.FOOTER_DESCRIPTION\\\"></span><md-button \\nng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button><md-button class=\\\"md-primary stroked\\\" \\nng-click=\\\"vm.save(false)\\\" translate=\\\"MODAL.OPTION_1\\\"></md-button><md-button class=\\\"md-primary stroked md-raised\\\" \\nng-click=\\\"vm.save(true)\\\" translate=\\\"MODAL.OPTION_2\\\"></md-button></div></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/delivery/delivery.html\",\"<md-dialog id=\\\"add-delivery-note-dialog\\\" class=\\\"\\\"><md-dialog-content class=\\\"pt-24\\\"><h2 \\ntranslate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_TITLE\\\" class=\\\"no-margin\\\"></h2><div class=\\\"did-you-know yellow mt-16\\\" \\nlayout=\\\"row\\\"><md-icon md-font-icon=\\\"icon-alert\\\" class=\\\"yellow-fg\\\"></md-icon><div flex \\nclass=\\\"pt-10 mb-8 did-you-know-message\\\"><span translate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_BODY_WARNING\\\"></span></div>\\n</div></md-dialog-content><md-dialog-actions class=\\\"mt-8 mb-8\\\"><div layout=\\\"row\\\" class=\\\"pl-10 pr-10\\\" \\nlayout-align=\\\"space-between center\\\" flex><span translate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_FOOTER_DESCRIPTION\\\"></span>\\n<div><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"md-primary stroked\\\" translate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_CANCEL\\\">\\n</md-button><md-button class=\\\"md-primary stroked md-raised\\\" ng-click=\\\"vm.save()\\\" \\ntranslate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_OK\\\"></md-button></div></div></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/import/import.html\",\"<md-dialog aria-label=\\\"Import Purchase\\\" class=\\\"w-300\\\" id=\\\"import-purchase-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"IMPORT.IMPORT_PRODUCTS\\\"></h2><p class=\\\"mr-0 mb-30\\\" ng-show=\\\"vm.purchase_order_products.length == 0\\\"><span \\ntranslate=\\\"IMPORT.FILL_TEMPLATE\\\"></span> <a class=\\\"ml-5 mr-5\\\" href=\\\"/assets/files/purchase_order_import.9d458711.xlsx\\\" \\ntarget=\\\"_blank\\\">purchase_order_import.xlsx</a> <span translate=\\\"IMPORT.IMPORT_IT\\\"></span></p><div \\nid=\\\"purchase-order-products-uploader\\\" ng-show=\\\"vm.purchase_order_products.length == 0\\\" flow-init=\\\"vm.ngFlowOptions\\\" \\nflow-name=\\\"vm.ngFlow.flow\\\" flow-file-success=\\\"vm.uploadFileSuccess($file, $message)\\\" \\nflow-file-added=\\\"vm.fileAdded($file)\\\"><div class=\\\"mb-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nng-if=\\\"product.cover\\\" class=\\\"md-primary md-raised no-margin\\\" flow-btn><span translate=\\\"IMPORT.FILE\\\">Change File</span>\\n</md-button><md-button ng-if=\\\"!product.cover\\\" class=\\\"md-raised no-margin\\\" flow-btn><span translate=\\\"IMPORT.FILE\\\">\\nSet File</span></md-button><span ng-if=\\\"vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\">{{vm.filename}}</span> <span \\nng-if=\\\"!vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\" translate=\\\"IMPORT.FILE_FORMAT\\\">Only XLS and XLSX</span></div></div>\\n<div ng-if=\\\"vm.loading\\\" class=\\\"md-padding\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nmd-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular></div><p ng-if=\\\"vm.purchase_order_products.length > 0\\\">\\n{{vm.purchase_order_products.length}} <span translate=\\\"IMPORT.IMPORTED\\\"></span></p><div layout=\\\"row\\\"><md-button \\nng-disabled=\\\"vm.loading\\\" ng-if=\\\"vm.purchase_order_products.length == 0 || !vm.fileLoaded\\\" \\nng-click=\\\"vm.uploadFile(true)\\\" class=\\\"md-raised md-primary m-0\\\" translate=\\\"IMPORT.IMPORT\\\" flex></md-button><md-button \\nng-disabled=\\\"vm.loading\\\" ng-if=\\\"vm.purchase_order_products.length > 0\\\" ng-click=\\\"vm.hide()\\\" \\nclass=\\\"md-raised md-primary m-0\\\" translate=\\\"GENERAL.CLOSE\\\" flex></md-button></div></form></md-dialog-content>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/import-purchase-order-delivery-products/import-purchase-order-delivery-products-dialog.html\",\"<md-dialog aria-label=\\\"Import Purchase\\\" class=\\\"w-300\\\" id=\\\"import-purchase-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"IMPORT.IMPORT_PRODUCTS\\\"></h2><p class=\\\"mr-0 mb-30 center\\\" ng-show=\\\"vm.purchase_order_products.length == 0\\\">\\n<span translate=\\\"IMPORT.FILL_TEMPLATE\\\"></span> <a class=\\\"ml-5 mr-5\\\" ng-if=\\\"vm.isUid\\\" \\nhref=\\\"/assets/files/purchase_order_delivery_import.b1728635.xlsx\\\" target=\\\"_blank\\\">import.xlsx</a> <a class=\\\"ml-5 mr-5\\\" \\nng-if=\\\"!vm.isUid\\\" \\nhref=\\\"https://docs.google.com/spreadsheets/d/14AVMeYmSraO08xKXurXnobhJcKLWHE5NyvvGUi1zlaU/edit?usp=sharing\\\" \\ntarget=\\\"_blank\\\">import.xlsx</a> <span translate=\\\"IMPORT.IMPORT_IT\\\"></span></p><div \\nid=\\\"purchase-order-products-uploader\\\" ng-show=\\\"vm.purchase_order_products.length == 0\\\" flow-init=\\\"vm.ngFlowOptions\\\" \\nflow-name=\\\"vm.ngFlow.flow\\\" flow-file-success=\\\"vm.uploadFileSuccess($file, $message)\\\" \\nflow-file-added=\\\"vm.fileAdded($file)\\\"><div class=\\\"mb-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nng-if=\\\"product.cover\\\" class=\\\"md-accent md-raised md-secondary md-grey-400-bg no-margin\\\" flow-btn><span \\ntranslate=\\\"IMPORT.FILE\\\">Change File</span></md-button><md-button ng-if=\\\"!product.cover\\\" \\nclass=\\\"md-raised md-secondary md-grey-400-bg no-margin\\\" flow-btn><span translate=\\\"IMPORT.FILE\\\">Set File</span>\\n</md-button><span ng-if=\\\"vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\">{{vm.filename}}</span> <span \\nng-if=\\\"!vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\" translate=\\\"IMPORT.FILE_FORMAT\\\">Only XLS and XLSX</span></div></div>\\n<div ng-if=\\\"vm.loading\\\" class=\\\"md-padding\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nmd-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular></div><p ng-if=\\\"vm.purchase_order_products.length > 0\\\">\\n{{vm.purchase_order_products.length}} <span translate=\\\"IMPORT.IMPORTED\\\"></span></p><div><div style=\\\"float:right\\\">\\n<md-button ng-disabled=\\\"vm.loading\\\" ng-if=\\\"vm.purchase_order_products.length == 0 || !vm.fileLoaded\\\" \\nng-click=\\\"vm.uploadFile(true)\\\" class=\\\"md-raised md-primary m-0 md-button\\\" translate=\\\"IMPORT.IMPORT\\\"></md-button>\\n<md-button ng-disabled=\\\"vm.loading\\\" ng-if=\\\"vm.purchase_order_products.length > 0\\\" ng-click=\\\"vm.hide()\\\" \\nclass=\\\"md-raised md-accent m-0\\\" translate=\\\"GENERAL.CLOSE\\\"></md-button></div></div></form></md-dialog-content>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/import-sale-orders/import-sale-orders.html\",\"<md-dialog id=\\\"import-sale-orders-dialog\\\"><md-toolbar class=\\\"white-bg\\\"><div class=\\\"md-toolbar-tools\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><h2 translate=\\\"PURCHASE.IMPORT_SALE_ORDERS\\\" class=\\\"mt-0 black-fg\\\"></h2><span flex></span>\\n<md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon>\\n<input id=\\\"sale-order-search-input\\\" ng-model=\\\"vm.search\\\" type=\\\"search\\\" placeholder=\\\"Search\\\" class=\\\"secondary-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div>\\n</md-toolbar><md-dialog-content class=\\\"p-0\\\"><table class=\\\"dataTable row-border hover\\\" datatable=\\\"\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"orders-table\\\"></table>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\" class=\\\"border-top\\\"><md-button \\nclass=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\">{{\\'GENERAL.CANCEL\\' | translate }}</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.accept()\\\">{{\\'IMPORT.IMPORT\\' | translate }}</md-button></md-dialog-actions>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/link-with-invoice/link-with-invoice.html\",\"<md-dialog id=\\\"add-delivery-note-dialog\\\" class=\\\"\\\"><md-dialog-content><h2 translate=\\\"PURCHASE.LINK_WITH_INVOICE\\\" add \\ndelivery note></h2><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><md-icon \\nng-if=\\\"vm.purchaseOrder.invoices.length > 0\\\" class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nid=\\\"invoice-search-input\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" ng-if=\\\"vm.purchaseOrder.invoices.length > 0\\\" \\nclass=\\\"nd-input\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" flex></div>\\n<table class=\\\"dataTable\\\" datatable=\\\"\\\" ng-if=\\\"vm.purchaseOrder.invoices.length > 0\\\" dt-instance=\\\"vm.dtInstance\\\" \\ndt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table><div class=\\\"mb-10\\\" \\nng-if=\\\"vm.purchaseOrder.invoices.length == 0\\\">{{\\'PURCHASE.NO_INVOICES_TO_LINK\\' | translate}}</div></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\"></md-button><md-button class=\\\"md-primary stroked\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.invoices.create\\')}}\\\" \\nng-click=\\\"vm.linkOrCreateInvoice()\\\" ng-disabled=\\\"vm.invoice != \\'\\'\\\" translate=\\\"PURCHASE.NEW_INVOICE\\\"></md-button>\\n<md-button class=\\\"md-primary md-raised\\\" ng-if=\\\"vm.purchaseOrder.invoices.length > 0\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.invoices.update\\')}}\\\" \\nng-click=\\\"vm.linkOrCreateInvoice(vm.invoice)\\\" ng-disabled=\\\"vm.invoice == \\'\\'\\\" translate=\\\"PURCHASE.LINK_WITH_INVOICE\\\">\\n</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/print/print.html\",\"<md-dialog aria-label=\\\"Print Purchase Order\\\" class=\\\"w-400\\\" id=\\\"purchase-print-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"GENERAL.PRINT_SEND\\\"></h2><div class=\\\"md-padding\\\" layout=\\\"column\\\"><md-input-container class=\\\"md-block\\\"><label\\n translate=\\\"PURCHASE.DESIGN\\\"></label><md-select ng-model=\\\"vm.printType\\\" ng-change=\\\"vm.changePrintType()\\\"><md-option \\nvalue=\\\"products\\\" translate=\\\"PURCHASE.PRODUCT_PER_ROW\\\"></md-option><md-option value=\\\"variants\\\" \\ntranslate=\\\"PURCHASE.PRODUCT_VARIANT_PER_ROW\\\"></md-option></md-select></md-input-container><md-checkbox \\nng-model=\\\"vm.showBrand\\\"><span translate=\\\"PRODUCT.BRAND\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.showHsCode\\\">\\n<span translate=\\\"PRODUCT.HARMONISED_CODE\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.showComposition\\\"><span \\ntranslate=\\\"PRODUCT.COMPOSITION\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.showAttributes\\\"><span \\ntranslate=\\\"PRODUCT.ATTRIBUTES\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.printPrices\\\" \\nng-disabled=\\\"vm.printSalePrices\\\"><span translate=\\\"PURCHASE.PRINT_PRICES_EXCL_TAX\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.printSalePrices\\\" ng-change=\\\"vm.printSalePricesChanged()\\\"><span translate=\\\"PURCHASE.PRINT_SALE_PRICES\\\">\\n</span></md-checkbox><md-select ng-if=\\\"vm.printSalePrices\\\" ng-model=\\\"vm.pricingTier\\\"><md-option \\nng-value=\\\"pricingTier.id\\\" ng-repeat=\\\"pricingTier in vm.pricingTiers | orderBy: \\'position\\'\\\">{{pricingTier.name}}\\n</md-option></md-select><md-checkbox ng-model=\\\"vm.printOriginCodes\\\"><span translate=\\\"PURCHASE.PRINT_ORIGIN_CODES\\\">\\n</span></md-checkbox><md-checkbox ng-model=\\\"vm.printImages\\\"><span translate=\\\"PURCHASE.PRINT_IMAGES\\\"></span>\\n</md-checkbox><md-checkbox ng-model=\\\"vm.sendEmail\\\"><span translate=\\\"PURCHASE.SEND_BY_EMAIL\\\"></span></md-checkbox>\\n<md-input-container ng-if=\\\"vm.sendEmail\\\" class=\\\"mb-0 md-block\\\"><label translate=\\\"CONTACTS.EMAIL\\\"></label><input \\nng-model=\\\"vm.emailTo\\\" type=\\\"email\\\" required></md-input-container></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\">\\n<md-button class=\\\"stroked\\\" ng-click=\\\"vm.hide()\\\" class=\\\"md-raised\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button><md-button \\nng-click=\\\"vm.print()\\\" class=\\\"md-raised md-primary\\\" ng-disabled=\\\"importForm.$invalid\\\">\\n{{(vm.sendEmail ? \\'GENERAL.SEND\\' : \\'GENERAL.PRINT\\') | translate }}</md-button></div></form></md-dialog-content>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/print-catalog/print-catalog.html\",\"<md-dialog aria-label=\\\"Print Catalog\\\" class=\\\"w-300\\\" id=\\\"purchase-print-catalog-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"PURCHASE.PRINT_CATALOG\\\"></h2><div class=\\\"md-padding\\\" layout=\\\"row\\\" layout-wrap><div><label \\ntranslate=\\\"PURCHASE.PRODUCTS_PER_PAGE\\\">Products per page</label><md-select ng-model=\\\"vm.data.productsPerPage\\\" \\nclass=\\\"mt-0 mb-10\\\"><md-option ng-repeat=\\\"number in vm.productsPerPageOptions\\\" ng-value=\\\"number\\\">{{number}}</md-option>\\n</md-select></div><md-checkbox ng-model=\\\"vm.data.showOriginCode\\\"><span translate=\\\"PURCHASE.SHOW_ORIGIN_CODE\\\"></span>\\n</md-checkbox><md-checkbox ng-model=\\\"vm.data.showProductDescription\\\"><span \\ntranslate=\\\"PURCHASE.SHOW_PRODUCT_DESCRIPTION\\\"></span></md-checkbox><md-checkbox ng-if=\\\"!vm.isSaleOrder\\\" \\nng-model=\\\"vm.data.showPrice\\\"><span translate=\\\"PURCHASE.SHOW_FOB_PRICE\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.data.showTotals\\\"><span translate=\\\"PURCHASE.SHOW_TOTALS\\\"></span></md-checkbox></div><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button>\\n<md-button ng-click=\\\"vm.print()\\\" class=\\\"md-primary\\\" translate=\\\"GENERAL.PRINT\\\"></md-button></div></form>\\n</md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/show-ddp-prices/show-ddp-prices-dialog.html\",\"<md-dialog id=\\\"show-ddp-prices-dialog\\\" aria-label=\\\"Show Ddp Prices\\\"><md-dialog-content><div layout=\\\"column\\\"><h2 \\ntranslate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_TITLE\\\"></h2><p \\ntranslate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_DESCRIPTION\\\"></p><div class=\\\"did-you-know yellow\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\\\"></md-icon></div><div layout=\\\"column\\\" flex>\\n<span class=\\\"secondary-text ml-5\\\" translate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_WARNING\\\"></span></div>\\n</div></div></div><div class=\\\"datatable-div\\\"><table datatable ng-if=\\\"vm.datatableReady\\\" class=\\\"row-border hover\\\" \\nid=\\\"ddp-price\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\"></table></div>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\" ng-hide=\\\"vm.showConfirmAction || vm.showCancelAction\\\"><p \\ntranslate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_FOOTER\\\"></p><md-button ng-click=\\\"vm.showCancelAction = true\\\" \\ntranslate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_CANCEL_BUTTON_TEXT\\\" class=\\\"stroked\\\">Cancel</md-button>\\n<md-button id=\\\"test-applyreg-button\\\" class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.showConfirmAction = true\\\" \\ntranslate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_CONFIRM_BUTTON_TEXT\\\">Save</md-button></md-dialog-actions>\\n<md-dialog-actions layout=\\\"row\\\" ng-show=\\\"vm.showCancelAction\\\"><span>{{\\'PURCHASE.CALCULATE_CANCEL_MSG\\' | translate}}\\n</span><md-button ng-click=\\\"vm.showCancelAction = false\\\" translate=\\\"PURCHASE.CANCEL\\\" class=\\\"stroked\\\">Cancel</md-button>\\n<md-button id=\\\"test-applyreg-button\\\" class=\\\"md-primary stroked\\\" ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_CANCEL_CONFIRM_BUTTON_TEXT\\\">Confirm Cancel</md-button>\\n</md-dialog-actions><md-dialog-actions layout=\\\"row\\\" ng-show=\\\"vm.showConfirmAction\\\"><span>\\n{{\\'PURCHASE.CALCULATE_CONFIRM_MSG\\' | translate}}</span><md-button ng-click=\\\"vm.showConfirmAction = false\\\" \\ntranslate=\\\"PURCHASE.CANCEL\\\" ng-disabled=\\\"vm.saving\\\" class=\\\"stroked\\\">Cancel</md-button><md-button \\nid=\\\"test-applyreg-button\\\" class=\\\"md-primary md-raised\\\" ng-disabled=\\\"vm.saving\\\" ng-click=\\\"vm.save()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saving\\\" md-diameter=\\\"20px\\\" class=\\\"mr-8\\\">\\n</md-progress-circular><span translate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_CONFIRM_CALCULATE_BUTTON_TEXT\\\">\\n</span></div></md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/directives/nd-order-payments/nd-order-payments.html\",\"<div id=\\\"nd-order-payments\\\"><md-card class=\\\"mb-20\\\"><md-card-title><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><span class=\\\"h3\\\" translate=\\\"PURCHASE.PAYMENTS\\\"></span><md-button \\nclass=\\\"md-raised md-primary m-0\\\" ng-click=\\\"vm.addPayment()\\\" ng-if=\\\"!vm.globalEditMode\\\" ng-disabled=\\\"vm.newPayment\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.create\\')}}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon><span \\ntranslate=\\\"INVOICE.ADD_PAYMENT\\\"></span></div></md-button><md-button class=\\\"md-warn stroked m-0\\\" \\nng-click=\\\"vm.cancelPayment()\\\" ng-if=\\\"vm.globalEditMode\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.create\\')}}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span>{{vm.getCancelEditModeText()}}</span></div></md-button></md-card-title-text>\\n</md-card-title><md-card-content class=\\\"full-height\\\"><table class=\\\"simple payment-table\\\" ms-responsive-table><thead>\\n<tr><th translate=\\\"ORDER.PAYMENT_METHOD\\\" class=\\\"text-bold\\\" style=\\\"text-align: left\\\"></th><th translate=\\\"ORDER.AMOUNT\\\" \\nclass=\\\"text-bold\\\"></th><th translate=\\\"ORDER.PAYMENT_DATE\\\" class=\\\"text-bold\\\"></th><th translate=\\\"SALE.ASSIGNED_INVOICE\\\" \\nclass=\\\"text-bold\\\"></th><th translate=\\\"ORDER.PAYMENT_STATUS\\\" class=\\\"text-bold\\\"></th><th></th></tr></thead><tbody><tr \\nng-repeat=\\\"payment in vm.order.payments | orderBy: \\'id\\'\\\"><td width=\\\"25%\\\" style=\\\"text-align: left\\\"><span \\nng-if=\\\"!payment.editing\\\"><md-icon class=\\\"mb-5 mr-10\\\" md-font-icon=\\\"{{payment.payment_method_instance.icon}}\\\"></md-icon>\\n{{payment.payment_method_instance.name}}</span><md-select ng-if=\\\"payment.editing\\\" class=\\\"nd-input\\\" \\nng-model=\\\"payment.payment_method\\\" placeholder=\\\"{{ \\'INVOICE.PAYMENT_METHOD\\' | translate}}\\\"><md-option \\nng-repeat=\\\"paymentMethod in vm.paymentMethods\\\" ng-value=\\\"paymentMethod.id\\\"><md-icon class=\\\"mb-5 mr-10\\\" \\nmd-font-icon=\\\"{{paymentMethod.icon}}\\\"></md-icon>{{paymentMethod.name}}</md-option></md-select></td><td width=\\\"16%\\\">\\n<span ng-if=\\\"!payment.editing\\\">{{payment.amount | price}} {{vm.currency | currencyCharacter}}</span><div flex \\nng-if=\\\"payment.editing\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"nd-input container-icon-input\\\" \\nng-class=\\\"{\\'nd-input-invalid\\' : vm.checkValidAmount(payment.amount) }\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/wand-magic-sparkles.6ddf699d.svg\\\" class=\\\"secondary-text ml-10 mr-10\\\" \\nmd-ripple ng-if=\\\"vm.showPendingAmountButton\\\" ng-click=\\\"vm.setOrderPendingAmount(payment)\\\"><md-tooltip \\nmd-direction=\\\"bottom\\\">{{vm.getTooltip()}}</md-tooltip></md-icon><input ng-if=\\\"payment.editing\\\" \\nclass=\\\"text-right input-icon nd-input\\\" step=\\\"0.01\\\" min=\\\"0.00\\\" placeholder=\\\"{{\\'ORDER.AMOUNT\\' | translate}}\\\" \\nng-model=\\\"payment.amount\\\" type=\\\"number\\\"> {{vm.currency | currencyCharacter}}</div></td><td width=\\\"16%\\\"><span \\nng-if=\\\"!payment.editing\\\">{{payment.date | date: \\\"dd-MM-yyyy\\\"}}</span><div class=\\\"nd-input datepicker-div\\\" \\nng-if=\\\"payment.editing\\\"><md-datepicker md-placeholder=\\\"{{ \\'ORDER.PAYMENT_DATE\\' | translate}}\\\" md-hide-icons=\\\"calendar\\\" \\nflex ng-model=\\\"payment.date\\\" md-open-on-focus></md-datepicker></div></td><td width=\\\"25%\\\"><span \\nng-if=\\\"!payment.editing\\\"><span>{{payment.invoice_autocode}} </span><span \\nng-if=\\\"payment.invoice_instance.expiration_date\\\">\\n· {{ \\'INVOICE.EXPIRATION\\' | translate}}: {{payment.invoice_instance.expiration_date | date: \\\"dd-MM-yyyy\\\"}}</span>\\n</span><div layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"payment.editing\\\"><div flex><md-select flex \\nclass=\\\"nd-input\\\" ng-model=\\\"payment.invoice\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose()\\\" \\nplaceholder=\\\"{{ \\'ORDER.ASSIGN_INVOICE\\' | translate}}\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.searchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option \\nng-repeat=\\\"invoice in vm.order.invoices | filter:{\\'autocode\\':vm.searchText} | orderBy: \\'autocode\\'\\\" \\nng-value=\\\"invoice.id\\\"><div layout=\\\"row\\\">{{invoice.autocode}} <span ng-if=\\\"invoice.expiration_date\\\">\\n&nbsp;· {{\\'INVOICE.EXPIRATION_SHORT\\' | translate}}: {{invoice.expiration_date | date: \\\"dd-MM-yyyy\\\"}}</span></div>\\n</md-option></md-select></div><md-button class=\\\"md-icon-button m-0\\\"><md-icon \\nng-if=\\\"payment.editing && payment.invoice\\\" md-font-icon=\\\"icon-close\\\" class=\\\"cursor-pointer\\\" \\nng-click=\\\"vm.clearFilter(payment)\\\"></md-icon></md-button></div></td><td width=\\\"16%\\\"><span ng-if=\\\"!payment.editing\\\" \\nclass=\\\"m-0\\\" ng-class=\\\"vm.PURCHASE_ORDER_PAYMENT_STATUSES_COLORS[payment.status]\\\">\\n{{\\'PURCHASE.\\' + vm.PURCHASE_ORDER_PAYMENT_STATUSES[payment.status] | translate}}</span><md-select \\nng-if=\\\"payment.editing\\\" ng-model=\\\"payment.status\\\" class=\\\"nd-input\\\" flex \\nplaceholder=\\\"{{ \\'ORDER.PAYMENT_STATUS\\' | translate}}\\\"><md-option ng-repeat=\\\"pops in vm.purchaseOrderPaymentStatuses\\\" \\nng-value=\\\"pops\\\"><span class=\\\"m-0 {{vm.PURCHASE_ORDER_PAYMENT_STATUSES_COLORS[pops]}}\\\">\\n{{\\'PURCHASE.\\' + vm.PURCHASE_ORDER_PAYMENT_STATUSES[pops] | translate}}</span></md-option></md-select></td><td><md-menu \\nng-if=\\\"!payment.editing\\\" md-position-mode=\\\"target-right target\\\"><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"$mdOpenMenu($event)\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.update\\') ||\\n                         Session.hasPermission(\\'app.inventory.purchases.purchase.payments.delete\\')}}\\\">\\n<md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button><md-menu-content><md-menu-item><md-button \\nng-click=\\\"vm.editPayment(payment)\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.update\\')}}\\\"><md-icon \\nmd-font-icon=\\\"icon-pencil\\\"></md-icon><span>{{\\'PURCHASE.EDIT_PAYMENT\\' | translate}}</span></md-button></md-menu-item>\\n<md-divider></md-divider><md-menu-item><md-button class=\\\"md-warn\\\" ng-click=\\\"vm.deletePayment(payment)\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.delete\\')}}\\\"><md-icon \\nmd-font-icon=\\\"icon-trash\\\"></md-icon><span>{{\\'PURCHASE.DELETE_PAYMENT\\' | translate}}</span></md-button></md-menu-item>\\n</md-menu-content></md-menu><md-button ng-if=\\\"payment.editing\\\" class=\\\"m-0 md-primary stroked\\\" \\nng-click=\\\"vm.savePayment(payment)\\\" ng-disabled=\\\"vm.checkFormPayment(payment)==null || vm.saving\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saving\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\">\\n</md-progress-circular><span translate=\\\"GENERAL.SAVE\\\"></span></div></md-button></td></tr></tbody></table><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><div class=\\\"mt-30 mb-15 secondary-text\\\" ng-if=\\\"vm.order.payments.length==0\\\" \\ntranslate=\\\"PURCHASES.PAYMENTS_TABLE_EMPTY\\\"></div></div></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/directives/nd-purchase-order-payments/nd-purchase-order-payments.html\",\"<div id=\\\"nd-purchase-order-payments\\\"><md-card class=\\\"mb-20\\\"><md-card-title><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><span class=\\\"h3\\\" translate=\\\"PURCHASE.PAYMENTS\\\"></span><md-button \\nclass=\\\"md-raised md-primary m-0\\\" ng-click=\\\"vm.addPayment()\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.create\\')}}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon><span \\ntranslate=\\\"INVOICE.ADD_PAYMENT\\\"></span></div></md-button></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"full-height\\\"><table class=\\\"simple\\\" ms-responsive-table><thead><tr><th translate=\\\"ORDER.PAYMENT_METHOD\\\">\\nPayment Method</th><th translate=\\\"ORDER.AMOUNT\\\">Amount</th><th translate=\\\"ORDER.DATE\\\">Date</th><th \\ntranslate=\\\"SALE.ASSIGNED_INVOICE\\\">Invoice</th><th translate=\\\"ORDER.PAYMENT_STATUS\\\">Actions</th><th class=\\\"text-right\\\">\\n</th></tr></thead><tbody><tr ng-repeat=\\\"payment in vm.order.payments | orderBy: \\'id\\'\\\"><td><span \\nng-if=\\\"!payment.editing\\\"><md-icon class=\\\"mb-5 mr-10\\\" md-font-icon=\\\"{{payment.payment_method_instance.icon}}\\\"></md-icon>\\n{{payment.payment_method_instance.name}}</span><md-select ng-if=\\\"payment.editing\\\" class=\\\"nd-input\\\" \\nng-model=\\\"payment.payment_method\\\" placeholder=\\\"{{ \\'INVOICE.PAYMENT_METHOD\\' | translate}}\\\"><md-option \\nng-repeat=\\\"paymentMethod in vm.paymentMethods\\\" ng-value=\\\"paymentMethod.id\\\"><md-icon class=\\\"mb-5 mr-10\\\" \\nmd-font-icon=\\\"{{paymentMethod.icon}}\\\"></md-icon>{{paymentMethod.name}}</md-option></md-select></td><td><span \\nng-if=\\\"!payment.editing\\\">{{payment.amount | price}} {{vm.session.company.currency | currencyCharacter}}</span><div \\nclass=\\\"nd-input container-icon-input\\\" ng-if=\\\"payment.editing\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/wand-magic-sparkles.6ddf699d.svg\\\" class=\\\"secondary-text\\\" md-ripple \\nng-click=\\\"vm.setOrderPendingAmount(payment)\\\"><md-tooltip md-direction=\\\"bottom\\\">{{vm.getTooltip()}}</md-tooltip>\\n</md-icon><input ng-if=\\\"payment.editing\\\" class=\\\"input-icon\\\" step=\\\"1\\\" min=\\\"0.00\\\" \\nplaceholder=\\\"{{ \\'ORDER.AMOUNT\\' | translate}}\\\" ng-model=\\\"payment.amount\\\" type=\\\"number\\\"></div></td><td><span \\nng-if=\\\"!payment.editing\\\">{{payment.date | date}}</span><md-datepicker ng-if=\\\"payment.editing\\\" \\nmd-placeholder=\\\"{{ \\'ORDER.PAYMENT_DATE\\' | translate}}\\\" md-hide-icons=\\\"calendar\\\" flex ng-model=\\\"payment.date\\\" \\nmd-open-on-focus></md-datepicker></td><td><span ng-if=\\\"!payment.editing\\\"><span>{{payment.invoice_autocode}} </span>\\n<span ng-if=\\\"vm.order.invoice.expiration_date\\\">\\n· {{ \\'INVOICE.EXPIRATION\\' | translate}}: {{payment.invoice_expiration_date}}</span></span><md-autocomplete flex=\\\"100\\\" \\nng-if=\\\"payment.editing\\\" ng-class=\\\"{\\'nd-input-autocomplete\\': ndInput}\\\" data-test-id=\\\"newpayment-autocomplete-invoices\\\" \\nclass=\\\"invoices-autocomplete nd-input\\\" md-items=\\\"item in vm.querySearch()\\\" md-selected-item=\\\"payment.invoice\\\" \\nmd-search-text=\\\"vm.searchText\\\" md-selected-item-change=\\\"vm.selectItem(item)\\\" md-item-text=\\\"vm.displayFunction(item)\\\" \\nmd-min-length=\\\"2\\\" md-delay=\\\"300\\\" placeholder=\\\"{{ \\'ORDER.ASSIGN_INVOICE\\' | translate}}\\\" md-no-cache=\\\"true\\\" \\nng-disabled=\\\"ngDisabled\\\"><md-item-template><div layout=\\\"row\\\"><span ng-if=\\\"item.autocode\\\" \\nmd-highlight-text=\\\"searchText\\\" md-highlight-flags=\\\"^i\\\">{{item.autocode}}</span> <span \\nng-if=\\\"item.autocode && item.expiration_date\\\">&nbsp;· {{\\'INVOICE.EXPIRATION\\' | translate}}: {{item.expiration_date}}\\n</span></div></md-item-template><md-not-found>{{\\'GENERAL.INVOICE_NOT_FOUND\\' | translate}}</md-not-found>\\n</md-autocomplete></td><td><span ng-if=\\\"!payment.editing\\\" \\nng-class=\\\"vm.PURCHASE_ORDER_PAYMENT_STATUSES_COLORS[payment.status]\\\">\\n{{\\'PURCHASE.\\' + vm.PURCHASE_ORDER_PAYMENT_STATUSES[payment.status] | translate}}</span><md-select \\nng-if=\\\"payment.editing\\\" ng-model=\\\"payment.status\\\" class=\\\"nd-input\\\" flex \\nplaceholder=\\\"{{ \\'ORDER.PAYMENT_STATUS\\' | translate}}\\\"><md-option ng-repeat=\\\"pops in vm.purchaseOrderPaymentStatuses\\\" \\nng-value=\\\"pops\\\"><span class=\\\"m-0 {{vm.PURCHASE_ORDER_PAYMENT_STATUSES_COLORS[pops]}}\\\">\\n{{\\'PURCHASE.\\' + vm.PURCHASE_ORDER_PAYMENT_STATUSES[pops] | translate}}</span></md-option></md-select></td><td \\nclass=\\\"text-right\\\"><md-menu ng-if=\\\"!payment.editing\\\" md-position-mode=\\\"target-right target\\\"><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"$mdOpenMenu($event)\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.update\\') ||\\n                         Session.hasPermission(\\'app.inventory.purchases.purchase.payments.delete\\')}}\\\">\\n<md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button><md-menu-content><md-menu-item><md-button \\nng-click=\\\"vm.editPayment(payment)\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.update\\')}}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span>{{\\'PURCHASE.EDIT_PAYMENT\\' | translate}}</span></div></md-button></md-menu-item>\\n<md-divider></md-divider><md-menu-item><md-button class=\\\"md-warn\\\" ng-click=\\\"vm.deletePayment(payment)\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.delete\\')}}\\\"><md-icon \\nmd-font-icon=\\\"icon-trash\\\"></md-icon><span>{{\\'PURCHASE.DELETE_PAYMENT\\' | translate}}</span></md-button></md-menu-item>\\n</md-menu-content></md-menu><md-button ng-if=\\\"payment.editing\\\" class=\\\"m-0 md-primary stroked\\\" \\nng-click=\\\"vm.savePayment(payment)\\\" ng-disabled=\\\"vm.checkFormPayment(payment)==null || vm.saving\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saving\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\">\\n</md-progress-circular><span translate=\\\"GENERAL.SAVE\\\"></span></div></md-button></td></tr></tbody></table><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><div class=\\\"mt-30 mb-15 secondary-text\\\" ng-if=\\\"vm.order.payments.length==0\\\" \\ntranslate=\\\"PURCHASES.PAYMENTS_TABLE_EMPTY\\\"></div></div></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktaking/dialogs/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-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-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-uid/nd-stocktaking-order-product-uid.html\",\"<div id=\\\"stocktaking-order-product-uid\\\" class=\\\"flex\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"product-header border-top\\\"><img ng-if=\\\"::orderProduct.product_cover_thumbnail\\\" \\nsrc=\\\"{{::orderProduct.product_cover_thumbnail}}\\\"> <a class=\\\"mr-10\\\" tabindex=\\\"-1\\\" \\nhref=\\\"/inventory/products/{{::orderProduct.product.id}}/overview\\\">{{::orderProduct.product_code}}</a><span \\nclass=\\\"mr-10\\\">{{::orderProduct.product_name}}</span><span class=\\\"mr-10 secondary-text\\\"><small>\\n{{::orderProduct.brand_name}} · {{::orderProduct.category_name}} · {{::orderProduct.subcategory_name}}</small> </span>\\n<span flex></span> <span has-permission=\\\"inventory.stocktakings.stocktaking.products.show_previous_amount\\\">\\n{{::orderProduct.previous_amount}}</span><md-icon class=\\\"mh-5 s12\\\" \\nhas-permission=\\\"inventory.stocktakings.stocktaking.products.show_previous_amount\\\" md-font-icon=\\\"icon-arrow-right\\\">\\n</md-icon>{{vm.totalAmount}} <input type=\\\"hidden\\\" autofocus=\\\"true\\\"><md-button ng-if=\\\"isEditable()\\\" \\nclass=\\\"md-icon-button no-margin m-0 cursor-pointer\\\" \\nhas-permission=\\\"inventory.stocktakings.stocktaking.products.update_amount\\\" ng-click=\\\"vm.addLot()\\\"><md-icon \\nmd-font-icon=\\\"icon-plus\\\"><md-tooltip md-direction=\\\"bottom\\\">{{\\'PRODUCT.ADD_LOT\\' | translate}}</md-tooltip></md-icon>\\n</md-button><md-button tabindex=\\\"-1\\\" has-permission=\\\"inventory.stocktakings.stocktaking.products.remove_product\\\" \\nclass=\\\"md-icon-button no-margin m-0 cursor-pointer\\\" ng-click=\\\"vm.deleteOrderProductWrapper(orderProduct)\\\" \\nng-if=\\\"isEditable()\\\"><md-tooltip md-direction=\\\"bottom\\\">{{\\\"STOCKTAKING.DELETE_PRODUCT\\\" | translate}}</md-tooltip>\\n<md-icon md-font-icon=\\\"icon-delete\\\"></md-icon></md-button></div><div class=\\\"grid-container\\\" style=\\\"width: 100%\\\"><div \\nui-grid=\\\"vm.gridOptions\\\" ui-grid-pagination ui-grid-resize-columns ui-grid-save-state ui-grid-auto-resize class=\\\"grid\\\" \\nstyle=\\\"height: {{vm.gridHeight}}px\\\"></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/dialogs/import/import.html\",\"<md-dialog aria-label=\\\"Import Transfer\\\" class=\\\"w-300\\\" id=\\\"import-transfer-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"IMPORT.IMPORT_PRODUCTS\\\"></h2><p class=\\\"mr-0 mb-30\\\" ng-show=\\\"vm.transfer_order_products.length == 0\\\"><span \\ntranslate=\\\"IMPORT.FILL_TEMPLATE\\\"></span> <a class=\\\"ml-5 mr-5\\\" href=\\\"/assets/files/transfer_order_import.c78e53ce.xlsx\\\" \\ntarget=\\\"_blank\\\">transfer_order_import.xlsx</a> <span translate=\\\"IMPORT.IMPORT_IT\\\"></span></p><div \\nid=\\\"transfer-order-products-uploader\\\" ng-show=\\\"vm.transfer_order_products.length == 0\\\" flow-init=\\\"vm.ngFlowOptions\\\" \\nflow-name=\\\"vm.ngFlow.flow\\\" flow-file-success=\\\"vm.uploadFileSuccess($file, $message)\\\" \\nflow-file-added=\\\"vm.fileAdded($file)\\\"><div class=\\\"mb-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nng-if=\\\"product.cover\\\" class=\\\"md-primary md-raised no-margin\\\" flow-btn><span translate=\\\"IMPORT.FILE\\\">Change File</span>\\n</md-button><md-button ng-if=\\\"!product.cover\\\" class=\\\"md-raised no-margin\\\" flow-btn><span translate=\\\"IMPORT.FILE\\\">\\nSet File</span></md-button><span ng-if=\\\"vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\">{{vm.filename}}</span> <span \\nng-if=\\\"!vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\" translate=\\\"IMPORT.FILE_FORMAT\\\">Only XLS and XLSX</span></div></div>\\n<div ng-if=\\\"vm.loading\\\" class=\\\"md-padding\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nmd-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular></div><p ng-if=\\\"vm.transfer_order_products.length > 0\\\">\\n{{vm.transfer_order_products.length}} <span translate=\\\"IMPORT.IMPORTED\\\"></span></p><div layout=\\\"row\\\"><md-button \\nng-disabled=\\\"vm.loading || !vm.fileLoaded\\\" ng-if=\\\"vm.transfer_order_products.length == 0 || !vm.fileLoaded\\\" \\nng-click=\\\"vm.uploadFile(true)\\\" class=\\\"md-raised md-primary m-0\\\" translate=\\\"IMPORT.IMPORT\\\" flex></md-button><md-button \\nng-disabled=\\\"vm.loading \\\" ng-if=\\\"vm.transfer_order_products.length > 0\\\" ng-click=\\\"vm.hide()\\\" \\nclass=\\\"md-raised md-primary m-0\\\" translate=\\\"GENERAL.CLOSE\\\" flex></md-button></div></form></md-dialog-content>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/dialogs/loading-bar/loading-bar.html\",\"<md-dialog><md-dialog-content><div layout=\\\"column\\\" class=\\\"pb-30\\\"><h2 class=\\\"mb-10 mt-0\\\" translate=\\\"{{vm.title}}\\\"></h2>\\n<p translate=\\\"{{vm.body}}\\\"></p><md-progress-linear md-mode=\\\"indeterminate\\\" class=\\\"md-primary\\\"></md-progress-linear>\\n</div></md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/dialogs/print/print.html\",\"<md-dialog aria-label=\\\"Import Contacts\\\" class=\\\"w-300\\\" id=\\\"purchase-print-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10 pb-10\\\" \\ntranslate=\\\"GENERAL.PRINT\\\"></h2><md-checkbox ng-model=\\\"vm.showBrand\\\"><span translate=\\\"PRODUCT.BRAND\\\"></span>\\n</md-checkbox><md-checkbox ng-model=\\\"vm.showHsCode\\\"><span translate=\\\"PRODUCT.HARMONISED_CODE\\\"></span></md-checkbox>\\n<md-checkbox ng-model=\\\"vm.showComposition\\\"><span translate=\\\"PRODUCT.COMPOSITION\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.showAttributes\\\"><span translate=\\\"PRODUCT.ATTRIBUTES\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.printImages\\\"><span translate=\\\"PURCHASE.PRINT_IMAGES\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.thermalPrinter\\\"><span translate=\\\"TRANSFER.THERMAL_PRINTER_VERSION\\\"></span></md-checkbox><div layout=\\\"row\\\">\\n<md-button class=\\\"stroked\\\" ng-click=\\\"vm.hide()\\\" class=\\\"md-raised\\\" translate=\\\"GENERAL.CANCEL\\\" flex></md-button>\\n<md-button ng-click=\\\"vm.print()\\\" class=\\\"md-raised md-primary\\\" translate=\\\"GENERAL.PRINT\\\" flex></md-button></div></form>\\n</md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/directives/transfer-order-actions/nd-transfer-order-actions.html\",\"<div class=\\\"order-actions\\\" id=\\\"nd-purchase-actions\\\"><md-card-title-text class=\\\"h-50\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"space-between\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-add-order-product \\ncurrent-tab=\\\"\\'products\\'\\\" flex=\\\"100\\\" layout=\\\"row\\\" order=\\\"order\\\" type=\\\"type\\\"></nd-add-order-product></div><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><md-progress-circular class=\\\"mh-8\\\" md-diameter=\\\"20px\\\" \\nng-if=\\\"changed || saving || changingStatus\\\"></md-progress-circular><div \\nng-if=\\\"vm.transfer.is_replenishment && vm.screenIsBig()\\\"><md-button class=\\\"md-warn stroked\\\" \\nhas-permission=\\\"inventory.transfers.transfer.products.cancel\\\" ng-click=\\\"vm.cancel()\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE\\\" \\ntranslate=\\\"TRANSFER.CANCEL\\\">Cancel</md-button><md-button class=\\\"md-primary stroked\\\" \\nhas-permission=\\\"inventory.transfers.transfer.products.prepare\\\" ng-click=\\\"vm.allocate()\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_DRAFT\\\" \\ntranslate=\\\"TRANSFER.ORDER_AND_ALLOCATE\\\"></md-button><md-button class=\\\"md-primary md-raised\\\" \\nhas-permission=\\\"inventory.transfers.transfer.products.prepare\\\" ng-click=\\\"vm.order()\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_DRAFT\\\" \\ntranslate=\\\"TRANSFER.ORDER\\\">Confirm Draft</md-button></div><div ng-if=\\\"!vm.transfer.is_replenishment\\\"><md-button \\nclass=\\\"md-warn stroked\\\" data-test-id=\\\"transfer-button-cancel-order-allocation-shipping\\\" \\nhas-permission=\\\"inventory.transfers.transfer.products.cancel\\\" ng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status > vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_DRAFT && vm.transfer.status < vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_RECEPTION_DRAFT\\\">\\n<span ng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE\\\" \\ntranslate=\\\"TRANSFER.CANCEL_ORDER\\\"></span> <span \\nng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PREPARED\\\" \\ntranslate=\\\"TRANSFER.CANCEL_ALLOCATION\\\"></span> <span \\nng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_SHIPPED\\\" \\ntranslate=\\\"TRANSFER.CANCEL_SHIPPING\\\"></span></md-button><md-button class=\\\"stroked md-primary\\\" \\ndata-test-id=\\\"transfer-button-allocate\\\" has-permission=\\\"inventory.transfers.transfer.products.prepare\\\" \\nng-click=\\\"vm.allocate()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status <= vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE\\\" \\ntranslate=\\\"TRANSFER.ALLOCATE\\\">Allocate</md-button><md-button class=\\\"md-raised md-primary\\\" \\ndata-test-id=\\\"transfer-button-ship\\\" has-permission=\\\"inventory.transfers.transfer.products.ship\\\" \\nng-click=\\\"vm.prepareAndShip()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status <= vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE\\\" \\ntranslate=\\\"TRANSFER.SHIP\\\">Ship</md-button><md-button class=\\\"md-raised md-primary\\\" \\nhas-permission=\\\"inventory.transfers.transfer.products.ship\\\" ng-click=\\\"vm.ship()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PREPARED\\\" \\ntranslate=\\\"TRANSFER.SHIP\\\">Ship</md-button><md-button class=\\\"md-raised md-primary\\\" \\ndata-test-id=\\\"transfer-button-recieve\\\" has-permission=\\\"inventory.transfers.transfer.products.receive\\\" \\nng-click=\\\"vm.receive()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_SHIPPED\\\" \\ntranslate=\\\"TRANSFER.RECEIVE\\\">Receive</md-button></div><md-menu class=\\\"mr-5\\\"><md-button aria-label=\\\"more\\\" \\nclass=\\\"md-icon-button\\\" ng-click=\\\"$mdOpenMenu()\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button>\\n<md-menu-content width=\\\"3\\\"><md-menu-item has-permission=\\\"inventory.transfers.transfer.products.cancel\\\" \\nng-if=\\\"!vm.screenIsBig() && vm.transfer.is_replenishment && vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE\\\">\\n<md-button ng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-cancel\\\"></md-icon><span \\nclass=\\\"text-capitalized\\\" translate=\\\"TRANSFER.CANCEL\\\"></span></md-button></md-menu-item><md-menu-item \\nhas-permission=\\\"inventory.transfers.transfer.products.prepare\\\" \\nng-if=\\\"!vm.screenIsBig() && vm.transfer.is_replenishment && vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_DRAFT\\\">\\n<md-button ng-click=\\\"vm.allocate()\\\" ng-disabled=\\\"vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-arrow-right\\\"></md-icon>\\n<span class=\\\"text-capitalized\\\" translate=\\\"TRANSFER.ORDER_AND_ALLOCATE\\\"></span></md-button></md-menu-item><md-menu-item \\nhas-permission=\\\"inventory.transfers.transfer.products.prepare\\\" \\nng-if=\\\"!vm.screenIsBig() && vm.transfer.is_replenishment && vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_DRAFT\\\">\\n<md-button ng-click=\\\"vm.order()\\\" ng-disabled=\\\"vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-arrow-right\\\"></md-icon>\\n<span class=\\\"text-capitalized\\\" translate=\\\"TRANSFER.ORDER\\\"></span></md-button></md-menu-item><md-divider \\nng-if=\\\"!vm.screenIsBig()\\\"></md-divider><md-menu-item \\nhas-permission=\\\"inventory.transfers.transfer.products.add_product\\\" ng-if=\\\"vm.transfer.status == 1 || vm.editable\\\">\\n<md-button ng-click=\\\"vm.importProductsDialog()\\\" ng-disabled=\\\"vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-import\\\">\\n</md-icon>{{\\'IMPORT.IMPORT_PRODUCTS\\' | translate}}</md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.printOrder()\\\" ng-disabled=\\\"vm.changingStatus || vm.fetching\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file.0472566f.svg\\\"></md-icon><span translate=\\\"PURCHASE.PRINT\\\"></span>\\n</md-button></md-menu-item><md-menu-item><md-button ng-click=\\\"vm.importToLabelsGenerator()\\\" \\nng-disabled=\\\"vm.changingStatus || vm.fetching\\\"><md-icon md-font-icon=\\\"icon-tag-text-outline\\\"></md-icon><span \\ntranslate=\\\"LABELS_GENERATOR.IMPORT_TO_LABELS_GENERATOR\\\"></span></md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.duplicate()\\\" ng-disabled=\\\"vm.changingStatus || vm.fetching\\\"><md-icon md-font-icon=\\\"icon-content-copy\\\">\\n</md-icon><span translate=\\\"TRANSFER.DUPICATE\\\"></span></md-button></md-menu-item></md-menu-content></md-menu></div>\\n</md-card-title-text><md-card-title-text class=\\\"border-top h-50 pr-20\\\" flex layout=\\\"row\\\" layout-align=\\\"space-between\\\">\\n<div flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-search-product-in-order flex=\\\"100\\\" layout=\\\"row\\\">\\n</nd-search-product-in-order><nd-order-product-visualization-options options=\\\"options\\\" type=\\\"type\\\">\\n</nd-order-product-visualization-options></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><nd-get-order-totals \\norder=\\\"order\\\" show-cost=\\\"false\\\" type=\\\"type\\\" show-taxes=\\\"false\\\"></nd-get-order-totals></div></md-card-title-text></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/directives/transfer-order-delivery-actions/nd-transfer-order-delivery-actions.html\",\"<div class=\\\"order-actions\\\" id=\\\"nd-purchase-actions\\\"><md-card-title-text class=\\\"h-50 pr-5\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"space-between\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-add-order-product \\ncurrent-tab=\\\"\\'products\\'\\\" flex=\\\"100\\\" layout=\\\"row\\\" order=\\\"order\\\" show-dialog-when-adding=\\\"vm.isReplenishment()\\\" \\ntype=\\\"type\\\"></nd-add-order-product></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-progress-circular \\nclass=\\\"mh-8\\\" md-diameter=\\\"20px\\\" ng-if=\\\"changed || saving || changingStatus\\\"></md-progress-circular><md-button \\nclass=\\\"md-warn stroked m-5\\\" data-test-id=\\\"transfer-delivery-button-cancel\\\" \\nhas-permission=\\\"inventory.transfers.transfer.delivery.cancel\\\" ng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.transferOrderDelivery.status > 1\\\"><span ng-if=\\\"vm.transferOrderDelivery.status == 2\\\" \\ntranslate=\\\"TRANSFER.CANCEL_PREPARATION\\\"></span> <span ng-if=\\\"vm.transferOrderDelivery.status == 3\\\" \\ntranslate=\\\"TRANSFER.CANCEL_SHIPPING\\\"></span> <span ng-if=\\\"vm.transferOrderDelivery.status == 4\\\" \\ntranslate=\\\"TRANSFER.CANCEL_RECEPTION\\\"></span> <span ng-if=\\\"vm.transferOrderDelivery.status == 5\\\" \\ntranslate=\\\"TRANSFER.CANCEL_CONFIRMATION\\\"></span></md-button><md-button class=\\\"md-raised md-primary m-5\\\" \\ndata-test-id=\\\"transfer-replenish-button-prepare\\\" has-permission=\\\"inventory.transfers.transfer.delivery.prepare\\\" \\nng-click=\\\"vm.prepare()\\\" ng-disabled=\\\"vm.changingStatus\\\" ng-if=\\\"vm.transferOrderDelivery.status==1\\\" \\ntranslate=\\\"TRANSFER.PREPARE\\\">PREPARE</md-button><md-button class=\\\"md-raised md-primary m-5\\\" \\ndata-test-id=\\\"transfer-replenish-button-ship\\\" has-permission=\\\"inventory.transfers.transfer.delivery.ship\\\" \\nng-click=\\\"vm.ship()\\\" ng-disabled=\\\"vm.changingStatus\\\" ng-if=\\\"vm.transferOrderDelivery.status==2\\\" \\ntranslate=\\\"TRANSFER.SHIP\\\">SHIP</md-button><nd-menu-button md-class=\\\"\\'md-primary md-raised\\'\\\" \\nng-if=\\\"vm.transferOrderDelivery.status==3\\\"><md-button main-action ng-click=\\\"vm.receiveWithEmptyDeliveryOption(true)\\\" \\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/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/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/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/"}