| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482 | BemsWebApplication.EquipRentInfo = function (params, viewInfo) {    "use strict";    var codeTypeDataSource = BemsWebApplication.db.createDataSource('FmsEquipmentCodeType', true, false, true),        codeStateTypeDataSource = BemsWebApplication.db.createDataSource('FmsEquipmentCodeStateType', false, false, true),        warehouseDataSource = BemsWebApplication.db.createDataSource('FmsMaterialWarehouse', true, false, true);    var equipmentFactory = BWA.Factory.Equipment;    var equipmentsDataSource = equipmentFactory.getBasicDataSourceRef({        dbModeIId: 'FmsEquipmentHistory',        primaryKeyDataField: 'EquipmentHistoryId'    });    var codeTypes = ko.observableArray(),        codeStateTypes = ko.observableArray(),        warehouses = ko.observableArray();    var equipments = ko.observableArray(),        equipmentsInView = ko.observableArray();    var equipmentGridView;    var equipmentDataGridOptions,        modifiableEquipmentDataGridOptions = undefined;    var selectedUserData = ko.observable();    var codeTypesForSearch = ko.observableArray(),        codeStateTypesForSearch = ko.observableArray(),        warehousesForSearch = ko.observableArray();    var deferredForSearch = new $.Deferred();    var eq = BWA.DataUtil.constructEqualFilter,        and = BWA.DataUtil.andFilter;    selectedUserData.subscribe(function (value) {        viewModel.dataModel.RentUser(value.Name);    });    var viewModel;    var viewOptions = {        dataSourceOptions: {            select: [                'SiteId',                'EquipmentRentId',                'RegisterUserId',                'RentUser',                'Title',                'RentDate',                'ReturnDueDate',                'ReturnFixDate',                'EquipmentStateTypeId',                'Comment',                'CmUser/Name', // 등록자                'FmsEquipmentCodeStateType/Name'            ],            expand: [                'CmUser', 'CmUser1',                'FmsEquipmentCodeStateType',                'FmsEquipmentHistory'            ],            extendOptions: {                forceOriginalField: true,            },            filter: [                ['SiteId', '=', BWA.UserInfo.SiteId()],                'and',                ['EquipmentStateTypeId', '=', 2]            ],        },        columns: [            { dataField: 'EquipmentRentId', caption: $G('number'), width: '10%', alignment: 'center', sortOrder: 'desc' },            { dataField: 'Title', caption: '대여신청명', width: '40%', alignment: 'center' },            { dataField: 'Comment', caption: '대여사유', width: '40%', alignment: 'center' },            { dataField: 'RentUser', caption: '대여자', width: '20%', alignment: 'center' },            {                dataField: 'RentDate', caption: '대여일', width: '20%', alignment: 'center', dataType: "shortDate", format: "yyyy-MM-dd",                customizeText: function (cellInfo) {                    return cellInfo.valueText;                }            },            {                dataField: 'ReturnDueDate', caption: '반납예정일', width: '20%', alignment: 'center', dataType: "shortDate", format: "yyyy-MM-dd",                customizeText: function (cellInfo) {                    return cellInfo.valueText;                }            },            { dataField: 'CmUser/Name', caption: '관리자', width: '20%', alignment: 'center', visible: false },        ],        paging: {            pageSize: 18,            enabled: true        },        pager: {},        "export": {            enabled: true,            fileName: '공기구 대여 목록',        },        onExporting: function (e) {            e.component.columnOption("EquipmentRentId", "visible", false);        },        onExported: function (e) {            e.component.columnOption("EquipmentRentId", "visible", true);        },        sort: { field: "EquipmentRentId", desc: true },        searchViewItems: [            { id: 'Title' },            { id: 'RentUser' },            { id: 'RentDate', type: 'dateRange', isOnlyDate: true },            { id: 'ReturnDueDate', type: 'dateRange', isOnlyDate: true }        ],        popupWidth: 1200,        handleViewShowing: function (dataModel) {            $.when(                codeStateTypeDataSource.load(),                codeTypeDataSource.load(),                warehouseDataSource.load()            ).done(function (codeStateTypeResult, codeTypeResult, warehouseResult) {                codeStateTypes(codeStateTypeResult[0]);                codeTypes(codeTypeResult[0]);                warehouses(warehouseResult[0]);                codeStateTypesForSearch($SearchView.createArrayOfSelectBox('EquipmentStateTypeId', codeStateTypes()));                codeTypesForSearch($SearchView.createArrayOfSelectBox('EquipmentTypeId', codeTypes()));                warehousesForSearch($SearchView.createArrayOfSelectBox('WarehouseId', warehouses()));                deferredForSearch.resolve();            });        },        handleViewShown: function (dataModel) {        },        handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {            dataGrid.clearSelection();            var data = clickRow.data;            var dataModel = viewModel.dataModel;            if (data['RentUser'] !== undefined) {                dataModel.RentUser = $KoSet(dataModel.RentUser, data['RentUser']());            }            popupVisible(true);        },        handleAfterLoadingModelByKey: function (data, dataViewModel) {            equipmentsDataSource.filter([                eq('SiteId', dataViewModel.SiteId()),                and,                eq('EquipmentRentId', dataViewModel.EquipmentRentId()),                and,                ['IsReturned', '=', false]            ]);            equipmentsDataSource.load().done(function (dbEquipments) {                equipmentsInView(dbEquipments);            });        },        handlePopupShowing: function (isNewInPopup, dataViewModel) {            $("#gridContainer2").dxDataGrid({                paging: {                    pageSize: 9,                    enabled: true                }            });            $("#gridContainer3").dxDataGrid({                paging: {                    pageSize: 9,                    enabled: true                }            });            // 저장 버튼             var userInfo = BWA.UserInfo;            if (isNewInPopup()) { // 신규등록인 경우                 dataViewModel.SiteId(userInfo.SiteId());                dataViewModel.EquipmentStateTypeId(2);                dataViewModel.RentDate($G.date(new Date()));                dataViewModel.RegisterUserId(userInfo.UserId());                dataViewModel.Comment('');            }        },        handlePopupShown: function (isEditMode, isNew, dataViewModel) {        }    };    viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsEquipmentRentInfo', viewOptions);    var equipPopupToolbarItems = [          { location: 'before', text: '공기구 대여' },          {              location: 'after', widget: 'button', options: {                  text: '공기구추가', icon: 'search', visible: viewModel.isEditModeInPopup,                  clickAction: function () { viewModel.equipmentSearchPopup.show(); }              }          },          {              location: 'after', widget: 'button', options: {                  text: '공기구삭제', icon: 'remove', type: 'danger', visible: viewModel.isEditModeInPopup,                  clickAction: function () { handleDeleteSelectedEquipments(); }              }          },          {              location: 'after', widget: 'button', options: {                  text: $G('save'), icon: 'save', visible: viewModel.isEditModeInPopup,                  clickAction: handlePopupButtonSave              }          },          {              location: 'after', widget: 'button', options: {                  text: $G('close'), icon: 'close',                  clickAction: equipPopupButtonClose              }          }    ];    equipmentDataGridOptions = utils.datagrid.defaultOptions({        width: 700,        pager: {            showPageSizeSelector: false,            allowedPageSizes: []        },        dataSource: equipmentsInView,        columns: [            { dataField: 'Name', caption: '공기구명', width: '35%', alignment: 'center' },            { dataField: 'FmsEquipment/Standard', caption: '규격', width: '35%', alignment: 'center' },            { dataField: 'FmsEquipment/FmsMaterialWarehouse/Name', caption: '창고', width: '15%', alignment: 'center' },            // Detail 에서는 보유수량을 표시하지 않음. 사용자의 혼란 방지             { dataField: 'CurrentRentCount', caption: '대여수량', width: '15%', alignment: 'center', format: 'currency' }        ],    });    modifiableEquipmentDataGridOptions = utils.datagrid.defaultOptions({        width: 700,        pager: {            showPageSizeSelector: false,            allowedPageSizes: []        },        dataSource: equipments,        selection: { mode: 'multiple', allowSelectAll: true },        columns: [            { dataField: 'Name', caption: '공기구명', width: '30%', alignment: 'center' },            { dataField: 'Standard', caption: '규격', width: '30%', alignment: 'center' },            { dataField: 'WarehouseName', caption: '창고', width: '13%', alignment: 'center' },            { dataField: 'CurrentStockCount', caption: '보유수량', width: '13%', alignment: 'center', format: 'currency' },            {                dataField: 'CurrentRentCount', caption: '대여수량', width: '13%', alignment: 'center', format: 'currency',                cellTemplate: utils.datagrid.getNumberBoxDataGridTemplateFunc({                    min: 1,                    max: 1000000,                    dataField: 'CurrentRentCount',                    convertValueWhenValueChanged: function (value) {                        return Math.max(1, value);                    }                })            },        ],        cellClick: function (e) {            utils.datagrid.cellClickEventForDataGridTemplate(e, 'CurrentRentCount');        },        contentReadyAction: function (e) {            equipmentGridView = e.component;        },    });    function handleDeleteSelectedEquipments() {        var rows = equipmentGridView.getSelectedRowsData();        if (_.isEmpty(rows)) {            utils.toast.show('선택된 자재가 없습니다.', 'error');            return;        }        _.each(rows, function (row) {            var array = equipments();            var length = array.length;            var id = row.EquipmentId();            for (var i = 0 ; i < length ; i++) {                if (id === array[i].EquipmentId()) {                    equipments().splice(i, 1);                    break;                }            }        });        equipmentGridView.refresh();    }    function equipPopupButtonClose() {        viewModel.popupVisible(false);    }    // 편집모드로 오픈시 데이터 복사     viewModel.isEditModeInPopup.subscribe(function (isEditMode) {        if (isEditMode) { equipments(equipmentsInView.slice(0)); }    });    viewModel.popupVisible.subscribe(function (visible) {        if (!visible) {            // 데이터 초기화             equipmentsInView([]);            equipments([]);        }    });    viewModel.userSearchPopup = $UserSearchPopup(viewModel, selectedUserData);    viewModel.equipmentSearchPopup = BWA.Popup.Equipment.create(viewModel, {        isMultipleSelect: true,        onSelectedEquipments: function (selectedEquipments) {            var equipmentRentId = viewModel.dataModel.EquipmentRentId();            _.each(selectedEquipments, function (sm) {                // JD : 팝업에서 전체선택시 추가로 하면 오류 발생함. 이에 대한 회피 코드로 try-catch                // JD : 근본적인 원인은 시간 관계상 차후로 넘김                var found = _.some(equipments(), function (m) {                    try {                        return m.EquipmentId() === sm.EquipmentId();                    } catch (e) {                        return m.EquipmentId() === sm.EquipmentId;                    }                });                if (found) return;                // TODO : 여기서 부가적인 값들을 추가해주어야 함                try {                    equipments.push({                        SiteId: ko.observable(sm.SiteId()),                        EquipmentId: ko.observable(sm.EquipmentId()),                        Name: ko.observable(sm.Name()),                        WarehouseName: ko.observable(sm.WarehouseName()),                        //Name2: ko.observable(sm.),                        CurrentStockCount: ko.observable(sm.CurrentStockCount()),                        CurrentRentCount: ko.observable(1),                        Standard: ko.observable(sm.Standard())                    });                } catch (e) {                    equipments.push({                        SiteId: ko.observable(sm.SiteId),                        EquipmentId: ko.observable(sm.EquipmentId),                        Name: ko.observable(sm.Name),                        WarehouseName: ko.observable(sm.WarehouseName),                        CurrentStockCount: ko.observable(sm.CurrentStockCount),                        CurrentRentCount: ko.observable(1),                        Standard: ko.observable(sm.Standard)                    });                }            });            equipmentGridView.refresh();        }    });    viewModel.buttonSearchMainContactorUser = function (e) {        viewModel.userSearchPopup.show();    }    function handlePopupButtonSave() {        // 더블클릭문제로 인한 방어코드         if (!viewModel.popupVisible()) { return; }        var dataViewModel = viewModel.dataModel;        // 저장버튼을 오버라이딩 하였으므로 mandatory 필드가 적용되지 않음. SelfValidation        if (_.isEmpty(dataViewModel.Title())) {            utils.toast.show('값을 입력해 주십시오:  제목 ', 'error');            return;        }        if (dataViewModel.ReturnDueDate() == null) {            utils.toast.show('값을 입력해 주십시오:  반납예정일 ', 'error');            return;        }        if (_.isEmpty(dataViewModel.RentUser())) {            utils.toast.show('값을 입력해 주십시오:  대여자 ', 'error');            return;        }        if (_.isEmpty(equipments())) {            utils.toast.show('불출요청한 공기구가 없습니다.', 'error');            return;        }        if ($G.date(dataViewModel.ReturnDueDate()) < dataViewModel.RentDate()) {            utils.toast.show('반납예정일을 대여일 이후로 설정하시기 바랍니다.', 'error');            return;        }        var tempEquipmentName;        // 여기서 대여수량과 불출수량 카운트를 각각 확인하여 정상인 경우만...        var foundExcess = _.some(equipments(), function (m) {            tempEquipmentName = m.Name();            return m.CurrentStockCount() < m.CurrentRentCount();        });        if (foundExcess) {            utils.toast.show(tempEquipmentName + '의 대여가능 수량이 초과되었습니다.', 'error');            return;        }        var dataViewModel = viewModel.dataModel;        if (viewModel.isNewInPopup()) { // insert 인 경우             BWA.db.FmsEquipmentRentInfo.insert(dataViewModel.toJS()).done(function (values, newId) {                var array = equipments();                var postData;                var parameters = {                    SiteId: newId.SiteId,                    EquipmentRentId: newId.EquipmentRentId                };                postData = _.map(array, function (m) {                    return {                        SiteId: newId.SiteId,                        EquipmentId: m.EquipmentId(),                        EquipmentRentId: newId.EquipmentRentId,                        CurrentRentCount: m.CurrentRentCount(),                        EquipmentStateTypeId: 2 // 출고                        // TODO : 필요하다면 아래에 데이터 추가 필요                     };                });                BWA.api.post('FmsEquipmentRentInfo/InsertEquipments', postData, parameters).done(                    function () {                        viewModel.popupVisible(false);                        viewModel.gridView().refresh();                        utils.toast.show($G('successDatabaseInsertionMsg'));                    });            });        }        else { // update 경우             var keys = BWA.db.extractKeysObject('FmsEquipmentRentInfo', dataViewModel);            BWA.db.FmsEquipmentRentInfo.update(keys, dataViewModel.toJS()).done(function (res) {                var array = equipments();                var postData;                var parameters = {                    SiteId: res.SiteId,                    EquipmentRentId: res.EquipmentRentId                };                postData = _.map(array, function (m) {                    return {                        SiteId: res.SiteId,                        EquipmentId: m.EquipmentId(),                        EquipmentRentId: res.EquipmentRentId,                        CurrentRentCount: m.CurrentRentCount(),                        EquipmentStateTypeId: 2 // 출고                        // TODO : 필요하다면 아래에 데이터 추가 필요                     };                });                BWA.api.post('FmsEquipmentRentInfo/UpdateEquipments', postData, parameters).done(                    function () {                        viewModel.popupVisible(false);                        viewModel.gridView().refresh();                        utils.toast.show($G('successDatabaseUpdateMsg'));                    });            });        }    };    viewModel.equipPopupToolbarItems = equipPopupToolbarItems;    viewModel.dataModel.RentUser = ko.observable();    viewModel.equipmentDataGridOptions = equipmentDataGridOptions;    viewModel.modifiableEquipmentDataGridOptions = modifiableEquipmentDataGridOptions;    viewModel.codeTypes = codeTypes;    viewModel.codeStateTypes = codeStateTypes;    viewModel.warehouses = warehouses;    return viewModel;};
 |