| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627 | BemsWebApplication.FloorPlan = function (params, viewInfo) {    "use strict";    var FloorInPopUpForSearch = ko.observableArray(),        FloorInPopUp = ko.observableArray();    var imagefileUrl = ko.observable(), uploadedFileInfo = {}, dropZone = null;    var deferredForSearch = new $.Deferred();    var floorplan = ko.observableArray();    var isImageUpload = ko.observableArray();    var enableDataBoxInPopup = ko.observable(false);    var visibleEditButton = ko.observable(false);   // 수정 버튼 활성화 여부 플래그    var hasnotModificationPermission = ko.observable(true); // 수정버튼 비활성화 플래그    var visibleDeleteButton = ko.observable(false); // 삭제버튼 활성화 플래그    var visibleCancelButton = ko.observable(false); // 취소버튼 활성화 플래그    var isEditModeInPopup = ko.observable();   // 저장버튼 활성화 플래그    var isNotModifyMode = ko.observable(false);     // 저장버튼 비활성화 플래그    var backupDataViewModel = null;    var backup_data;    var floorAll;    var endpointSelector = "";    if (BemsWebApplication.config.mode == "production") {        endpointSelector = new DevExpress.EndpointSelector(BemsWebApplication.config.endpoints).config.db.production;    } else {        endpointSelector = new DevExpress.EndpointSelector(BemsWebApplication.config.endpoints).config.db.local;    }    var floorplanPopupToolbarItems = [            { location: 'before', text: '평면도 등록' },            { location: 'after', widget: 'button', options: { text: $G('edit'), icon: 'edit', visible: visibleEditButton, disabled: hasnotModificationPermission, clickAction: handlePopupButtonEdit } },            { location: 'after', widget: 'button', options: { text: $G('delete'), type: 'danger', icon: 'remove', visible: visibleDeleteButton, disabled: hasnotModificationPermission, clickAction: handlePopupButtonDelete } },            { location: 'after', widget: 'button', options: { text: $G('cancel'), icon: 'cancel', visible: visibleCancelButton, clickAction: handlePopupButtonCancel } },            { location: 'after', widget: 'button', options: { text: $G('save'), icon: 'save', visible: isEditModeInPopup, disabled: isNotModifyMode, clickAction: handlePopupButtonSave } },            { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: PopupButtonClose } }    ];    function setupDropZone(dataViewModel) {        var timer = null;        viewModel.isEditModeInPopup.subscribe(function (value) {            if (value) {                if (timer) {                    clearInterval(timer);                }                timer = setInterval(function () {                    if ($('#FloorPlanDropZone').length) {                        if (_.isNull(dropZone)) {                            dropZone = BWA.DropZone.create({                                id: '#FloorPlanDropZone',                                categoryId: $Code.FileCategory.FLOOR,                                uploadedFileInfo: uploadedFileInfo,                                handleRemoveBeforePromise: function () {                                    var keys = BWA.db.extractKeysObject('BemsFloorPlan', dataViewModel);                                    utils.toast.show($G('successDatabaseInsertionMsg'));                                    PopupButtonClose();                                    return BWA.db.BemsFloorPlan.update(keys, { ImageFileId: null });                                },                                handleSuccess: function (fileInfo) {                                    if (uploadedFileInfo.FileId) {                                        dataViewModel.ImageFileId(uploadedFileInfo.FileId);                                        var keys = BWA.db.extractKeysObject('BemsFloorPlan', dataViewModel);                                        var insert_data = {                                            SiteId: BWA.UserInfo.SiteId(),                                            FloorId: backup_data.FloorId,                                            Name: dataViewModel.Name(),                                            ImageFileId: uploadedFileInfo.FileId                                        };                                        if (keys.Name != null) {                                            //update(insert_data, tmp_data);                                            BemsWebApplication.db['BemsFloorPlan'].remove(backup_data).done(function () {                                                var store = new DevExpress.data.ODataStore({                                                    url: endpointSelector + "/BemsFloorPlan",                                                    key: ["SiteId", "Name"],                                                    keyType: {                                                        SiteId: "Int32", Name: "String"                                                    }                                                });                                                store.insert(insert_data).done(function (key, result) {                                                    utils.toast.show($G('successDatabaseInsertionMsg'));                                                    PopupButtonClose();                                                })                                                .fail(function (error) {                                                    utils.toast.show(error);                                                });                                                viewModel.refreshList();                                                setTimeout(function () {                                                    GetGridData();                                                }, 100);                                            });                                                                                 }                                    }                                },                                handleRemovedFile: function () {                                    dataViewModel.ImageFileId(null);                                }                            });                        }                    }                }, 100);            }                        else {                if (timer) {                    clearInterval(timer);                    timer = null;                }                dropZone = null;            }        });    }    function update(postData, backupData) {        var floorplanDataModel = new BemsWebApplication.BemsFloorPlanViewModel();        if (postData.Name == null || postData.FloorId == null) {            utils.toast.show("층 정보가 입력되지 않았습니다.", 'error');            return;        }        backup_data = {            SiteId: BWA.UserInfo.SiteId(),            FloorId: backupData.FloorId,            Name: backupData.Name,            ImageFileId: backupData.ImageFileId        };        var temp = {            SiteId: BWA.UserInfo.SiteId(),            FileId: backupData.ImageFileId        }        if (backupData.ImageFileId != null) {            BWA.db.CmFile.byKey(temp).done(function (data) {                dropZone.removeFile(data);            });        }        dropZone.processQueue();    }    function insert(postData) {        if (postData.Name == null || postData.FloorId == null) {            utils.toast.show("층 정보가 입력되지 않았습니다.", 'error');            return;        }        backup_data = {            SiteId: BWA.UserInfo.SiteId(),            FloorId: viewModel.dataModel.FloorId(),            Name: viewModel.dataModel.Name(),            ImageFileId: null        };        if (_.isNull(dropZone) === false) { //추가            if (viewModel.dataModel.ImageFileId() == null) {                dropZone.processQueue();            }        }        var store = new DevExpress.data.ODataStore({            url: endpointSelector + "/BemsFloorPlan",            key: ["SiteId", "Name"],            keyType: {                SiteId: "Int32", Name: "String"            }        });        store.insert(postData).done(function (key, result) {            utils.toast.show($G('successDatabaseInsertionMsg'));            PopupButtonClose();        })        .fail(function (error) {            utils.toast.show(error);        });    }    //저장버튼    function handlePopupButtonSave() {        var dataViewModel = viewModel.dataModel;        var postViewModel = new BemsWebApplication.BemsFloorPlanViewModel();        postViewModel.SiteId(dataViewModel.SiteId());        postViewModel.FloorId(dataViewModel.FloorId());        postViewModel.Name(dataViewModel.Name());        postViewModel.ImageFileId(dataViewModel.ImageFileId());        var postData = postViewModel.toJS();        if (viewModel.isNewInPopup())            insert(postData);        else            update(postData, backupDataViewModel);        //예외 처리(ImageFileId가 기존과 수정버전 모두 null인 경우)        if (dataViewModel.ImageFileId() == null && backupDataViewModel.ImageFileId == null) {            utils.toast.show($G('successDatabaseInsertionMsg'));            PopupButtonClose();        }        //DB 저장에 시간이 걸리기때문에 딜레이 후 데이터 로드        setTimeout(function () {            UpdateSelectBoxInPopUp();            GetGridData();        }, 100);    }    function getBackupDataViewModel(model) {        var object = {};        $.each(model, function (name, value) {            if (ko.isObservable(value)) {                object[name] = value();            }        });        return object;    }    function restoreDataViewModelFromBackup(model, backupModel) {        $.each(backupModel, function (name, value) {            model[name](value);        });    }    // 수정버튼 클릭    function handlePopupButtonEdit() {        viewModel.isNewInPopup(false);        viewModel.visibleEditButton(false);        viewModel.visibleDeleteButton(false);        viewModel.visibleCancelButton(true);        viewModel.isEditModeInPopup(true);        viewModel.isNotModifyMode(false);        viewModel.enableDataBoxInPopup(false);        viewModel.isImageUpload(true);        backupDataViewModel = getBackupDataViewModel(viewModel.dataModel);        dropZone = null;    }    //////    // 삭제버튼 클릭    function handlePopupButtonDelete() {        DevExpress.ui.dialog.confirm($G('deleteConfirmMsg'), "삭제").then(function (result) {            if (result) {                var temp = {                    SiteId: BWA.UserInfo.SiteId(),                    FileId: viewModel.dataModel.ImageFileId()                }                if (viewModel.dataModel.ImageFileId() != null) {                    BWA.db.CmFile.byKey(temp).done(function (data) {                        if ($('#FloorPlanDropZone1').length) {                            if (_.isNull(dropZone)) {                                dropZone = BWA.DropZone.create({                                    id: '#FloorPlanDropZone1',                                    categoryId: $Code.FileCategory.FLOOR                                });                                dropZone.removeFile(data);                                dropZone = null;                            }                        }                    });                }                var selectedId = {};                selectedId.SiteId = viewModel.dataModel.SiteId();                selectedId.FloorId = viewModel.dataModel.FloorId();                selectedId.Name = viewModel.dataModel.Name();                selectedId.ImageFileId = viewModel.dataModel.ImageFileId();                BemsWebApplication.db['BemsFloorPlan'].remove(selectedId).done(function () {                    viewModel.refreshList();                    setTimeout(function () {                        GetGridData();                        UpdateSelectBoxInPopUp();                    }, 100);                    PopupButtonClose();                    utils.toast.show('데이터베이스 항목 삭제 작업이 성공하였습니다.');                }).fail(function () {                    utils.toast.show('데이터베이스 항목 삭제 작업이 실패하였습니다.', 'error');                });                //층별 관제점도 같이 지워준다                var dataSource = new DevExpress.data.DataSource({                    store: {                        type: "odata",                        url: endpointSelector + "/BemsFloorStatus",                    },                    requireTotalCount: true                });                dataSource.filter([                        ["SiteId", "=", BWA.UserInfo.SiteId()],                        "and",                        ["FloorId", "=", viewModel.dataModel.FloorId()]                ]);                dataSource.load()                .done(function (result) {                    for (var i = 0; i < result.length; i++) {                        var num = 0;                        var removeData = {                            SiteId: result[i].SiteId,                            FloorId: result[i].FloorId,                            FloorName: result[i].FloorName,                            ImageFileId: result[i].ImageFileId,                            Xvalue: result[i].Xvalue,                            Yvalue: result[i].Yvalue,                            ZoneId: result[i].ZoneId,                            FacilityTypeId: result[i].FacilityTypeId,                            FacilityCode: result[i].FacilityCode,                            PropertyId: result[i].PropertyId,                            FacilityName: result[i].FacilityName,                        };                        BemsWebApplication.db['BemsFloorStatus'].remove(removeData);                    }                })            }        });    }    // 취소버튼     function handlePopupButtonCancel() {        viewModel.visibleEditButton(true);        viewModel.visibleDeleteButton(true);        viewModel.visibleCancelButton(false);        viewModel.isEditModeInPopup(false);        viewModel.isNotModifyMode(true);        viewModel.isImageUpload(false);        restoreDataViewModelFromBackup(viewModel.dataModel, backupDataViewModel);    }    // 닫기버튼    function PopupButtonClose() {        viewModel.isNewInPopup(false);        viewModel.visibleEditButton(false);        viewModel.visibleDeleteButton(false);        viewModel.visibleCancelButton(false);        viewModel.isEditModeInPopup(false);        viewModel.isNotModifyMode(false);        viewModel.dataModel.ImageFileId(null);        viewModel.imagefileUrl(undefined);        viewModel.popupVisible(false);        dropZone = null;    }    function GetGridData() {        var gridData = new Array();        var dataSource = new DevExpress.data.DataSource({            store: {                type: "odata",                url: endpointSelector + "/BemsFloorPlan",            },            requireTotalCount: true,            pageSize: 9999,        });        dataSource.filter([                ["SiteId", "=", BWA.UserInfo.SiteId()]        ]);        dataSource.sort({ getter: "Name", asc: true });        dataSource.load()       .done(function (result) {           for (var i = 0; i < result.length; i++) {               gridData[i] = {                   "SiteId": 0,                   "FloorId": 0,                   "Name": "",                   "ImageFileId": null               };               gridData[i].SiteId = result[i].SiteId;               gridData[i].FloorId = result[i].FloorId;               gridData[i].Name = result[i].Name;               gridData[i].ImageFileId = result[i].ImageFileId;           }           $("#gridContainer").dxDataGrid("instance").option('dataSource', gridData);           //$("#gridContainer").dxDataGrid("instance").refresh();       })        .fail(function (error) {            utils.toast.show(error);        });    }    function UpdateSelectBoxInPopUp() {        var dataSource_GridData = new DevExpress.data.DataSource({            store: {                type: "odata",                url: endpointSelector + "/BemsFloorPlan",            },            requireTotalCount: true,            pageSize: 100        });        dataSource_GridData.filter([                ["SiteId", "=", BWA.UserInfo.SiteId()]        ]);        dataSource_GridData.load()        .done(function (gridData) {            var tmp = new Array(floorAll.length);            for (var i = 0; i < floorAll.length; i++) {                tmp[i] = 0;                for (var j = 0; j < gridData.length; j++) {                    if (floorAll[i].FloorId == gridData[j].FloorId) {                        tmp[i] = 1;                        break;                    }                }            }            var dbfloor = new Array();            var idx = 0;            for (var i = 0; i < floorAll.length; i++) {                if (tmp[i] == 0)                    dbfloor.push(floorAll[i]);            }            FloorInPopUp(dbfloor);            FloorInPopUpForSearch($SearchView.createArrayOfSelectBox('FloorId', FloorInPopUp));        });    }    function getImageSize(width, height) {        var viewIndoor = $('#viewIndoor');        var maxWidth = parseFloat(viewIndoor.css('width')), maxHeight = parseFloat(viewIndoor.css('height'));        var widthRatio = width / maxWidth;        var heightRatio = height / maxHeight;        var maxRatio = max(widthRatio, heightRatio);        if (maxRatio > 1) {            return { width: width / maxRatio, height: height / maxRatio }        }        return { width: width, height: height }    }    function max(x, y) {        if (x > y) return x;        return y;    }    function loadImage(imageUrl) {        $('#imageContext').find('text').remove();        //var imageUrl = url;//'/Images/Blueprint/' + viewModel.dataModel.FloorId() + '.jpg';        var image = document.getElementById("image");        var newImage = new Image();        newImage.onload = function () {            var imageSize = getImageSize(newImage.width, newImage.height);            $('#imageContext').css('width', imageSize.width).css('height', imageSize.height);            $('#image').attr('width', imageSize.width).attr('height', imageSize.height); // 2016 05 30 추가,  IE 문제해결,  종화        }        newImage.src = imageUrl;        image.setAttributeNS('http://www.w3.org/1999/xlink', 'href', imageUrl);    }    var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'BemsFloorPlan', {        dataSourceOptions: {            select: [                'SiteId',                'FloorId',                'Name',                'ImageFileId'            ],            filter: [                ['SiteId', '=', BWA.UserInfo.SiteId()]            ],            extendOptions: {                forceOriginalField: true            },        },        columns: [            { dataField: 'SiteId', caption: '번호', width: '30%', alignment: 'center' },            { dataField: 'Name', caption: '층 명칭', width: '70%', alignment: 'center' },            { dataField: 'FloorId', caption: '', width: '30%', alignment: 'center', visible: false },            { dataField: 'ImageFileId', caption: '', width: '70%', alignment: 'center', visible: false }        ],        NoSearchView: true,     // 2019.07.25 kgpark 검색버튼 삭제        paging: {            pageSize: 20,            enabled: true        },        pager: {        },        handlePopupShowing: function (isNewInPopup, dataViewModel) {            // 저장 버튼             if (isNewInPopup() == false) {                imagefileUrl(undefined);                dropZone = null; // 신규등록인 경우            } else {                dataViewModel.Name('');                dataViewModel.ImageFileId(null);                viewModel.imagefileUrl(undefined);                viewModel.isNewInPopup(true);                viewModel.isEditModeInPopup(true);                imagefileUrl('');                loadImage(imagefileUrl());            }            // 탭으로 표시하지 않음             isImageUpload(false);            enableDataBoxInPopup(true);            //  tabsVisible(isNewInPopup() == false);            $("#Floor_Info").dxSelectBox({                onValueChanged: function () {                    if (isNewInPopup() == false) {                        // 이전 이미지 잔상 문제로 인한 방어코드                        // 이미지 경로 강제 초기화                        imagefileUrl(undefined);                    }                    isImageUpload(true);                    enableDataBoxInPopup(true);                    var floor = $("#Floor_Info").dxSelectBox('instance').option('value');                    var dataSource = new DevExpress.data.DataSource({                        store: {                            type: "odata",                            url: endpointSelector + "/CmFloor",                        },                        requireTotalCount: true                    });                    dataSource.filter([                        ["SiteId", "=", BWA.UserInfo.SiteId()]                    ]);                    dataSource.load()                    .done(function (result) {                        for (var i = 0; i < result.length; i++) {                            if (result[i].FloorId == floor) {                                viewModel.dataModel.Name(result[i].Name);                                break;                            }                        }                    });                }            });        },        handleViewShowing: function () {            //권한설정            hasnotModificationPermission(!BWA.UserInfo.hasPermissionOfModification(viewInfo.viewName));            var dataSource_FloorInfo = new DevExpress.data.DataSource({                store: {                    type: "odata",                    url: endpointSelector + "/CmFloor",                },                requireTotalCount: true            });            dataSource_FloorInfo.filter([                    ["SiteId", "=", BWA.UserInfo.SiteId()]            ]);            dataSource_FloorInfo.load()            .done(function (floorInfo) {                floorAll = floorInfo;            });            UpdateSelectBoxInPopUp();            GetGridData();            enableDataBoxInPopup(true);        },        handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {            dataGrid.clearSelection();            viewModel.visibleEditButton(true);            viewModel.visibleDeleteButton(true);            viewModel.isNotModifyMode(true);            viewModel.enableDataBoxInPopup(false);            viewModel.isImageUpload(false);            viewModel.isNewInPopup(false);            var data = clickRow.data;            viewModel.dataModel.Name(data.Name);            viewModel.dataModel.FloorId(data.FloorId);            viewModel.dataModel.ImageFileId(data.ImageFileId);            viewModel.dataModel.SiteId(data.SiteId);            popupVisible(true);            imagefileUrl('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, BWA.UserInfo.SiteId(), viewModel.dataModel.ImageFileId()));            loadImage(imagefileUrl());        },        handleViewShown: function (dataViewModel, isEditModeInPopup) {            setupDropZone(dataViewModel);        },        handleSaveSuccess: function () {            if (_.isNull(dropZone) === false) {                dropZone.resetUploadedFileInfo();            }        },        handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) {            if (isNewInPopup() == false) {                if (_.isNull(dataViewModel.ImageFileId()) === false) {                    imagefileUrl('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, dataViewModel.SiteId(), dataViewModel.ImageFileId()));                }                else {                    imagefileUrl("images/default.png");                }            }        },    });    viewModel.floorplanPopupToolbarItems = floorplanPopupToolbarItems;    viewModel.imagefileUrl = imagefileUrl;    viewModel.FloorInPopUp = FloorInPopUp;    viewModel.dataModel.FloorId = ko.observable();    viewModel.isImageUpload = isImageUpload;    viewModel.backupDataViewModel = backupDataViewModel;    viewModel.enableDataBoxInPopup = enableDataBoxInPopup;    viewModel.visibleEditButton = visibleEditButton;    viewModel.hasnotModificationPermission = hasnotModificationPermission;    viewModel.visibleDeleteButton = visibleDeleteButton;    viewModel.visibleCancelButton = visibleCancelButton;    viewModel.isEditModeInPopup = isEditModeInPopup;    viewModel.isNotModifyMode = isNotModifyMode;    return viewModel;};
 |