supersamApp.controller('CutController', [ '$scope', '$http', '$timeout', 'localStorageService', '$filter', 'config', function($scope, $http, $timeout, localStorageService, $filter, config) { var cutApp; cutApp = (function() { class cutApp { constructor() { var cornerPosition, groovePosition, i, j, len, len1, ref, ref1; this.loadSavedOrderDataFromDB = this.loadSavedOrderDataFromDB.bind(this); this.initSheetDimensions = this.initSheetDimensions.bind(this); this.onSheetDimensionChange = this.onSheetDimensionChange.bind(this); this.clearPromises = this.clearPromises.bind(this); this.checkDetailsDimensionsLimits = this.checkDetailsDimensionsLimits.bind(this); this.checkForSimilarDetails = this.checkForSimilarDetails.bind(this); this.removeDetailsOrderInfo = this.removeDetailsOrderInfo.bind(this); this.isArray = this.isArray.bind(this); this.loadDetailsOrderInfo = this.loadDetailsOrderInfo.bind(this); this.saveDetailsOrderInfo = this.saveDetailsOrderInfo.bind(this); this.AutoSaveData = this.AutoSaveData.bind(this); this.checkIf2DetailsHaveSimilarBorders = this.checkIf2DetailsHaveSimilarBorders.bind(this); this.checkIf2DetailsHaveSimilarCorners = this.checkIf2DetailsHaveSimilarCorners.bind(this); this.checkIf2DetailsHaveSimilarGrooves = this.checkIf2DetailsHaveSimilarGrooves.bind(this); this.rotateDetail = this.rotateDetail.bind(this); this.getDetailColor = this.getDetailColor.bind(this); this.confirmCleanup = this.confirmCleanup.bind(this); this.cleanup = this.cleanup.bind(this); this.openNotifyModal = this.openNotifyModal.bind(this); this.openSendOrderEmailModal = this.openSendOrderEmailModal.bind(this); this.clearCalculateLayoutAjarRequestPromise = this.clearCalculateLayoutAjarRequestPromise.bind(this); this.calculateLayout = this.calculateLayout.bind(this); this.removeDetail = this.removeDetail.bind(this); this.addDetail = this.addDetail.bind(this); this.cleanupDetailsBordersIfBorderIsNotSelected = this.cleanupDetailsBordersIfBorderIsNotSelected.bind(this); this.toggleDetailBorder = this.toggleDetailBorder.bind(this); this.calculateBordersCount = this.calculateBordersCount.bind(this); this.getDetailBordersClass = this.getDetailBordersClass.bind(this); this.onDetailEnter = this.onDetailEnter.bind(this); this.onFieldEnter = this.onFieldEnter.bind(this); this.setDetailFocus = this.setDetailFocus.bind(this); this.getDetailsCount = this.getDetailsCount.bind(this); this.getDetailsArea = this.getDetailsArea.bind(this); this.getDetailImgPrintStyle = this.getDetailImgPrintStyle.bind(this); this.getDetailStyle = this.getDetailStyle.bind(this); this.getDetailClass = this.getDetailClass.bind(this); this.getDetailLabel = this.getDetailLabel.bind(this); this.onDetailChange = this.onDetailChange.bind(this); this.bindWatches = this.bindWatches.bind(this); this.unBindWatches = this.unBindWatches.bind(this); this.printOrder = this.printOrder.bind(this); this.printOrderConfirm = this.printOrderConfirm.bind(this); this.sendOrderEmailNotify = this.sendOrderEmailNotify.bind(this); this.mergeSimilarDetailsToggle = this.mergeSimilarDetailsToggle.bind(this); this.packCuttingsToOrderToggle = this.packCuttingsToOrderToggle.bind(this); this.onOrderInfoChange = this.onOrderInfoChange.bind(this); this.bindOrderInfoWatches = this.bindOrderInfoWatches.bind(this); this.modalScrollTo = this.modalScrollTo.bind(this); this.openSelectSheetConfigModal = this.openSelectSheetConfigModal.bind(this); this.setActiveSheetSelectStep = this.setActiveSheetSelectStep.bind(this); this.getSelectedSheetLabel = this.getSelectedSheetLabel.bind(this); this.getSheetFullDimensions = this.getSheetFullDimensions.bind(this); this.getSheetFullDimensionsBySheetId = this.getSheetFullDimensionsBySheetId.bind(this); this.getSelectedSheetFullDimensions = this.getSelectedSheetFullDimensions.bind(this); this.getSelectedSheetDimensions = this.getSelectedSheetDimensions.bind(this); this.getBorderLabel = this.getBorderLabel.bind(this); this.checkIfBorderInSheetColor = this.checkIfBorderInSheetColor.bind(this); this.selectSheetId = this.selectSheetId.bind(this); this.selectBorderId = this.selectBorderId.bind(this); this.getSelectedSheetData = this.getSelectedSheetData.bind(this); this.confirmSheetSelection = this.confirmSheetSelection.bind(this); this.discardBordersSelectFromStep1 = this.discardBordersSelectFromStep1.bind(this); this.discardBordersSelectFromStep2 = this.discardBordersSelectFromStep2.bind(this); this.discardBorder2SelectFromStep3 = this.discardBorder2SelectFromStep3.bind(this); this.getOrderCommentWithBr = this.getOrderCommentWithBr.bind(this); this.isDetailDimensionsFilled = this.isDetailDimensionsFilled.bind(this); this.openDetailLabelConfigModal = this.openDetailLabelConfigModal.bind(this); this.saveDetailLabelConfig = this.saveDetailLabelConfig.bind(this); this.openDetailCornersConfigModal = this.openDetailCornersConfigModal.bind(this); this.setDetailCornersConfigActiveTab = this.setDetailCornersConfigActiveTab.bind(this); this.saveDetailCornersConfig = this.saveDetailCornersConfig.bind(this); this.setDetailCornerConfigValue = this.setDetailCornerConfigValue.bind(this); this.onDetailCornersConfigDiagonalCutClick = this.onDetailCornersConfigDiagonalCutClick.bind(this); this.isDetailCornerConfigValueSelectDisabled = this.isDetailCornerConfigValueSelectDisabled.bind(this); this.isDetailCornerConfigInputDisabled = this.isDetailCornerConfigInputDisabled.bind(this); this.isDetailCornerConfigDiagonalCheckboxDisabled = this.isDetailCornerConfigDiagonalCheckboxDisabled.bind(this); this.isDetailGrooveConfigCheckboxDisabled = this.isDetailGrooveConfigCheckboxDisabled.bind(this); this.detailCornersConfigModalDataWatches = this.detailCornersConfigModalDataWatches.bind(this); this.onDetailCornersConfigChange = this.onDetailCornersConfigChange.bind(this); this.getDetailCornersText = this.getDetailCornersText.bind(this); this.getDetailCornersConfigClass = this.getDetailCornersConfigClass.bind(this); this.checkDetailCornersLimits = this.checkDetailCornersLimits.bind(this); this.checkDetailsCornersLimits = this.checkDetailsCornersLimits.bind(this); this.getDetailGroovesText = this.getDetailGroovesText.bind(this); this.getDetailGroovesConfigClass = this.getDetailGroovesConfigClass.bind(this); this.checkDetailGroovesLimits = this.checkDetailGroovesLimits.bind(this); this.checkDetailsGroovesLimits = this.checkDetailsGroovesLimits.bind(this); this.onDetailGroovesConfigGrooveEnabledClick = this.onDetailGroovesConfigGrooveEnabledClick.bind(this); this.setCreatedForManagerId = this.setCreatedForManagerId.bind(this); this.defaultDetailsCorners = {}; ref = config.cornerPositions; for (i = 0, len = ref.length; i < len; i++) { cornerPosition = ref[i]; this.defaultDetailsCorners[cornerPosition.id] = angular.copy({ value: "none", radius: config.corners.defaultRadius, x: config.corners.defaultX, y: config.corners.defaultY, diagonalCut: false }); } this.defaultDetailsGrooves = {}; ref1 = config.groovePositions; for (j = 0, len1 = ref1.length; j < len1; j++) { groovePosition = ref1[j]; this.defaultDetailsGrooves[groovePosition.id] = angular.copy(config.grooves); this.defaultDetailsGrooves[groovePosition.id].enabled = false; } if (config.createdForManagerId) { this.createdForManagerId = angular.copy(config.createdForManagerId); } if (config.savedOrderData) { this.loadSavedOrderDataFromDB(); } else { if (localStorageService.isSupported) { this.loadDetailsOrderInfo("AutoSavedCut"); } else { this.cleanup(); } this.date = new Date(); } $scope.utilities.showContentOnLoad(); } loadSavedOrderDataFromDB() { var dbKey, detail, detailsBorder, i, len, order, ref, ref1; this.skipNextWatchTrigger = true; order = angular.copy(config.savedOrderData); this.orderName = (order.name ? order.name : ""); this.orderPhone = (order.phone ? order.phone : ""); this.orderEmail = (order.email ? order.email : ""); this.orderAddress = (order.address ? order.address : ""); this.orderComment = (order.comment ? order.comment : ""); this.date = new Date(order.created); this.orderNum = (order.order_num ? order.order_num : ""); if (order.createdForManagerId) { this.createdForManagerId = angular.copy(order.createdForManagerId); } this.selectedSheetData = angular.copy(order.sheet_data); this.getSelectedSheetData(false, false); this.details = order.details.details; this.maxDetailId = 1; ref = this.details; for (i = 0, len = ref.length; i < len; i++) { detail = ref[i]; this.maxDetailId = Math.max(this.maxDetailId, detail.id); } if (order.details.detailsBorders) { ref1 = order.details.detailsBorders; for (dbKey in ref1) { detailsBorder = ref1[dbKey]; if (this.isArray(detailsBorder)) { order.details.detailsBorders[dbKey] = {}; } } } else { order.details.detailsBorders = {}; } this.detailsBorders = order.details.detailsBorders; this.detailsCorners = (order.details.detailsCorners ? order.details.detailsCorners : {}); this.detailsGrooves = (order.details.detailsGrooves ? order.details.detailsGrooves : {}); this.mergeSimilarDetails = (order.merge_similar_details > 0 ? true : false); this.packCuttingsToOrder = (order.pack_cuttings_to_order > 0 ? true : false); this.calculateBordersCount(); this.checkDetailsCornersLimits(); this.checkDetailsGroovesLimits(); if (order.order_cut_results && order.order_cut_results.notchCount) { this.sheets = order.order_cut_results.sheets ? angular.copy(order.order_cut_results.sheets) : angular.copy(this.defaultSheetsData); this.price = order.order_cut_results.price ? angular.copy(order.order_cut_results.price) : 0; this.notchCount = order.order_cut_results.notchCount ? angular.copy(order.order_cut_results.notchCount) : 0; return this.grooveCount = order.order_cut_results.grooveCount ? angular.copy(order.order_cut_results.grooveCount) : 0; } else { return this.calculateLayout(); } } initSheetDimensions() { var v; this.selectedSheetDimension = angular.copy(((function() { var i, len, ref, results; ref = config.sheetDimensions; results = []; for (i = 0, len = ref.length; i < len; i++) { v = ref[i]; if (v.id === this.selectedSheetDimension.id) { results.push(v); } } return results; }).call(this))[0]); this.selectedSheetDimension.width = this.selectedSheetDimension.fullWidth - 2 * config.common.face.value; this.selectedSheetDimension.height = this.selectedSheetDimension.fullHeight - 2 * config.common.face.value; this.sheetStyle = { "width": this.selectedSheetDimension.width / config.scale + "px", "height": this.selectedSheetDimension.height / config.scale + "px", "background": "url(" + $scope.utilities.getSheetImageById(this.selectedSheetData.sheetId, "image") + ") left top repeat" }; this.sheetHeightStyle = { "margin-top": this.selectedSheetDimension.height / config.scale / 2 - 15 + "px" }; this.sheetClass = this.selectedSheetDimension.class ? this.selectedSheetDimension.class : ""; return this.faceDescriptionWithPrice = (angular.copy($scope.utilities.getConfigLabel('faceDescription'))).replace("{facePrice}", this.selectedSheetDimension.facePrice).replace("{face}", config.common.face.value); } onSheetDimensionChange(forceLayoutCalculate = true, skipNextWatchTrigger = false) { this.initSheetDimensions(); this.checkDetailsDimensionsLimits(); this.AutoSaveData(skipNextWatchTrigger); if (forceLayoutCalculate) { return this.calculateLayout(); } } clearPromises() { if (this.calculateLayoutPromise) { $timeout.cancel(this.calculateLayoutPromise); return this.calculateLayoutPromise = null; } } checkDetailsDimensionsLimits() { var detail, detailHeightLimitExceeded, detailWidthLimitExceeded, key, ref; detailWidthLimitExceeded = false; detailHeightLimitExceeded = false; if ((this.selectedSheetData.sheetId > 0) && this.selectedSheetDimension) { ref = this.details; for (key in ref) { detail = ref[key]; if (detail.width && (parseInt(detail.width) > parseInt(this.selectedSheetDimension.width))) { detail.width = parseInt(this.selectedSheetDimension.width); detailWidthLimitExceeded = true; } if (detail.height && (detail.height > parseInt(this.selectedSheetDimension.height))) { detail.height = parseInt(this.selectedSheetDimension.height); detailHeightLimitExceeded = true; } } } if (detailWidthLimitExceeded || detailHeightLimitExceeded) { this.notifyMessage = ""; if (detailWidthLimitExceeded) { this.notifyMessage += $scope.utilities.getConfigLabel('detailWidthLimitExceededMessage') + " "; } if (detailHeightLimitExceeded) { this.notifyMessage += $scope.utilities.getConfigLabel('detailHeightLimitExceededMessage') + " "; } this.notifyMessage += $scope.utilities.getConfigLabel('detailDimensionChangedToLimitMessage'); this.checkDetailsCornersLimits(); this.checkDetailsGroovesLimits(); return this.openNotifyModal(); } } checkForSimilarDetails() { var detailsWithSimilarBorders, detailsWithSimilarCorners, detailsWithSimilarGrooves, inDetail, inKey, outDetail, outKey, ref, ref1; if (!this.mergeSimilarDetails) { return false; } ref = this.details; for (outKey in ref) { outDetail = ref[outKey]; ref1 = this.details; for (inKey in ref1) { inDetail = ref1[inKey]; if (outDetail.id !== inDetail.id) { //check similar for sizes if (inDetail.width && inDetail.height && outDetail.width && outDetail.height && (parseInt(inDetail.width) === parseInt(outDetail.width)) && (parseInt(inDetail.height) === parseInt(outDetail.height))) { if (!this.detailsBorders[outDetail.id]) { this.detailsBorders[outDetail.id] = {}; } detailsWithSimilarBorders = this.checkIf2DetailsHaveSimilarBorders(inDetail.id, this.detailsBorders[outDetail.id]); if (detailsWithSimilarBorders) { //no need to check corners if already different borders found if (!this.detailsCorners[outDetail.id]) { this.detailsCorners[outDetail.id] = angular.copy(this.defaultDetailsCorners); } detailsWithSimilarCorners = this.checkIf2DetailsHaveSimilarCorners(inDetail.id, this.detailsCorners[outDetail.id]); if (!this.detailsGrooves[outDetail.id]) { this.detailsGrooves[outDetail.id] = angular.copy(this.defaultDetailsGrooves); } detailsWithSimilarGrooves = this.checkIf2DetailsHaveSimilarGrooves(inDetail.id, this.detailsGrooves[outDetail.id]); if (detailsWithSimilarCorners && detailsWithSimilarGrooves) { if (!inDetail.count) { inDetail.count = 0; } outDetail.count = parseInt(outDetail.count); outDetail.count += parseInt(inDetail.count); this.details.splice(inKey, 1); this.notifyMessage = $scope.utilities.getConfigLabel('similarDetailAlreadyExists'); this.checkDetailsCornersLimits(); this.checkDetailsGroovesLimits(); this.openNotifyModal(); return; } } } } } } } removeDetailsOrderInfo(id) { var detailsSets, orderInfo; if (localStorageService.isSupported) { detailsSets = localStorageService.get("detailsSets"); if (detailsSets && detailsSets[id]) { delete detailsSets[id]; localStorageService.set("detailsSets", detailsSets); } orderInfo = localStorageService.get("orderInfo"); if (orderInfo && orderInfo[id]) { orderInfo[id] = { mergeSimilarDetails: this.mergeSimilarDetails, packCuttingsToOrder: this.packCuttingsToOrder, orderName: this.orderName, orderPhone: this.orderPhone, orderEmail: this.orderEmail, orderAddress: this.orderAddress, orderComment: "" }; return localStorageService.set("orderInfo", orderInfo); } } } isArray(value) { return value && typeof value === 'object' && typeof value.length === 'number' && typeof value.splice === 'function' && !value.propertyIsEnumerable('length'); } loadDetailsOrderInfo(id) { var dbKey, detail, detailsBorder, detailsSets, i, len, orderInfo, ref, ref1; if (localStorageService.isSupported) { orderInfo = localStorageService.get("orderInfo"); if (orderInfo && orderInfo[id]) { this.mergeSimilarDetails = orderInfo[id].mergeSimilarDetails ? angular.copy(orderInfo[id].mergeSimilarDetails) : false; this.packCuttingsToOrder = orderInfo[id].packCuttingsToOrder ? angular.copy(orderInfo[id].packCuttingsToOrder) : false; this.orderName = orderInfo[id].orderName ? angular.copy(orderInfo[id].orderName) : ""; this.orderPhone = orderInfo[id].orderPhone ? angular.copy(orderInfo[id].orderPhone.replace(/[^\d]/g, "")) : ""; this.orderEmail = orderInfo[id].orderEmail ? angular.copy(orderInfo[id].orderEmail) : ""; this.orderAddress = orderInfo[id].orderAddress ? angular.copy(orderInfo[id].orderAddress) : ""; this.orderComment = orderInfo[id].orderComment ? angular.copy(orderInfo[id].orderComment) : ""; if (typeof orderInfo[id].skipNextWatchTrigger !== "undefined") { this.skipNextWatchTrigger = angular.copy(orderInfo[id].skipNextWatchTrigger); } else { this.skipNextWatchTrigger = true; } } detailsSets = localStorageService.get("detailsSets"); if (detailsSets && detailsSets[id] && detailsSets[id].version && (detailsSets[id].version === config.version)) { this.sheets = detailsSets[id].sheets ? angular.copy(detailsSets[id].sheets) : angular.copy(this.defaultSheetsData); this.price = detailsSets[id].price ? angular.copy(detailsSets[id].price) : 0; this.notchCount = detailsSets[id].notchCount ? angular.copy(detailsSets[id].notchCount) : 0; this.grooveCount = detailsSets[id].grooveCount ? angular.copy(detailsSets[id].grooveCount) : 0; if (detailsSets[id].detailsBorders) { ref = detailsSets[id].detailsBorders; for (dbKey in ref) { detailsBorder = ref[dbKey]; if (this.isArray(detailsBorder)) { detailsSets[id].detailsBorders[dbKey] = {}; } } } else { detailsSets[id].detailsBorders = {}; } this.detailsBorders = angular.copy(detailsSets[id].detailsBorders); this.detailsCorners = angular.copy(detailsSets[id].detailsCorners); this.detailsGrooves = angular.copy(detailsSets[id].detailsGrooves); this.checkDetailsCornersLimits(); this.checkDetailsGroovesLimits(); if (detailsSets[id].selectedSheetData) { this.selectedSheetData = angular.copy(detailsSets[id].selectedSheetData); } else { this.selectedSheetData = angular.copy(this.defaultSelectedSheetData); } this.getSelectedSheetData(false, this.skipNextWatchTrigger); if (detailsSets[id].details) { this.maxDetailId = 1; ref1 = detailsSets[id].details; for (i = 0, len = ref1.length; i < len; i++) { detail = ref1[i]; this.maxDetailId = Math.max(this.maxDetailId, detail.id); } this.details = angular.copy(detailsSets[id].details); return this.calculateBordersCount(); } else { return this.cleanup(); } } else { return this.cleanup(); } } } saveDetailsOrderInfo(id, label, skipNextWatchTrigger) { var detailsSets, orderInfo; if (localStorageService.isSupported) { detailsSets = localStorageService.get("detailsSets"); if (!detailsSets) { detailsSets = {}; } detailsSets[id] = { details: this.details, detailsBorders: this.detailsBorders, detailsCorners: this.detailsCorners, detailsGrooves: this.detailsGrooves, selectedSheetData: this.selectedSheetData, sheets: this.sheets, price: this.price, notchCount: this.notchCount, grooveCount: this.grooveCount, label: label, time: new Date(), version: config.version }; orderInfo = localStorageService.get("orderInfo"); if (!orderInfo) { orderInfo = {}; } //null means current trigger state - ie do not recount if only order info (name, email etc) changed if ((skipNextWatchTrigger === null) && orderInfo && orderInfo[id] && (typeof orderInfo[id].skipNextWatchTrigger !== "undefined")) { skipNextWatchTrigger = orderInfo[id].skipNextWatchTrigger; } orderInfo[id] = { mergeSimilarDetails: this.mergeSimilarDetails, packCuttingsToOrder: this.packCuttingsToOrder, orderName: this.orderName, orderPhone: this.orderPhone, orderEmail: this.orderEmail, orderAddress: this.orderAddress, orderComment: this.orderComment, skipNextWatchTrigger: skipNextWatchTrigger }; localStorageService.set("detailsSets", detailsSets); return localStorageService.set("orderInfo", orderInfo); } } AutoSaveData(skipNextWatchTrigger) { if (localStorageService.isSupported) { return this.saveDetailsOrderInfo("AutoSavedCut", "Автоматическое сохранение", skipNextWatchTrigger); } } checkIf2DetailsHaveSimilarBorders(detailId, borders) { var borderPosition, detailsWithSimilarBorders, i, len, ref; if (!this.detailsBorders[detailId]) { this.detailsBorders[detailId] = {}; } detailsWithSimilarBorders = true; ref = config.borderPositions; for (i = 0, len = ref.length; i < len; i++) { borderPosition = ref[i]; if ((this.detailsBorders[detailId][borderPosition] && !borders[borderPosition]) || (!this.detailsBorders[detailId][borderPosition] && borders[borderPosition]) || (this.detailsBorders[detailId][borderPosition] && borders[borderPosition] && (this.detailsBorders[detailId][borderPosition] !== borders[borderPosition]))) { detailsWithSimilarBorders = false; } } return detailsWithSimilarBorders; } checkIf2DetailsHaveSimilarCorners(detailId, corners) { var cornerPosition, detailsWithSimilarCorners, i, len, ref; if (!this.detailsCorners[detailId]) { this.detailsCorners[detailId] = angular.copy(this.defaultDetailsCorners); } detailsWithSimilarCorners = true; ref = config.cornerPositions; for (i = 0, len = ref.length; i < len; i++) { cornerPosition = ref[i]; if (this.detailsCorners[detailId][cornerPosition.id].value !== corners[cornerPosition.id].value) { detailsWithSimilarCorners = false; break; } else { switch (this.detailsCorners[detailId][cornerPosition.id].value) { case "radius": if (parseInt(this.detailsCorners[detailId][cornerPosition.id].radius) !== parseInt(corners[cornerPosition.id].radius)) { detailsWithSimilarCorners = false; } break; case "cut": if ((parseInt(this.detailsCorners[detailId][cornerPosition.id].x) !== parseInt(corners[cornerPosition.id].x)) || (parseInt(this.detailsCorners[detailId][cornerPosition.id].y) !== parseInt(corners[cornerPosition.id].y)) || (this.detailsCorners[detailId][cornerPosition.id].diagonalCut !== corners[cornerPosition.id].diagonalCut)) { detailsWithSimilarCorners = false; } } } } return detailsWithSimilarCorners; } checkIf2DetailsHaveSimilarGrooves(detailId, grooves) { var detailsWithSimilarGrooves, groovePosition, i, len, ref; if (!this.detailsGrooves[detailId]) { this.detailsGrooves[detailId] = angular.copy(this.defaultDetailsGrooves); } detailsWithSimilarGrooves = true; ref = config.groovePositions; for (i = 0, len = ref.length; i < len; i++) { groovePosition = ref[i]; if (this.detailsGrooves[detailId][groovePosition.id].enabled !== grooves[groovePosition.id].enabled) { detailsWithSimilarGrooves = false; break; } else { if ((parseInt(this.detailsGrooves[detailId][groovePosition.id].offset) !== parseInt(grooves[groovePosition.id].offset)) || (parseInt(this.detailsGrooves[detailId][groovePosition.id].depth) !== parseInt(grooves[groovePosition.id].depth)) || (parseInt(this.detailsGrooves[detailId][groovePosition.id].width) !== parseInt(grooves[groovePosition.id].width))) { detailsWithSimilarGrooves = false; } } } return detailsWithSimilarGrooves; } rotateDetail(sheetDetail) { var alreadyExistedDetailId, cornerPosition, currY, detail, detailsWithSimilarBorders, detailsWithSimilarCorners, detailsWithSimilarGrooves, i, isRotatedDetailAlreadyExists, key, len, newDetailBorders, newDetailCorners, newDetailGrooves, newDetailHeight, newDetailWidth, ref, ref1, ref2, ref3, ref4; if (!this.isSubmitting) { this.unBindWatches(); isRotatedDetailAlreadyExists = false; this.notifyMessage = ""; if ((this.selectedSheetData.sheetId > 0) && this.selectedSheetDimension) { if (parseInt(sheetDetail.height) <= parseInt(this.selectedSheetDimension.width)) { newDetailWidth = parseInt(sheetDetail.height); } else { newDetailWidth = parseInt(this.selectedSheetDimension.width); this.notifyMessage += $scope.utilities.getConfigLabel('detailWidthLimitExceededMessage') + " "; } if (parseInt(sheetDetail.width) <= parseInt(this.selectedSheetDimension.height)) { newDetailHeight = parseInt(sheetDetail.width); } else { newDetailHeight = parseInt(this.selectedSheetDimension.height); this.notifyMessage += $scope.utilities.getConfigLabel('detailHeightLimitExceededMessage') + " "; } } if (this.notifyMessage.length > 0) { this.notifyMessage += $scope.utilities.getConfigLabel('detailDimensionChangedToLimitMessage'); this.openNotifyModal(); } if (!this.detailsBorders[sheetDetail.detailId]) { this.detailsBorders[sheetDetail.detailId] = {}; } if (!this.detailsCorners[sheetDetail.detailId]) { this.detailsCorners[sheetDetail.detailId] = angular.copy(this.defaultDetailsCorners); } if (!this.detailsGrooves[sheetDetail.detailId]) { this.detailsGrooves[sheetDetail.detailId] = angular.copy(this.defaultDetailsGrooves); } //rotate borders clockwise newDetailBorders = {}; if (this.detailsBorders[sheetDetail.detailId].top) { newDetailBorders.right = angular.copy(this.detailsBorders[sheetDetail.detailId].top); } if (this.detailsBorders[sheetDetail.detailId].right) { newDetailBorders.bottom = angular.copy(this.detailsBorders[sheetDetail.detailId].right); } if (this.detailsBorders[sheetDetail.detailId].bottom) { newDetailBorders.left = angular.copy(this.detailsBorders[sheetDetail.detailId].bottom); } if (this.detailsBorders[sheetDetail.detailId].left) { newDetailBorders.top = angular.copy(this.detailsBorders[sheetDetail.detailId].left); } //rotate corners clockwise newDetailCorners = angular.copy({ bottomLeft: this.detailsCorners[sheetDetail.detailId].bottomRight, topLeft: this.detailsCorners[sheetDetail.detailId].bottomLeft, topRight: this.detailsCorners[sheetDetail.detailId].topLeft, bottomRight: this.detailsCorners[sheetDetail.detailId].topRight }); ref = config.cornerPositions; for (i = 0, len = ref.length; i < len; i++) { cornerPosition = ref[i]; currY = angular.copy(newDetailCorners[cornerPosition.id].y); newDetailCorners[cornerPosition.id].y = angular.copy(newDetailCorners[cornerPosition.id].x); newDetailCorners[cornerPosition.id].x = angular.copy(currY); } //rotate grooves clockwise newDetailGrooves = angular.copy({ right: this.detailsGrooves[sheetDetail.detailId].top, bottom: this.detailsGrooves[sheetDetail.detailId].right, left: this.detailsGrooves[sheetDetail.detailId].bottom, top: this.detailsGrooves[sheetDetail.detailId].left }); ref1 = this.details; for (key in ref1) { detail = ref1[key]; if ((parseInt(detail.width) === parseInt(newDetailWidth)) && (parseInt(detail.height) === parseInt(newDetailHeight))) { detailsWithSimilarBorders = this.checkIf2DetailsHaveSimilarBorders(detail.id, newDetailBorders); if (detailsWithSimilarBorders) { //no need to check corners if already different borders found detailsWithSimilarCorners = this.checkIf2DetailsHaveSimilarCorners(sheetDetail.detailId, newDetailCorners); detailsWithSimilarGrooves = this.checkIf2DetailsHaveSimilarGrooves(sheetDetail.detailId, newDetailGrooves); if (detailsWithSimilarCorners && detailsWithSimilarGrooves) { isRotatedDetailAlreadyExists = true; alreadyExistedDetailId = angular.copy(detail.id); break; } } } } if (!isRotatedDetailAlreadyExists) { ref2 = this.details; for (key in ref2) { detail = ref2[key]; if (detail.id === sheetDetail.detailId) { if (parseInt(detail.count) > 1) { detail.count--; this.maxDetailId++; this.details.push({ id: this.maxDetailId, width: parseInt(newDetailWidth), height: parseInt(newDetailHeight), count: 1, color: this.getDetailColor(this.maxDetailId) }); this.detailsBorders[this.maxDetailId] = angular.copy(newDetailBorders); this.detailsCorners[this.maxDetailId] = angular.copy(newDetailCorners); this.detailsGrooves[this.maxDetailId] = angular.copy(newDetailGrooves); } else { detail.width = parseInt(newDetailWidth); detail.height = parseInt(newDetailHeight); this.detailsBorders[sheetDetail.detailId] = angular.copy(newDetailBorders); this.detailsCorners[sheetDetail.detailId] = angular.copy(newDetailCorners); this.detailsGrooves[sheetDetail.detailId] = angular.copy(newDetailGrooves); } this.checkDetailsCornersLimits(); this.checkDetailsGroovesLimits(); break; } } } else { ref3 = this.details; for (key in ref3) { detail = ref3[key]; if (detail.id === alreadyExistedDetailId) { detail.count++; } if (detail.id === sheetDetail.detailId) { detail.count--; } } ref4 = this.details; for (key in ref4) { detail = ref4[key]; if ((detail.id === sheetDetail.detailId) && (!detail.count || (detail.count < 1))) { this.details.splice(key, 1); } } } this.checkDetailsDimensionsLimits(); this.calculateBordersCount(); this.calculateLayout(); this.skipNextWatchTrigger = true; return this.bindWatches(); } } getDetailColor(index) { if (index > config.detailsColors.length) { index = index % config.detailsColors.length; if (index === 0) { index = config.detailsColors.length; } } return config.detailsColors[index - 1]; } confirmCleanup() { this.fullOrderCleanup = false; return $timeout(() => { return angular.element(this.confirmCleanupModalId).data("backdrop", "static").modal("show"); }); } cleanup(cleanupUrlParams = false) { var border, i, len, ref; $timeout(() => { return angular.element(this.confirmCleanupModalId).modal("hide"); }); this.selectedSheetData = angular.copy(this.defaultSelectedSheetData); this.sheets = angular.copy(this.defaultSheetsData); this.maxDetailId = 1; this.details = [ { id: this.maxDetailId, count: 1, color: this.getDetailColor(this.maxDetailId) } ]; this.detailsBorders = {}; this.detailsCorners = {}; this.detailsGrooves = {}; ref = config.borders; for (i = 0, len = ref.length; i < len; i++) { border = ref[i]; border.count = 0; } this.price = 0; this.notchCount = 0; this.grooveCount = ""; this.errors = []; this.isSubmitting = false; this.orderComment = ""; this.orderNum = ""; if (this.fullOrderCleanup) { this.orderName = ""; this.orderPhone = ""; this.orderAddress = ""; this.orderEmail = ""; } this.removeDetailsOrderInfo("AutoSavedCut"); this.date = new Date(); this.mergeSimilarDetails = true; this.packCuttingsToOrder = false; if (cleanupUrlParams && (window.location.href.indexOf('oid') > -1)) { return window.location.replace(location.pathname); } } openNotifyModal() { return $timeout(() => { return angular.element(this.notifyModalId).modal("show"); }); } openSendOrderEmailModal() { return $timeout(() => { return angular.element(this.notifySendOrderEmailModalId).data("backdrop", "static").modal("show"); }); } clearCalculateLayoutAjarRequestPromise() { if (this.calculateLayoutAjarRequestPromise) { this.calculateLayoutAjarRequestPromise.abort(); this.calculateLayoutAjarRequestPromise = null; } if (this.calculateLayoutAjarRequestTimeoutPromise) { $timeout.cancel(this.calculateLayoutAjarRequestTimeoutPromise); return this.calculateLayoutAjarRequestTimeoutPromise = null; } } calculateLayout(immediateSync = false) { var dataToSend; if (immediateSync) { //immediate sync this.clearPromises; this.checkDetailsDimensionsLimits(); this.calculateBordersCount(); } this.AutoSaveData(false); dataToSend = { details: this.details, selectedSheetData: this.selectedSheetData, detailsCorners: this.detailsCorners, detailsGrooves: this.detailsGrooves }; this.clearCalculateLayoutAjarRequestPromise(); this.calculateLayoutAjarRequestTimeoutPromise = $timeout(() => { this.clearCalculateLayoutAjarRequestPromise(); this.notifyMessage = "Выполнение расчет заняло слишком много времени и было отменено. Пожалуйста, уточните параметры деталей и попробуйте снова."; return this.openNotifyModal(); }, 115000); this.isSubmitting = true; return this.calculateLayoutAjarRequestPromise = $http.with_abort({ method: 'POST', url: config.cutUrl, data: dataToSend }).then((response) => { var data; this.isSubmitting = false; this.clearCalculateLayoutAjarRequestPromise(); $timeout(() => { return angular.element(this.confirmStartCutOptimizeModalId).modal("hide"); }); if (response.data) { data = response.data; if (data.status === "success") { if (data.sheets && (data.sheets.length > 0)) { this.sheets = data.sheets; this.notchCount = data.notchCount; this.grooveCount = data.grooveCount; this.price = data.price; return this.AutoSaveData(true); } else { this.sheets = angular.copy(this.defaultSheetsData); this.notchCount = 0; this.grooveCount = ""; return this.price = 0; } } else { if (data.message) { this.notifyMessage = data.message; } else { this.notifyMessage = $scope.utilities.getConfigLabel("dataLoadingError", true); } return this.openNotifyModal(); } } }).catch(() => { this.isSubmitting = false; this.clearCalculateLayoutAjarRequestPromise(); $timeout(() => { return angular.element(this.confirmStartCutOptimizeModalId).modal("hide"); }); this.notifyMessage = $scope.utilities.getConfigLabel("dataLoadingError", true); return this.openNotifyModal(); }); } removeDetail(detail) { var key, ref, results, value; ref = this.details; results = []; for (key in ref) { value = ref[key]; if (value.id === detail.id) { this.details.splice(key, 1); delete this.detailsBorders[detail.id]; delete this.detailsCorners[detail.id]; delete this.detailsGrooves[detail.id]; this.calculateLayout(true); break; } else { results.push(void 0); } } return results; } addDetail() { var detail, i, len, ref; ref = this.details; for (i = 0, len = ref.length; i < len; i++) { detail = ref[i]; if (!this.isDetailDimensionsFilled(detail)) { return; } } this.maxDetailId++; this.details.push({ id: this.maxDetailId, count: 1, color: this.getDetailColor(this.maxDetailId) }); this.detailsBorders[this.maxDetailId] = {}; this.detailsCorners[this.maxDetailId] = angular.copy(this.defaultDetailsCorners); this.detailsGrooves[this.maxDetailId] = angular.copy(this.defaultDetailsGrooves); this.setDetailFocus(this.maxDetailId, 'width'); return this.calculateLayout(true); } cleanupDetailsBordersIfBorderIsNotSelected() { var borderId, borderPosition, dbKey, detailsBorder, ref, results; ref = this.detailsBorders; results = []; for (dbKey in ref) { detailsBorder = ref[dbKey]; results.push((function() { var i, len, ref1, results1; ref1 = config.borderPositions; results1 = []; for (i = 0, len = ref1.length; i < len; i++) { borderPosition = ref1[i]; results1.push((function() { var j, len1, ref2, results2; ref2 = [1, 2]; results2 = []; for (j = 0, len1 = ref2.length; j < len1; j++) { borderId = ref2[j]; if (detailsBorder && detailsBorder[borderPosition] && (detailsBorder[borderPosition] === borderId) && !this.selectedSheetData["border" + borderId + "Id"]) { results2.push(delete this.detailsBorders[dbKey][borderPosition]); } else { results2.push(void 0); } } return results2; }).call(this)); } return results1; }).call(this)); } return results; } toggleDetailBorder(detail, align, borderId) { if (!this.detailsBorders[detail.id]) { this.detailsBorders[detail.id] = {}; } if (!this.detailsBorders[detail.id][align]) { this.detailsBorders[detail.id][align] = borderId; } else { if (this.detailsBorders[detail.id][align] === borderId) { delete this.detailsBorders[detail.id][align]; } else { this.detailsBorders[detail.id][align] = borderId; } } this.calculateBordersCount(); this.AutoSaveData(false); return this.onDetailChange(); } calculateBordersCount() { var borderId, bordersCount, i, j, len, len1, li, li_border, li_id, ref, ref1, ref2, results; bordersCount = {}; ref = this.details; for (i = 0, len = ref.length; i < len; i++) { li = ref[i]; if (this.detailsBorders[li.id]) { ref1 = this.detailsBorders[li.id]; for (li_id in ref1) { li_border = ref1[li_id]; if (!bordersCount[li_border]) { bordersCount[li_border] = 0; } if (li.count && (parseInt(li.count) > 0)) { if (li.width && (parseInt(li.width) > 0) && ((li_id === "top") || (li_id === "bottom"))) { bordersCount[li_border] += parseInt(li.width) * parseInt(li.count); } if (li.height && (parseInt(li.height) > 0) && ((li_id === "left") || (li_id === "right"))) { bordersCount[li_border] += parseInt(li.height) * parseInt(li.count); } } } } } ref2 = [1, 2]; results = []; for (j = 0, len1 = ref2.length; j < len1; j++) { borderId = ref2[j]; if (bordersCount[borderId]) { results.push(this.selectedSheetData["border" + borderId + "Count"] = bordersCount[borderId]); } else { results.push(this.selectedSheetData["border" + borderId + "Count"] = 0); } } return results; } getDetailBordersClass(detail) { var border, borderClass, ref, value; borderClass = []; if (this.detailsBorders[detail.id]) { ref = this.detailsBorders[detail.id]; for (border in ref) { value = ref[border]; borderClass.push(border + "-border-" + value); } } return borderClass.join(" "); } onDetailEnter(detail, field) { var key, li, ref, results; if (detail[field] && (parseInt(detail[field]) > 0)) { if (field === "width") { //focus on height return this.setDetailFocus(detail.id, 'height'); } else { if (field === "height") { //focus on count return this.setDetailFocus(detail.id, 'count'); } else { if (field === "count") { //move to next detail or add new if (detail.width && detail.height && detail.count && (detail.width > 0) && (detail.height > 0) && (detail.count > 0)) { if (detail === this.details[this.details.length - 1]) { return this.addDetail(); } else { ref = this.details; results = []; for (key in ref) { li = ref[key]; if (li === detail) { this.setDetailFocus(this.details[parseInt(key) + 1].id, 'width'); break; } else { results.push(void 0); } } return results; } } } } } } } onFieldEnter(nextField) { if (nextField) { return $timeout(() => { return angular.element('#' + nextField).focus().select(); }); } } setDetailFocus(detailId, field) { return $timeout(() => { return angular.element('#detail' + detailId + field).focus().select(); }); } getDetailsCount() { var count, detail, i, len, ref; count = 0; ref = this.details; for (i = 0, len = ref.length; i < len; i++) { detail = ref[i]; if (detail.width && detail.height && detail.count && (detail.width > 0) && (detail.height > 0) && (detail.count > 0)) { count += parseInt(detail.count); } } return count; } getDetailsArea() { var area, detail, i, len, ref; area = 0; ref = this.details; for (i = 0, len = ref.length; i < len; i++) { detail = ref[i]; if (detail.width && detail.height && detail.count && (detail.width > 0) && (detail.height > 0) && (detail.count > 0)) { area += parseInt(detail.width) * parseInt(detail.height) * parseInt(detail.count); } } return area; } getDetailImgPrintStyle(detail) { return { "height": detail.height / config.scale + "px", "width": detail.width / config.scale + "px" }; } getDetailStyle(detail) { var bgColor, result, v; result = { "margin-left": detail.left / config.scale + "px", "margin-top": detail.top / config.scale + "px", "height": detail.height / config.scale + "px", "width": detail.width / config.scale + "px" }; bgColor = (function() { var i, len, ref, results; ref = this.details; results = []; for (i = 0, len = ref.length; i < len; i++) { v = ref[i]; if (v.id === detail.detailId) { results.push(v); } } return results; }).call(this); if (bgColor.length) { result["background-color"] = bgColor[0].color; } else { result["background-color"] = this.getDetailColor(detail.detailId); } return result; } getDetailClass(detail) { var border, ref, result, value; result = []; if (this.detailsBorders[detail.detailId]) { ref = this.detailsBorders[detail.detailId]; for (border in ref) { value = ref[border]; result.push(border + "-border-" + value); } } if (parseInt(detail.height / config.scale) < 30) { result.push("detail-with-small-height"); } if (parseInt(detail.width / config.scale) < 30) { result.push("detail-with-small-width"); } return result.join(" "); } getDetailLabel(detailId) { var detail, i, label, len, ref; label = ""; ref = this.details; for (i = 0, len = ref.length; i < len; i++) { detail = ref[i]; if (detailId && detail.id && (detail.id === detailId) && detail.label && (detail.label.length > 0)) { label = detail.label; } } return label; } onDetailChange() { if (this.skipNextWatchTrigger && (this.skipNextWatchTrigger === true)) { //ie after immediate sync after rotate this.skipNextWatchTrigger = false; return; } this.clearPromises(); return this.calculateLayoutPromise = $timeout(() => { var detail, i, len, ref; this.checkDetailsCornersLimits(); this.checkDetailsGroovesLimits(); this.checkDetailsDimensionsLimits(); this.checkForSimilarDetails(); this.calculateBordersCount(); this.AutoSaveData(false); ref = this.details; for (i = 0, len = ref.length; i < len; i++) { detail = ref[i]; if (!this.isDetailDimensionsFilled(detail)) { return; } } return this.calculateLayout(); }, 1500); } bindWatches() { if (typeof this.detailsWatcher === "function") { this.detailsWatcher(); //unbind first } return this.detailsWatcher = $scope.$watch('cut.details', $scope.cut.onDetailChange, true); } unBindWatches() { if (typeof this.detailsWatcher === "function") { return this.detailsWatcher(); } } printOrder(printType) { if (config.additionalActionsAllowed) { if (!config.savedOrderData) { return this.sendOrderEmailNotify((printType === "Cut" ? "printNotify" : "printOnly"), printType); } else { return this.printOrderConfirm(config.savedOrderData["printOrder" + printType + "Url"]); } } } printOrderConfirm(printOrderUrl) { var printOrderWindow; if (printOrderUrl && (printOrderUrl.length > 0)) { printOrderWindow = window.open(printOrderUrl, '_blank'); printOrderWindow.focus(); return $timeout(() => { return printOrderWindow.print(); }, 1000); } } sendOrderEmailNotify(branchId, printType = "") { var dataToSend, detail, i, len, ref; if (this.isSubmitting) { this.notifyMessage = $scope.utilities.getConfigLabel("orderSendManagerCutIsActive"); this.openNotifyModal(); return; } if (!this.isSendOrderEmailSubmitting) { this.isSendOrderEmailSubmitting = true; ref = this.details; for (i = 0, len = ref.length; i < len; i++) { detail = ref[i]; if (!this.isDetailDimensionsFilled(detail)) { this.notifyMessage = "Пожалуйста, проверьте корректность заполнения параметров деталей!"; this.openNotifyModal(); this.isSendOrderEmailSubmitting = false; return; } } if ((printType !== "") || (this.orderEmail && (this.orderEmail.length > 0)) && (this.orderPhone && (this.orderPhone.length > 0))) { dataToSend = { details: this.details, detailsBorders: this.detailsBorders, detailsCorners: this.detailsCorners, detailsGrooves: this.detailsGrooves, mergeSimilarDetails: this.mergeSimilarDetails, packCuttingsToOrder: this.packCuttingsToOrder, orderName: this.orderName, orderPhone: this.orderPhone, orderEmail: this.orderEmail, orderAddress: this.orderAddress, orderComment: this.orderComment, branchId: branchId, createdForManagerId: this.createdForManagerId, selectedSheetData: this.selectedSheetData, sheets: this.sheets, notchCount: this.notchCount, grooveCount: this.grooveCount, price: this.price }; if (printType !== "") { if (branchId === "printNotify") { dataToSend.orderEmailNotify = true; } else { dataToSend.printOnly = true; } } else { dataToSend.orderEmailNotify = true; } if (config.savedOrderData) { dataToSend.eOId = config.savedOrderData.eOId; } return $http({ method: 'POST', url: config.cutUrl, data: dataToSend, timeout: 60000 }).then((response) => { var data; this.isSendOrderEmailSubmitting = false; if (response.data) { data = response.data; if ((branchId !== "printNotify") && (branchId !== "printOnly")) { if (data.orderEmailNotifySent && (data.orderEmailNotifySent === "success")) { this.openSendOrderEmailModal(); if (data.fullCleanupOnSuccess) { this.fullOrderCleanup = true; return this.cleanup(true); } } else { if (config.savedOrderData) { this.notifyMessage = $scope.utilities.getConfigLabel("orderSaveManagerError", true); } else { this.notifyMessage = $scope.utilities.getConfigLabel("orderSendManagerError", true); } return this.openNotifyModal(); } } else { if (data["printOrder" + printType + "Url"]) { return this.printOrderConfirm(data["printOrder" + printType + "Url"]); } else { this.notifyMessage = $scope.utilities.getConfigLabel("orderSaveManagerError", true); return this.openNotifyModal(); } } } }).catch((data) => { this.isSendOrderEmailSubmitting = false; if ((branchId !== "printNotify") && (branchId !== "printOnly")) { if (!data || (data && (data !== 'canceled'))) { if (config.savedOrderData) { this.notifyMessage = $scope.utilities.getConfigLabel("orderSaveManagerError", true); } else { this.notifyMessage = $scope.utilities.getConfigLabel("orderSendManagerError", true); } return this.openNotifyModal(); } } }); } } } mergeSimilarDetailsToggle() { this.mergeSimilarDetails = !this.mergeSimilarDetails; if (this.mergeSimilarDetails) { return this.onDetailChange(); } else { return this.AutoSaveData(false); } } packCuttingsToOrderToggle() { this.packCuttingsToOrder = !this.packCuttingsToOrder; return this.AutoSaveData(false); } onOrderInfoChange() { if (this.orderInfoSaveTimeoutPromise) { $timeout.cancel(this.orderInfoSaveTimeoutPromise); this.orderInfoSaveTimeoutPromise = null; } return this.orderInfoSaveTimeoutPromise = $timeout(() => { return this.AutoSaveData(null); }, this.orderInfoSaveTimeout); } bindOrderInfoWatches() { $scope.$watch('cut.orderName', $scope.cut.onOrderInfoChange, true); $scope.$watch('cut.orderEmail', $scope.cut.onOrderInfoChange, true); $scope.$watch('cut.orderPhone', $scope.cut.onOrderInfoChange, true); $scope.$watch('cut.orderAddress', $scope.cut.onOrderInfoChange, true); return $scope.$watch('cut.orderComment', $scope.cut.onOrderInfoChange, true); } modalScrollTo(modalId, elementId) { return $timeout(() => { return angular.element(modalId + " .modal-body").scrollTo(elementId, 100, { offset: { top: -15 } }); }); } openSelectSheetConfigModal() { var scrollToTop; this.isSelectSheetConfigModalTriggered = true; this.selectSheetConfigModalData = angular.copy(this.selectedSheetData); scrollToTop = angular.copy(this.activeSheetSelectStep > 1); this.activeSheetSelectStep = 1; this.scrollToDefaultBorderId = false; angular.element(this.selectSheetConfigModalId).modal("show"); return angular.element(this.selectSheetConfigModalId).on('shown.bs.modal', () => { if (this.selectSheetConfigModalData.sheetId > 0) { this.modalScrollTo(this.selectSheetConfigModalId, "#selectSheetId" + this.selectSheetConfigModalData.sheetId); } else { if (scrollToTop) { this.modalScrollTo(this.selectSheetConfigModalId, 0); } } return $timeout(() => { return lozad('.img-lazy').observe(); }); }); } setActiveSheetSelectStep(step) { var i, j, k, len, len1, len2, ref, ref1, ref2, selectedBorder1, selectedBorder2, selectedSheet, v; switch (step) { case 1: if (this.selectSheetConfigModalData.sheetId > 0) { this.modalScrollTo(this.selectSheetConfigModalId, "#selectSheetId" + this.selectSheetConfigModalData.sheetId); } break; case 2: if (this.selectSheetConfigModalData.border1Id > 0) { this.modalScrollTo(this.selectSheetConfigModalId, "#selectBorder1Id" + this.selectSheetConfigModalData.border1Id); ref = config.borders; for (i = 0, len = ref.length; i < len; i++) { v = ref[i]; if (v.id === this.selectSheetConfigModalData.border1Id) { selectedBorder1 = v; } } if (selectedBorder1) { this.selectBorderId(1, selectedBorder1); } } else { if (this.activeSheetSelectStep === 1) { if (this.scrollToDefaultBorderId) { ref1 = config.sheets; for (j = 0, len1 = ref1.length; j < len1; j++) { v = ref1[j]; if (v.id === this.selectSheetConfigModalData.sheetId) { selectedSheet = v; } } if (selectedSheet && (selectedSheet.default_border_id > 0)) { this.modalScrollTo(this.selectSheetConfigModalId, "#selectBorder1Id" + selectedSheet.default_border_id); } } else { this.modalScrollTo(this.selectSheetConfigModalId, 0); } } } this.scrollToDefaultBorderId = false; break; case 3: if (this.selectSheetConfigModalData.border2Id > 0) { this.modalScrollTo(this.selectSheetConfigModalId, "#selectBorder2Id" + this.selectSheetConfigModalData.border2Id); ref2 = config.borders; for (k = 0, len2 = ref2.length; k < len2; k++) { v = ref2[k]; if (v.id === this.selectSheetConfigModalData.border2Id) { selectedBorder2 = v; } } if (selectedBorder2) { this.selectBorderId(2, selectedBorder2); } } } return this.activeSheetSelectStep = step; } getSelectedSheetLabel(id) { var i, label, len, ref, selectedSheet, v; label = "Не выбрана"; if (id > 0) { ref = config.sheets; for (i = 0, len = ref.length; i < len; i++) { v = ref[i]; if (v.id === id) { selectedSheet = v; } } if (selectedSheet) { label = selectedSheet.label; } } return label; } getSheetFullDimensions(sheetDimensionId) { var i, label, len, ref, selectedSheetDimensions, v; label = ""; ref = config.sheetDimensions; for (i = 0, len = ref.length; i < len; i++) { v = ref[i]; if (v.id === sheetDimensionId) { selectedSheetDimensions = v; } } if (selectedSheetDimensions) { label = selectedSheetDimensions.width + 'x' + selectedSheetDimensions.height + 'x' + selectedSheetDimensions.thick + ' мм'; } return label; } getSheetFullDimensionsBySheetId(sheetDimensionId) { var i, j, label, len, len1, ref, ref1, selectedSheet, selectedSheetDimensions, v; label = ""; if (sheetDimensionId > 0) { ref = config.sheets; for (i = 0, len = ref.length; i < len; i++) { v = ref[i]; if (v.id === sheetDimensionId) { selectedSheet = v; } } if (selectedSheet) { ref1 = config.sheetDimensions; for (j = 0, len1 = ref1.length; j < len1; j++) { v = ref1[j]; if (v.id === selectedSheet.sheet_dimension_id) { selectedSheetDimensions = v; } } if (selectedSheetDimensions) { label = selectedSheetDimensions.width + 'x' + selectedSheetDimensions.height + 'x' + selectedSheetDimensions.thick + ' мм'; } } } return label; } getSelectedSheetFullDimensions() { var label; label = "-"; if ((this.selectedSheetData.sheetId > 0) && this.selectedSheetDimension) { label = this.selectedSheetDimension.fullWidth + 'x' + this.selectedSheetDimension.fullHeight + " мм"; } return label; } getSelectedSheetDimensions() { var label; label = "-"; if ((this.selectedSheetData.sheetId > 0) && this.selectedSheetDimension) { label = this.selectedSheetDimension.width + 'x' + this.selectedSheetDimension.height + " мм"; } return label; } getBorderLabel(id, heightId) { var i, j, label, len, len1, ref, ref1, selectedBorder, selectedHeight, v; label = "Не выбрана"; if (id > 0) { ref = config.borders; for (i = 0, len = ref.length; i < len; i++) { v = ref[i]; if (v.id === id) { selectedBorder = v; } } if (selectedBorder) { label = "" + selectedBorder.label; } } if (heightId > 0) { ref1 = config.borderDimensions; for (j = 0, len1 = ref1.length; j < len1; j++) { v = ref1[j]; if (v.id === heightId) { selectedHeight = v; } } if (selectedHeight) { label += ", " + selectedHeight.label + ""; } } else { label += ""; } return label; } checkIfBorderInSheetColor(sheetId, borderId) { var i, label, len, ref, selectedSheet, v; label = ""; if (sheetId > 0) { ref = config.sheets; for (i = 0, len = ref.length; i < len; i++) { v = ref[i]; if (v.id === sheetId) { selectedSheet = v; } } if (selectedSheet) { if ((selectedSheet.default_border_id > 0) && (selectedSheet.default_border_id === borderId)) { label = "(в цвет)"; } } } return label; } selectSheetId(sheet) { this.selectSheetConfigModalData.sheetId = angular.copy(sheet.id); return this.scrollToDefaultBorderId = true; } selectBorderId(id, border) { var selectedBorderHeight, v; this.selectSheetConfigModalData["border" + id + "Id"] = angular.copy(border.id); if (this.selectSheetConfigModalData["border" + id + "Height"] > 0) { selectedBorderHeight = (function() { var i, len, ref, results; ref = border.available_dimensions; results = []; for (i = 0, len = ref.length; i < len; i++) { v = ref[i]; if (v.cut_border_dimension.id === this.selectSheetConfigModalData["border" + id + "Height"]) { results.push(v); } } return results; }).call(this); if (!selectedBorderHeight || !selectedBorderHeight[0]) { return this.selectSheetConfigModalData["border" + id + "Height"] = null; } } } getSelectedSheetData(forceLayoutUpdate = true, skipNextWatchTrigger = false) { var i, len, ref, selectedSheet, v; this.cleanupDetailsBordersIfBorderIsNotSelected(); if (this.selectedSheetData.sheetId > 0) { ref = config.sheets; for (i = 0, len = ref.length; i < len; i++) { v = ref[i]; if (v.id === this.selectedSheetData.sheetId) { selectedSheet = v; } } if (selectedSheet) { this.selectedSheetDimension = angular.copy(((function() { var j, len1, ref1, results; ref1 = config.sheetDimensions; results = []; for (j = 0, len1 = ref1.length; j < len1; j++) { v = ref1[j]; if (v.id === selectedSheet.sheet_dimension_id) { results.push(v); } } return results; })())[0]); this.initSheetDimensions(); return this.onSheetDimensionChange(forceLayoutUpdate, skipNextWatchTrigger); } else { this.selectedSheetData.sheetId = null; this.sheets = angular.copy(this.defaultSheetsData); this.price = 0; return this.notchCount = 0; } } } confirmSheetSelection() { var currentSheetData, forceLayoutUpdate; currentSheetData = angular.copy(this.selectedSheetData); this.selectedSheetData = angular.copy(this.selectSheetConfigModalData); forceLayoutUpdate = true; if (currentSheetData && (this.selectedSheetData.sheetId === currentSheetData.sheetId) && (this.selectedSheetData.border1Id === currentSheetData.border1Id) && (this.selectedSheetData.border2Id === currentSheetData.border2Id) && (this.selectedSheetData.border1Height === currentSheetData.border1Height) && (this.selectedSheetData.border2Height === currentSheetData.border2Height)) { forceLayoutUpdate = false; } this.getSelectedSheetData(forceLayoutUpdate, true); return $timeout(() => { return angular.element(this.selectSheetConfigModalId).modal("hide"); }); } discardBordersSelectFromStep1() { this.activeSheetSelectStep = 4; this.selectSheetConfigModalData.border1Id = null; this.selectSheetConfigModalData.border2Id = null; this.selectSheetConfigModalData.border1Height = null; return this.selectSheetConfigModalData.border2Height = null; } discardBordersSelectFromStep2() { this.activeSheetSelectStep = 4; this.selectSheetConfigModalData.border1Id = null; this.selectSheetConfigModalData.border2Id = null; this.selectSheetConfigModalData.border1Height = null; return this.selectSheetConfigModalData.border2Height = null; } discardBorder2SelectFromStep3() { this.activeSheetSelectStep = 4; this.selectSheetConfigModalData.border2Id = null; return this.selectSheetConfigModalData.border2Height = null; } getOrderCommentWithBr() { var result; result = ""; if (this.orderComment.length > 0) { result = this.orderComment.replace(/<\/?[^>]+>/gi, '').replace(new RegExp('\r?\n', 'g'), '
'); } return result; } isDetailDimensionsFilled(detail) { if (!detail.width || !detail.height || !detail.count || (detail.width < 1) || (detail.height < 1) || !detail.count || (detail.count < 0)) { return; } return true; } openDetailLabelConfigModal(detailId) { var detail, key, ref; this.detailLabelConfigModalData = {}; ref = this.details; for (key in ref) { detail = ref[key]; if (detail.id === detailId) { this.detailLabelConfigModalData = angular.copy(detail); this.detailLabelConfigModalData.uiOrderNum = parseInt(key) + 1; } } angular.element(this.detailLabelConfigModalId).modal("show"); return $timeout(() => { return angular.element(this.detailLabelConfigModalId).on('shown.bs.modal', () => { return $timeout(() => { return angular.element(this.detailLabelConfigModalId + " input.form-control").focus(); }); }); }); } saveDetailLabelConfig() { var detail, i, len, ref; this.unBindWatches(); ref = this.details; for (i = 0, len = ref.length; i < len; i++) { detail = ref[i]; if (detail.id === this.detailLabelConfigModalData.id) { detail.label = this.detailLabelConfigModalData.label; } } this.AutoSaveData(false); this.skipNextWatchTrigger = true; this.bindWatches(); return angular.element(this.detailLabelConfigModalId).modal("hide"); } openDetailCornersConfigModal(detail, detailUIOrderNum) { var cornerPosition, corners, groovePosition, grooves, height, i, j, len, len1, ref, ref1, width; if (!this.isDetailDimensionsFilled(detail)) { return; } width = parseInt(detail.width); height = parseInt(detail.height); corners = this.detailsCorners[detail.id] && this.detailsCorners[detail.id][config.cornerPositions[0].id] ? this.detailsCorners[detail.id] : angular.copy(this.defaultDetailsCorners); grooves = this.detailsGrooves[detail.id] && this.detailsGrooves[detail.id][config.groovePositions[0].id] ? this.detailsGrooves[detail.id] : angular.copy(this.defaultDetailsGrooves); ref = config.cornerPositions; for (i = 0, len = ref.length; i < len; i++) { cornerPosition = ref[i]; corners[cornerPosition.id].maxX = width; corners[cornerPosition.id].maxY = height; corners[cornerPosition.id].maxRadius = Math.min(width, height); if (!corners[cornerPosition.id].x) { corners[cornerPosition.id].x = 0; } else { corners[cornerPosition.id].x = parseInt(corners[cornerPosition.id].x); } if (!corners[cornerPosition.id].y) { corners[cornerPosition.id].y = 0; } else { corners[cornerPosition.id].y = parseInt(corners[cornerPosition.id].y); } if (!corners[cornerPosition.id].radius) { corners[cornerPosition.id].radius = 0; } else { corners[cornerPosition.id].radius = parseInt(corners[cornerPosition.id].radius); } } ref1 = config.groovePositions; for (j = 0, len1 = ref1.length; j < len1; j++) { groovePosition = ref1[j]; grooves[groovePosition.id].minDepth = parseInt(config.grooves.minDepth); grooves[groovePosition.id].maxDepth = parseInt(config.grooves.maxDepth); if (!grooves[groovePosition.id].depth) { grooves[groovePosition.id].depth = grooves[groovePosition.id].minDepth; } else { grooves[groovePosition.id].depth = Math.max(parseInt(grooves[groovePosition.id].minDepth), Math.min(parseInt(grooves[groovePosition.id].depth), grooves[groovePosition.id].maxDepth)); } grooves[groovePosition.id].minWidth = parseInt(config.grooves.minWidth); grooves[groovePosition.id].maxWidth = parseInt(config.grooves.maxWidth); if (!grooves[groovePosition.id].width) { grooves[groovePosition.id].width = grooves[groovePosition.id].minWidth; } else { grooves[groovePosition.id].width = Math.max(parseInt(grooves[groovePosition.id].minWidth), Math.min(parseInt(grooves[groovePosition.id].width), grooves[groovePosition.id].maxWidth)); } grooves[groovePosition.id].minOffset = parseInt(config.grooves.minOffset); if ((groovePosition.id === "left") || (groovePosition.id === "right")) { grooves[groovePosition.id].maxOffset = Math.max(parseInt(grooves[groovePosition.id].minOffset), Math.ceil(width / 2 - parseInt(grooves[groovePosition.id].width) || 0)); } if ((groovePosition.id === "top") || (groovePosition.id === "bottom")) { grooves[groovePosition.id].maxOffset = Math.max(parseInt(grooves[groovePosition.id].minOffset), Math.ceil(height / 2 - parseInt(grooves[groovePosition.id].width) || 0)); } if (!grooves[groovePosition.id].offset) { grooves[groovePosition.id].offset = grooves[groovePosition.id].minOffset; } else { grooves[groovePosition.id].offset = Math.max(parseInt(grooves[groovePosition.id].minOffset), Math.min(parseInt(grooves[groovePosition.id].offset), grooves[groovePosition.id].maxOffset)); } } this.detailCornersConfigModalData = { detail: detail, corners: angular.copy(corners), grooves: angular.copy(grooves), uiOrderNum: detailUIOrderNum, activeTab: (this.detailCornersConfigModalData && this.detailCornersConfigModalData.activeTab ? this.detailCornersConfigModalData.activeTab : "corners") }; this.onDetailCornersConfigChange(); return angular.element(this.detailCornersConfigModalId).modal("show"); } setDetailCornersConfigActiveTab(tab) { return this.detailCornersConfigModalData.activeTab = tab; } saveDetailCornersConfig() { this.detailsCorners[this.detailCornersConfigModalData.detail.id] = angular.copy(this.detailCornersConfigModalData.corners); this.detailsGrooves[this.detailCornersConfigModalData.detail.id] = angular.copy(this.detailCornersConfigModalData.grooves); angular.element(this.detailCornersConfigModalId).modal("hide"); this.unBindWatches(); this.checkForSimilarDetails(); this.calculateLayout(); this.skipNextWatchTrigger = true; return this.bindWatches(); } setDetailCornerConfigValue(cornerPositionId, cornerValueId) { if (this.detailCornersConfigModalData) { if (cornerValueId !== "none") { switch (cornerPositionId) { case "bottomLeft": if (this.detailCornersConfigModalData.grooves["bottom"].enabled || this.detailCornersConfigModalData.grooves["left"].enabled) { cornerValueId = "none"; alert($scope.utilities.getConfigLabel('cornerAdjoiningGrooveExistsWarning').replace("{corner}", "левому нижнему")); } break; case "topLeft": if (this.detailCornersConfigModalData.grooves["top"].enabled || this.detailCornersConfigModalData.grooves["left"].enabled) { cornerValueId = "none"; alert($scope.utilities.getConfigLabel('cornerAdjoiningGrooveExistsWarning').replace("{corner}", "левому верхнему")); } break; case "topRight": if (this.detailCornersConfigModalData.grooves["top"].enabled || this.detailCornersConfigModalData.grooves["right"].enabled) { cornerValueId = "none"; alert($scope.utilities.getConfigLabel('cornerAdjoiningGrooveExistsWarning').replace("{corner}", "правому верхнему")); } break; case "bottomRight": if (this.detailCornersConfigModalData.grooves["bottom"].enabled || this.detailCornersConfigModalData.grooves["right"].enabled) { cornerValueId = "none"; alert($scope.utilities.getConfigLabel('cornerAdjoiningGrooveExistsWarning').replace("{corner}", "правому нижнему")); } } } } return this.detailCornersConfigModalData.corners[cornerPositionId].value = cornerValueId; } onDetailCornersConfigDiagonalCutClick(cornerPositionId) { var groovePosition, i, len, ref; if (this.isDetailCornerConfigDiagonalCheckboxDisabled(cornerPositionId)) { return false; } this.detailCornersConfigModalData.corners[cornerPositionId].diagonalCut = !this.detailCornersConfigModalData.corners[cornerPositionId].diagonalCut; ref = config.groovePositions; for (i = 0, len = ref.length; i < len; i++) { groovePosition = ref[i]; if (this.detailCornersConfigModalData.grooves[groovePosition.id].enabled) { if (this.detailCornersConfigModalData.corners[cornerPositionId].diagonalCut) { this.detailCornersConfigModalData.corners[cornerPositionId].diagonalCut = false; } alert($scope.utilities.getConfigLabel('cornerGrooveCutExistsWarning')); return; } } switch (cornerPositionId) { case "bottomLeft": this.detailCornersConfigModalData.corners["topLeft"].value = "none"; this.detailCornersConfigModalData.corners["topRight"].diagonalCut = false; return this.detailCornersConfigModalData.corners["bottomRight"].value = "none"; case "topLeft": this.detailCornersConfigModalData.corners["topRight"].value = "none"; this.detailCornersConfigModalData.corners["bottomRight"].diagonalCut = false; return this.detailCornersConfigModalData.corners["bottomLeft"].value = "none"; case "topRight": this.detailCornersConfigModalData.corners["bottomRight"].value = "none"; this.detailCornersConfigModalData.corners["topLeft"].value = "none"; return this.detailCornersConfigModalData.corners["bottomLeft"].diagonalCut = false; case "bottomRight": this.detailCornersConfigModalData.corners["bottomLeft"].value = "none"; this.detailCornersConfigModalData.corners["topLeft"].diagonalCut = false; return this.detailCornersConfigModalData.corners["topRight"].value = "none"; } } isDetailCornerConfigValueSelectDisabled(cornerPositionId) { var isDisabled; isDisabled = false; if (this.detailCornersConfigModalData) { switch (cornerPositionId) { case "bottomLeft": if ((this.detailCornersConfigModalData.corners["topLeft"].value === "cut") && this.detailCornersConfigModalData.corners["topLeft"].diagonalCut) { isDisabled = true; } if ((this.detailCornersConfigModalData.corners["bottomRight"].value === "cut") && this.detailCornersConfigModalData.corners["bottomRight"].diagonalCut) { isDisabled = true; } break; case "topLeft": if ((this.detailCornersConfigModalData.corners["topRight"].value === "cut") && this.detailCornersConfigModalData.corners["topRight"].diagonalCut) { isDisabled = true; } if ((this.detailCornersConfigModalData.corners["bottomLeft"].value === "cut") && this.detailCornersConfigModalData.corners["bottomLeft"].diagonalCut) { isDisabled = true; } break; case "topRight": if ((this.detailCornersConfigModalData.corners["bottomRight"].value === "cut") && this.detailCornersConfigModalData.corners["bottomRight"].diagonalCut) { isDisabled = true; } if ((this.detailCornersConfigModalData.corners["topLeft"].value === "cut") && this.detailCornersConfigModalData.corners["topLeft"].diagonalCut) { isDisabled = true; } break; case "bottomRight": if ((this.detailCornersConfigModalData.corners["bottomLeft"].value === "cut") && this.detailCornersConfigModalData.corners["bottomLeft"].diagonalCut) { isDisabled = true; } if ((this.detailCornersConfigModalData.corners["topRight"].value === "cut") && this.detailCornersConfigModalData.corners["topRight"].diagonalCut) { isDisabled = true; } } } return isDisabled; } isDetailCornerConfigInputDisabled(cornerPositionId) { var isDisabled; isDisabled = false; if (this.detailCornersConfigModalData) { switch (cornerPositionId) { case "bottomLeft": if ((this.detailCornersConfigModalData.corners["bottomLeft"].value === "cut") && this.detailCornersConfigModalData.corners["bottomLeft"].diagonalCut) { isDisabled = true; } break; case "topLeft": if ((this.detailCornersConfigModalData.corners["topLeft"].value === "cut") && this.detailCornersConfigModalData.corners["topLeft"].diagonalCut) { isDisabled = true; } break; case "topRight": if ((this.detailCornersConfigModalData.corners["topRight"].value === "cut") && this.detailCornersConfigModalData.corners["topRight"].diagonalCut) { isDisabled = true; } break; case "bottomRight": if ((this.detailCornersConfigModalData.corners["bottomRight"].value === "cut") && this.detailCornersConfigModalData.corners["bottomRight"].diagonalCut) { isDisabled = true; } } } return isDisabled; } isDetailCornerConfigDiagonalCheckboxDisabled(cornerPositionId) { var isDisabled; isDisabled = false; if (this.detailCornersConfigModalData) { switch (cornerPositionId) { case "bottomLeft": if ((this.detailCornersConfigModalData.corners["topRight"].value === "cut") && this.detailCornersConfigModalData.corners["topRight"].diagonalCut) { isDisabled = true; } break; case "topLeft": if ((this.detailCornersConfigModalData.corners["bottomRight"].value === "cut") && this.detailCornersConfigModalData.corners["bottomRight"].diagonalCut) { isDisabled = true; } break; case "topRight": if ((this.detailCornersConfigModalData.corners["bottomLeft"].value === "cut") && this.detailCornersConfigModalData.corners["bottomLeft"].diagonalCut) { isDisabled = true; } break; case "bottomRight": if ((this.detailCornersConfigModalData.corners["topLeft"].value === "cut") && this.detailCornersConfigModalData.corners["topLeft"].diagonalCut) { isDisabled = true; } } } return isDisabled; } isDetailGrooveConfigCheckboxDisabled(groovePositionId) { var isDisabled; isDisabled = false; if (this.detailCornersConfigModalData) { switch (groovePositionId) { case "top": if (this.detailCornersConfigModalData.grooves["right"].enabled || this.detailCornersConfigModalData.grooves["left"].enabled) { isDisabled = true; } break; case "right": if (this.detailCornersConfigModalData.grooves["top"].enabled || this.detailCornersConfigModalData.grooves["bottom"].enabled) { isDisabled = true; } break; case "bottom": if (this.detailCornersConfigModalData.grooves["right"].enabled || this.detailCornersConfigModalData.grooves["left"].enabled) { isDisabled = true; } break; case "left": if (this.detailCornersConfigModalData.grooves["top"].enabled || this.detailCornersConfigModalData.grooves["bottom"].enabled) { isDisabled = true; } } } return isDisabled; } detailCornersConfigModalDataWatches() { $scope.$watch('cut.detailCornersConfigModalData.corners', $scope.cut.onDetailCornersConfigChange, true); return $scope.$watch('cut.detailCornersConfigModalData.grooves', $scope.cut.onDetailCornersConfigChange, true); } onDetailCornersConfigChange() { var cornerPosition, groovePosition, i, j, len, len1, ref, ref1, results; if (!this.detailCornersConfigModalData) { return; } ref = config.cornerPositions; for (i = 0, len = ref.length; i < len; i++) { cornerPosition = ref[i]; if (!this.detailCornersConfigModalData.corners[cornerPosition.id].x || (parseInt(this.detailCornersConfigModalData.corners[cornerPosition.id].x) < 0)) { this.detailCornersConfigModalData.corners[cornerPosition.id].x = 0; } if (parseInt(this.detailCornersConfigModalData.corners[cornerPosition.id].x) > this.detailCornersConfigModalData.corners[cornerPosition.id].maxX) { this.detailCornersConfigModalData.corners[cornerPosition.id].x = this.detailCornersConfigModalData.corners[cornerPosition.id].maxX; } if (!this.detailCornersConfigModalData.corners[cornerPosition.id].y || (parseInt(this.detailCornersConfigModalData.corners[cornerPosition.id].y) < 0)) { this.detailCornersConfigModalData.corners[cornerPosition.id].y = 0; } if (parseInt(this.detailCornersConfigModalData.corners[cornerPosition.id].y) > this.detailCornersConfigModalData.corners[cornerPosition.id].maxY) { this.detailCornersConfigModalData.corners[cornerPosition.id].y = this.detailCornersConfigModalData.corners[cornerPosition.id].maxY; } if (!this.detailCornersConfigModalData.corners[cornerPosition.id].radius || (parseInt(this.detailCornersConfigModalData.corners[cornerPosition.id].radius) < 0)) { this.detailCornersConfigModalData.corners[cornerPosition.id].radius = 0; } if (parseInt(this.detailCornersConfigModalData.corners[cornerPosition.id].radius) > this.detailCornersConfigModalData.corners[cornerPosition.id].maxRadius) { this.detailCornersConfigModalData.corners[cornerPosition.id].radius = this.detailCornersConfigModalData.corners[cornerPosition.id].maxRadius; } } ref1 = config.groovePositions; results = []; for (j = 0, len1 = ref1.length; j < len1; j++) { groovePosition = ref1[j]; if (!this.detailCornersConfigModalData.grooves[groovePosition.id].depth || (parseInt(this.detailCornersConfigModalData.grooves[groovePosition.id].depth) < 0)) { this.detailCornersConfigModalData.grooves[groovePosition.id].depth = this.detailCornersConfigModalData.grooves[groovePosition.id].minDepth; } if (parseInt(this.detailCornersConfigModalData.grooves[groovePosition.id].depth) > this.detailCornersConfigModalData.grooves[groovePosition.id].maxDepth) { this.detailCornersConfigModalData.grooves[groovePosition.id].depth = this.detailCornersConfigModalData.grooves[groovePosition.id].maxDepth; } if (parseInt(this.detailCornersConfigModalData.grooves[groovePosition.id].depth) < this.detailCornersConfigModalData.grooves[groovePosition.id].minDepth) { this.detailCornersConfigModalData.grooves[groovePosition.id].depth = this.detailCornersConfigModalData.grooves[groovePosition.id].minDepth; } if (!this.detailCornersConfigModalData.grooves[groovePosition.id].width || (parseInt(this.detailCornersConfigModalData.grooves[groovePosition.id].width) < 0)) { this.detailCornersConfigModalData.grooves[groovePosition.id].width = this.detailCornersConfigModalData.grooves[groovePosition.id].minWidth; } if (parseInt(this.detailCornersConfigModalData.grooves[groovePosition.id].width) > this.detailCornersConfigModalData.grooves[groovePosition.id].maxWidth) { this.detailCornersConfigModalData.grooves[groovePosition.id].width = this.detailCornersConfigModalData.grooves[groovePosition.id].maxWidth; } if (parseInt(this.detailCornersConfigModalData.grooves[groovePosition.id].width) < this.detailCornersConfigModalData.grooves[groovePosition.id].minWidth) { this.detailCornersConfigModalData.grooves[groovePosition.id].width = this.detailCornersConfigModalData.grooves[groovePosition.id].minWidth; } if ((groovePosition.id === "left") || (groovePosition.id === "right")) { this.detailCornersConfigModalData.grooves[groovePosition.id].maxOffset = Math.max(parseInt(this.detailCornersConfigModalData.grooves[groovePosition.id].minOffset), Math.ceil(this.detailCornersConfigModalData.detail.width / 2 - parseInt(this.detailCornersConfigModalData.grooves[groovePosition.id].width) || 0)); } if ((groovePosition.id === "top") || (groovePosition.id === "bottom")) { this.detailCornersConfigModalData.grooves[groovePosition.id].maxOffset = Math.max(parseInt(this.detailCornersConfigModalData.grooves[groovePosition.id].minOffset), Math.ceil(this.detailCornersConfigModalData.detail.height / 2 - parseInt(this.detailCornersConfigModalData.grooves[groovePosition.id].width) || 0)); } if (!this.detailCornersConfigModalData.grooves[groovePosition.id].offset || (parseInt(this.detailCornersConfigModalData.grooves[groovePosition.id].offset) < 0)) { this.detailCornersConfigModalData.grooves[groovePosition.id].offset = this.detailCornersConfigModalData.grooves[groovePosition.id].minOffset; } if (parseInt(this.detailCornersConfigModalData.grooves[groovePosition.id].offset) > this.detailCornersConfigModalData.grooves[groovePosition.id].maxOffset) { this.detailCornersConfigModalData.grooves[groovePosition.id].offset = this.detailCornersConfigModalData.grooves[groovePosition.id].maxOffset; } if (parseInt(this.detailCornersConfigModalData.grooves[groovePosition.id].offset) < this.detailCornersConfigModalData.grooves[groovePosition.id].minOffset) { results.push(this.detailCornersConfigModalData.grooves[groovePosition.id].offset = this.detailCornersConfigModalData.grooves[groovePosition.id].minOffset); } else { results.push(void 0); } } return results; } getDetailCornersText(detail) { var cornerPosition, corners, i, label, len, ref; label = []; if (!this.isDetailDimensionsFilled(detail)) { return; } corners = this.detailsCorners[detail.id] && this.detailsCorners[detail.id][config.cornerPositions[0].id] ? this.detailsCorners[detail.id] : this.defaultDetailsCorners; ref = config.cornerPositions; for (i = 0, len = ref.length; i < len; i++) { cornerPosition = ref[i]; if (corners[cornerPosition.id].value === "radius") { label.push(cornerPosition.shortLabel + " - скругление " + corners[cornerPosition.id].radius + 'мм'); } if (corners[cornerPosition.id].value === "cut") { if (corners[cornerPosition.id].diagonalCut) { label.push(cornerPosition.shortLabel + " - диагональный срез"); } else { label.push(cornerPosition.shortLabel + " - срез " + corners[cornerPosition.id].x + "x" + corners[cornerPosition.id].y + " мм"); } } } if (label.length > 0) { label = '
Параметры углов: ' + label.join(", ") + '
'; } else { label = ""; } return label; } getDetailCornersConfigClass() { var cornerPosition, corners, cssClass, i, len, ref; cssClass = []; if (this.detailCornersConfigModalData) { corners = this.detailCornersConfigModalData.corners; ref = config.cornerPositions; for (i = 0, len = ref.length; i < len; i++) { cornerPosition = ref[i]; if (corners[cornerPosition.id].value === "radius") { cssClass.push(cornerPosition.id + "Radius"); } if (corners[cornerPosition.id].value === "cut") { if (corners[cornerPosition.id].diagonalCut) { cssClass.push(cornerPosition.id + "DiagonalCut"); } else { cssClass.push(cornerPosition.id + "Cut"); } } } } return cssClass.join(" "); } checkDetailCornersLimits(detail) { var cornerPosition, corners, height, i, len, ref, width; if (!this.isDetailDimensionsFilled(detail)) { return; } width = parseInt(detail.width); height = parseInt(detail.height); corners = this.detailsCorners[detail.id] && this.detailsCorners[detail.id][config.cornerPositions[0].id] ? this.detailsCorners[detail.id] : angular.copy(this.defaultDetailsCorners); ref = config.cornerPositions; for (i = 0, len = ref.length; i < len; i++) { cornerPosition = ref[i]; corners[cornerPosition.id].maxX = width; corners[cornerPosition.id].maxY = height; corners[cornerPosition.id].maxRadius = Math.min(width, height); if (!corners[cornerPosition.id].x) { corners[cornerPosition.id].x = 0; } else { corners[cornerPosition.id].x = Math.min(parseInt(corners[cornerPosition.id].x), corners[cornerPosition.id].maxX); } if (!corners[cornerPosition.id].y) { corners[cornerPosition.id].y = 0; } else { corners[cornerPosition.id].y = Math.min(parseInt(corners[cornerPosition.id].y), corners[cornerPosition.id].maxY); } if (!corners[cornerPosition.id].radius) { corners[cornerPosition.id].radius = 0; } else { corners[cornerPosition.id].radius = Math.min(parseInt(corners[cornerPosition.id].radius), corners[cornerPosition.id].maxRadius); } } return this.detailsCorners[detail.id] = corners; } checkDetailsCornersLimits() { var detail, i, len, ref, results; if (this.details && (this.details.length > 0)) { ref = this.details; results = []; for (i = 0, len = ref.length; i < len; i++) { detail = ref[i]; results.push(this.checkDetailCornersLimits(detail)); } return results; } } getDetailGroovesText(detail) { var groovePosition, grooves, i, label, len, ref; label = []; if (!this.isDetailDimensionsFilled(detail)) { return; } grooves = this.detailsGrooves[detail.id] && this.detailsGrooves[detail.id][config.groovePositions[0].id] ? this.detailsGrooves[detail.id] : angular.copy(this.defaultDetailsGrooves); ref = config.groovePositions; for (i = 0, len = ref.length; i < len; i++) { groovePosition = ref[i]; if (grooves[groovePosition.id].enabled) { label.push(groovePosition.label.toLowerCase() + " - отступ от края детали " + grooves[groovePosition.id].offset + "мм, глубина пропила " + grooves[groovePosition.id].depth + "мм, ширина пропила " + grooves[groovePosition.id].width + "мм"); } } if (label.length > 0) { label = '
Параметры паз' + (label.length > 1 ? 'ов' : 'а') + ': ' + label.join(", ") + '
'; } else { label = ""; } return label; } getDetailGroovesConfigClass() { var cssClass, groovePosition, grooves, i, len, ref; cssClass = []; if (this.detailCornersConfigModalData) { grooves = this.detailCornersConfigModalData.grooves; ref = config.groovePositions; for (i = 0, len = ref.length; i < len; i++) { groovePosition = ref[i]; if (grooves[groovePosition.id].enabled) { cssClass.push(groovePosition.id + "Groove"); } } } return cssClass.join(" "); } checkDetailGroovesLimits(detail) { var groovePosition, grooves, height, i, len, ref, width; if (!this.isDetailDimensionsFilled(detail)) { return; } width = parseInt(detail.width); height = parseInt(detail.height); grooves = this.detailsGrooves[detail.id] && this.detailsGrooves[detail.id][config.groovePositions[0].id] ? this.detailsGrooves[detail.id] : angular.copy(this.defaultDetailsGrooves); ref = config.groovePositions; for (i = 0, len = ref.length; i < len; i++) { groovePosition = ref[i]; if ((groovePosition.id === "left") || (groovePosition.id === "right")) { grooves[groovePosition.id].maxOffset = Math.max(parseInt(grooves[groovePosition.id].minOffset), Math.ceil(width / 2 - parseInt(grooves[groovePosition.id].width) || 0)); } if ((groovePosition.id === "top") || (groovePosition.id === "bottom")) { grooves[groovePosition.id].maxOffset = Math.max(parseInt(grooves[groovePosition.id].minOffset), Math.ceil(height / 2 - parseInt(grooves[groovePosition.id].width) || 0)); } if (!grooves[groovePosition.id].offset) { grooves[groovePosition.id].offset = grooves[groovePosition.id].minOffset; } else { grooves[groovePosition.id].offset = Math.max(parseInt(grooves[groovePosition.id].minOffset), Math.min(parseInt(grooves[groovePosition.id].offset), grooves[groovePosition.id].maxOffset)); } if (!grooves[groovePosition.id].depth) { grooves[groovePosition.id].depth = grooves[groovePosition.id].minDepth; } else { grooves[groovePosition.id].depth = Math.max(parseInt(grooves[groovePosition.id].minDepth), Math.min(parseInt(grooves[groovePosition.id].depth), grooves[groovePosition.id].maxDepth)); } if (!grooves[groovePosition.id].width) { grooves[groovePosition.id].width = grooves[groovePosition.id].minWidth; } else { grooves[groovePosition.id].width = Math.max(parseInt(grooves[groovePosition.id].minWidth), Math.min(parseInt(grooves[groovePosition.id].width), grooves[groovePosition.id].maxWidth)); } } return this.detailsGrooves[detail.id] = grooves; } checkDetailsGroovesLimits() { var detail, i, len, ref, results; if (this.details && (this.details.length > 0)) { ref = this.details; results = []; for (i = 0, len = ref.length; i < len; i++) { detail = ref[i]; results.push(this.checkDetailGroovesLimits(detail)); } return results; } } onDetailGroovesConfigGrooveEnabledClick(groovePositionId) { var cornerPosition, i, isEnabled, len, ref; if (this.detailCornersConfigModalData) { if (this.isDetailGrooveConfigCheckboxDisabled(groovePositionId)) { return false; } this.detailCornersConfigModalData.grooves[groovePositionId].enabled = !this.detailCornersConfigModalData.grooves[groovePositionId].enabled; isEnabled = this.detailCornersConfigModalData.grooves[groovePositionId].enabled; if (isEnabled) { ref = config.cornerPositions; for (i = 0, len = ref.length; i < len; i++) { cornerPosition = ref[i]; if ((this.detailCornersConfigModalData.corners[cornerPosition.id].value === "cut") && this.detailCornersConfigModalData.corners[cornerPosition.id].diagonalCut) { alert($scope.utilities.getConfigLabel('grooveDiagonalCutExistsWarning')); isEnabled = false; } } if (isEnabled) { switch (groovePositionId) { case "top": if ((this.detailCornersConfigModalData.corners["topRight"].value !== "none") || (this.detailCornersConfigModalData.corners["topLeft"].value !== "none")) { alert($scope.utilities.getConfigLabel('grooveAdjoiningCutExistsWarning').replace("{side}", "верхней")); isEnabled = false; } break; case "right": if ((this.detailCornersConfigModalData.corners["topRight"].value !== "none") || (this.detailCornersConfigModalData.corners["bottomRight"].value !== "none")) { alert($scope.utilities.getConfigLabel('grooveAdjoiningCutExistsWarning').replace("{side}", "правой")); isEnabled = false; } break; case "bottom": if ((this.detailCornersConfigModalData.corners["bottomRight"].value !== "none") || (this.detailCornersConfigModalData.corners["bottomLeft"].value !== "none")) { alert($scope.utilities.getConfigLabel('grooveAdjoiningCutExistsWarning').replace("{side}", "нижней")); isEnabled = false; } break; case "left": if ((this.detailCornersConfigModalData.corners["topLeft"].value !== "none") || (this.detailCornersConfigModalData.corners["bottomLeft"].value !== "none")) { alert($scope.utilities.getConfigLabel('grooveAdjoiningCutExistsWarning').replace("{side}", "левой")); isEnabled = false; } } } return this.detailCornersConfigModalData.grooves[groovePositionId].enabled = angular.copy(isEnabled); } } } setCreatedForManagerId(managerId) { return this.createdForManagerId = angular.copy(managerId); } }; cutApp.prototype.defaultSheetsData = [ { id: 1, details: [{}] } ]; cutApp.prototype.defaultSelectedSheetData = { sheetId: null, border1Id: null, border1Height: null, border1Count: 0, border2Id: null, border2Height: null, border2Count: 0 }; cutApp.prototype.price = 0; cutApp.prototype.notchCount = 0; //длина пропила cutApp.prototype.grooveCount = ""; //длина пазов cutApp.prototype.faceCount = 0; cutApp.prototype.calculateLayoutPromise = null; cutApp.prototype.calculateLayoutAjarRequestPromise = null; cutApp.calculateLayoutAjarRequestTimeoutPromise = null; cutApp.prototype.skipNextWatchTrigger = false; cutApp.prototype.orderInfoSaveTimeoutPromise = null; cutApp.prototype.orderInfoSaveTimeout = 1500; cutApp.prototype.notifyModalId = "#notifyModal"; cutApp.prototype.notifySendOrderEmailModalId = "#notifySendOrderEmailModal"; cutApp.prototype.selectSheetConfigModalId = "#selectSheetConfigModal"; cutApp.prototype.confirmCleanupModalId = "#confirmCleanupModal"; cutApp.prototype.fullOrderCleanup = false; cutApp.prototype.activeSheetSelectStep = 1; cutApp.prototype.selectSheetConfigModalData = {}; cutApp.prototype.detailCornersConfigModalId = "#detailCornersConfigModal"; cutApp.prototype.detailLabelConfigModalId = "#detailLabelConfigModal"; cutApp.prototype.confirmStartCutOptimizeModalId = "#confirmStartCutOptimizeModal"; cutApp.prototype.isSelectSheetConfigModalTriggered = false; cutApp.prototype.isSendOrderEmailSubmitting = false; cutApp.prototype.isSubmitting = false; cutApp.prototype.orderName = ""; cutApp.prototype.orderEmail = ""; cutApp.prototype.orderPhone = ""; cutApp.prototype.orderAddress = ""; cutApp.prototype.mergeSimilarDetails = true; cutApp.prototype.packCuttingsToOrder = false; cutApp.prototype.searchFilters = { 1: "", 2: "", 3: "" }; return cutApp; }).call(this); $scope.config = config; $scope.utilities = new UtilitiesClass(config, $filter, $timeout); $scope.cut = new cutApp(); $scope.cut.bindWatches(); $scope.cut.bindOrderInfoWatches(); $scope.cut.detailCornersConfigModalDataWatches(); return $scope.Math = window.Math; } ]);