2366 lines
110 KiB
JavaScript
2366 lines
110 KiB
JavaScript
supersamApp.controller('FasadController', [
|
||
'$scope',
|
||
'$http',
|
||
'$timeout',
|
||
'localStorageService',
|
||
'$filter',
|
||
'config',
|
||
function($scope,
|
||
$http,
|
||
$timeout,
|
||
localStorageService,
|
||
$filter,
|
||
config) {
|
||
var fasadApp;
|
||
fasadApp = (function() {
|
||
class fasadApp {
|
||
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("AutoSavedFasad");
|
||
} 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_fasad_results && order.order_fasad_results.notchCount) {
|
||
this.sheets = order.order_fasad_results.sheets ? angular.copy(order.order_fasad_results.sheets) : angular.copy(this.defaultSheetsData);
|
||
this.price = order.order_fasad_results.price ? angular.copy(order.order_fasad_results.price) : 0;
|
||
this.notchCount = order.order_fasad_results.notchCount ? angular.copy(order.order_fasad_results.notchCount) : 0;
|
||
return this.grooveCount = order.order_fasad_results.grooveCount ? angular.copy(order.order_fasad_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("AutoSavedFasad", "Автоматическое сохранение", 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("AutoSavedFasad");
|
||
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.fasadUrl,
|
||
data: dataToSend
|
||
}).then((response) => {
|
||
var data;
|
||
this.isSubmitting = false;
|
||
this.clearCalculateLayoutAjarRequestPromise();
|
||
$timeout(() => {
|
||
return angular.element(this.confirmStartFasadOptimizeModalId).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.confirmStartFasadOptimizeModalId).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('fasad.details', $scope.fasad.onDetailChange, true);
|
||
}
|
||
|
||
unBindWatches() {
|
||
if (typeof this.detailsWatcher === "function") {
|
||
return this.detailsWatcher();
|
||
}
|
||
}
|
||
|
||
printOrder(printType) {
|
||
if (config.additionalActionsAllowed) {
|
||
if (!config.savedOrderData) {
|
||
return this.sendOrderEmailNotify((printType === "Fasad" ? "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("orderSendManagerFasadIsActive");
|
||
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.fasadUrl,
|
||
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('fasad.orderName', $scope.fasad.onOrderInfoChange, true);
|
||
$scope.$watch('fasad.orderEmail', $scope.fasad.onOrderInfoChange, true);
|
||
$scope.$watch('fasad.orderPhone', $scope.fasad.onOrderInfoChange, true);
|
||
$scope.$watch('fasad.orderAddress', $scope.fasad.onOrderInfoChange, true);
|
||
return $scope.$watch('fasad.orderComment', $scope.fasad.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 = "<span>Не выбрана</span>";
|
||
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 = "<span>" + 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 += ", </span><span class='no-wrap'>" + selectedHeight.label + "</span>";
|
||
}
|
||
} else {
|
||
label += "</span>";
|
||
}
|
||
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.fasad_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'), '<br />');
|
||
}
|
||
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('fasad.detailCornersConfigModalData.corners', $scope.fasad.onDetailCornersConfigChange, true);
|
||
return $scope.$watch('fasad.detailCornersConfigModalData.grooves', $scope.fasad.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 = '<div class="detail-borders-text"><b>Параметры углов:</b> ' + label.join(", ") + '</div>';
|
||
} 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 = '<div class="detail-borders-text"><b>Параметры паз' + (label.length > 1 ? 'ов' : 'а') + ':</b> ' + label.join(", ") + '</div>';
|
||
} 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);
|
||
}
|
||
|
||
};
|
||
|
||
fasadApp.prototype.defaultSheetsData = [
|
||
{
|
||
id: 1,
|
||
details: [{}]
|
||
}
|
||
];
|
||
|
||
fasadApp.prototype.defaultSelectedSheetData = {
|
||
sheetId: null,
|
||
border1Id: null,
|
||
border1Height: null,
|
||
border1Count: 0,
|
||
border2Id: null,
|
||
border2Height: null,
|
||
border2Count: 0
|
||
};
|
||
|
||
fasadApp.prototype.price = 0;
|
||
|
||
fasadApp.prototype.notchCount = 0; //длина пропила
|
||
|
||
fasadApp.prototype.grooveCount = ""; //длина пазов
|
||
|
||
fasadApp.prototype.faceCount = 0;
|
||
|
||
fasadApp.prototype.calculateLayoutPromise = null;
|
||
|
||
fasadApp.prototype.calculateLayoutAjarRequestPromise = null;
|
||
|
||
fasadApp.calculateLayoutAjarRequestTimeoutPromise = null;
|
||
|
||
fasadApp.prototype.skipNextWatchTrigger = false;
|
||
|
||
fasadApp.prototype.orderInfoSaveTimeoutPromise = null;
|
||
|
||
fasadApp.prototype.orderInfoSaveTimeout = 1500;
|
||
|
||
fasadApp.prototype.notifyModalId = "#notifyModal";
|
||
|
||
fasadApp.prototype.notifySendOrderEmailModalId = "#notifySendOrderEmailModal";
|
||
|
||
fasadApp.prototype.selectSheetConfigModalId = "#selectSheetConfigModal";
|
||
|
||
fasadApp.prototype.confirmCleanupModalId = "#confirmCleanupModal";
|
||
|
||
fasadApp.prototype.fullOrderCleanup = false;
|
||
|
||
fasadApp.prototype.activeSheetSelectStep = 1;
|
||
|
||
fasadApp.prototype.selectSheetConfigModalData = {};
|
||
|
||
fasadApp.prototype.detailCornersConfigModalId = "#detailCornersConfigModal";
|
||
|
||
fasadApp.prototype.detailLabelConfigModalId = "#detailLabelConfigModal";
|
||
|
||
fasadApp.prototype.confirmStartFasadOptimizeModalId = "#confirmStartFasadOptimizeModal";
|
||
|
||
fasadApp.prototype.isSelectSheetConfigModalTriggered = false;
|
||
|
||
fasadApp.prototype.isSendOrderEmailSubmitting = false;
|
||
|
||
fasadApp.prototype.isSubmitting = false;
|
||
|
||
fasadApp.prototype.orderName = "";
|
||
|
||
fasadApp.prototype.orderEmail = "";
|
||
|
||
fasadApp.prototype.orderPhone = "";
|
||
|
||
fasadApp.prototype.orderAddress = "";
|
||
|
||
fasadApp.prototype.mergeSimilarDetails = true;
|
||
|
||
fasadApp.prototype.packCuttingsToOrder = false;
|
||
|
||
fasadApp.prototype.searchFilters = {
|
||
1: "",
|
||
2: "",
|
||
3: ""
|
||
};
|
||
|
||
return fasadApp;
|
||
|
||
}).call(this);
|
||
$scope.config = config;
|
||
$scope.utilities = new UtilitiesClass(config,
|
||
$filter,
|
||
$timeout);
|
||
$scope.fasad = new fasadApp();
|
||
$scope.fasad.bindWatches();
|
||
$scope.fasad.bindOrderInfoWatches();
|
||
$scope.fasad.detailCornersConfigModalDataWatches();
|
||
return $scope.Math = window.Math;
|
||
}
|
||
]);
|