$(function () {
    'use strict';
    // viewModel 을 가져오지 못해서 임의로 객체 선언후 할당 
    var fmsmaterialsDataSource = BemsWebApplication.db.createDataSource('FmsMaterial', true, true, true);
    var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter, noteq = BWA.DataUtil.constructNotEqualFilter;
    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;
    }

    BemsWebApplication.Popup.AddWorkResultCheckItem = {

        create: function (viewInfo, viewModel, refreshListData) {

            var dataModel = null;
            var IsWorkDone = ko.observable(false);
            var IsWorkHold = ko.observable(false);
            var tempViewModel = viewModel;
            var materials = ko.observableArray();
            var materialsEx = ko.observableArray();
            var materialFactory = BWA.Factory.Material;
            var materialGridView;
            var materialColumns = materialFactory.getColumns([
                { dataField: 'MaterialCode', width: '30%' },
                { dataField: 'Name', width: '40%' },
                { dataField: 'Standard', width: '40%' }
            ]);

            var usedMaterialsDataSource = BemsWebApplication.db.createDataSource('FmsWorkResultCheckItemMaterial', true, true, true);
            var facilityTypeDataSource = BemsWebApplication.db.createDataSource('BemsFacilityType'),
                facilityTypes = ko.observableArray(),
                isNew = ko.observable(false),
                MaterialExdataSource = ko.observableArray(),
                popupVisible = ko.observable(),
                isEditMode = ko.observable(false),
                isViewMode = ko.observable(true),
                cancelButtonVisible = ko.observable(true),

                // facilityDataModel = new BWA.CmFacilityViewModel(),

                workCheckItemViewModel = new BemsWebApplication.FmsWorkResultCheckItemViewModel();
            workCheckItemViewModel.IsWorkDone = ko.observable(false);
            workCheckItemViewModel.IsWorkHold = ko.observable(false);
            workCheckItemViewModel.IsdateboxCheckDate = ko.observable();
            workCheckItemViewModel.AttachmentFileName1 = ko.observable();
            workCheckItemViewModel.AttachmentFileName2 = ko.observable();

            // 2018 01 29 -->
            var FileEdit = ko.observable(false);
            var FileView = ko.observable(false);
            // <-- 2018 01 29

            var popupOptions = {
                width: '998px',
                height: 'auto',
                //shading: false,
                shadingColor: 'rgba(0,0,0,0.0)',
                visible: popupVisible,
                closeOnOutsideClick: false,
                animation: utils.popup.createAnimation(),
                shownAction: handleViewShown,
                showingAction: handlePopupShowing,
                hiddenAction: handlePopuphidden,
            },

            toolbarItems = [
                { location: 'before', text: $G('detailInfo') },
                // hcLee 2018 01 29 -->
                {
                    location: 'after', widget: 'button',
                    options: {
                        text: '사진수정', icon: 'edit', visible: FileEdit,
                        clickAction: function () {
                            if (viewModel.isAddHistoryButton() == false) {
                                FileView(false);
                                FileEdit(false);
                            }
                            else {
                                FileView(true);
                                FileEdit(false);
                                isEditMode(!isEditMode());
                            }
                        }
                    }
                },
                {
                    location: 'after', widget: 'button',
                    options: {
                        //text: '사진보기', icon: 'edit', visible: isEditMode() ? true : false,
                        text: '사진보기', icon: 'edit', visible: FileView,
                        clickAction: function () {
                            if (viewModel.isAddHistoryButton() == false) {
                                FileView(false);
                                FileEdit(false);
                            }
                            else {
                                FileView(false);
                                FileEdit(true);
                                isEditMode(!isEditMode());
                                setdownLoadUrl();
                            }
                        }
                    }
                },
                // <-- hcLee 2018 01 29

                {
                    location: 'after', widget: 'button',
                    options: {
                        text: $G('materialInsertion'), icon: 'search', visible: viewModel.isAddHistoryButton,
                        clickAction: function () {
                            viewModel.isAddPopup(true);
                            viewModel.materialSearchPopup.show();
                        }
                    }
                },
                {
                    location: 'after', widget: 'button',
                    options: {
                        text: $G('materialDeletion'), icon: 'remove', type: 'danger', visible: viewModel.isAddHistoryButton,
                        clickAction: function () { handleDeleteSelectedMaterials(); }
                    }
                },
                {
                    location: 'after', widget: 'button',
                    options: {
                        text: $G('edit'), icon: 'edit', visible: viewModel.isEditHistoryButton,
                        clickAction: handlePopupButtonEdit
                    }
                },
                {
                    location: 'after', widget: 'button',
                    options: {
                        text: $G('save'), icon: 'save', visible: viewModel.isAddHistoryButton,
                        clickAction: handlePopupButtonSave
                    }
                },
                { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: handlePopupButtonClose } }
            ],

            modifiableMaterialDataGridOptions = utils.datagrid.defaultOptions({
                width: 500,
                pager: {
                    showPageSizeSelector: false,
                    allowedPageSizes: []
                },

                dataSource: materials,
                selection: { mode: 'multiple', allowSelectAll: true },
                columns: materialColumns.concat([{

                    dataField: 'MaterialCount', width: '20%', type: 'number',
                    caption: $G('materialCount'), alignment: 'center',
                    cellTemplate: utils.datagrid.getNumberBoxDataGridTemplateFunc({
                        min: 0,
                        max: 1000000,
                        dataField: 'MaterialCount',
                        convertValueWhenValueChanged: function (value) {
                            return Math.max(1, value);
                        }
                    })
                }]),

                cellClick: function (e) {
                    utils.datagrid.cellClickEventForDataGridTemplate(e, 'MaterialCount');
                },

                contentReadyAction: function (e) {
                    materialGridView = e.component;
                },
            });

            isEditMode.subscribe(function (isEdit) {
                isViewMode(!isEdit);
            });

            popupVisible.subscribe(function (value) {
                if (!value) {
                    materials([]);
                }
            });

            viewModel.materialSearchPopup = BWA.Popup.Material.create(viewModel, {

                // TODO : 입고수량이 0 이상인 것을 필터링할 필요는 없는지 확인필요
                isMultipleSelect: true,
                onSelectedMaterials: function (selectedMaterials) {

                    if (viewModel.isAddPopup()) {
                        _.each(selectedMaterials, function (sm) {

                            // 어차피 SiteId와 BusinessField는 동일 할 수 밖에 없으므로 비교하지 않는다.
                            var found = _.some(materials(), function (m) {
                                return (typeof (m.MaterialId) == "function" ? m.MaterialId() : m.MaterialId) === (typeof (sm.MaterialId) == "function" ? sm.MaterialId() : sm.MaterialId);
                            });

                            if (found) return;
                            if ((typeof (sm.StockCount) == "function" ? sm.StockCount() : sm.StockCount) > 0) {
                                materials.push({
                                    SiteId: sm.SiteId,
                                    MaterialId: sm.MaterialId,
                                    Name: sm.Name,
                                    MaterialCode: sm.MaterialCode,
                                    MaterialCount: ko.observable(1),
                                    FinalPrice: sm.FinalPrice,
                                    MaxMaterialCount: sm.StockCount,
                                    Standard: sm.Standard
                                });
                            } else {
                                utils.toast.show('재고가 없는 항목은 선택할 수 없습니다.', 'warning');
                            }
                        });
                        materialGridView.refresh();
                    }
                    else if (viewModel.isApprovalMode()) {
                        _.each(selectedMaterials, function (sm) {

                            // 어차피 SiteId와 BusinessField는 동일 할 수 밖에 없으므로 비교하지 않는다.
                            var found = _.some(viewModel.workResultCheckItemMaterialPopup.materials2(), function (m) {
                                return (typeof (m.MaterialId) == "function" ? m.MaterialId() : m.MaterialId) === (typeof (sm.MaterialId) == "function" ? sm.MaterialId() : sm.MaterialId);
                            });
                            if (found) return;

                            viewModel.workResultCheckItemMaterialPopup.materials2.push({

                                SiteId: sm.SiteId,
                                MaterialId: sm.MaterialId,
                                Name: sm.Name,
                                MaterialCode: sm.MaterialCode,
                                MaterialCount: ko.observable(1),
                                FinalPrice: sm.FinalPrice,
                                MaxMaterialCount: sm.StockCount,
                                Standard: sm.Standard
                            });
                        });
                        viewModel.workResultCheckItemMaterialPopup.materialGridView2().refresh();
                    }
                }
            });

            function handleDeleteSelectedMaterials() {

                var rows = materialGridView.getSelectedRowsData();
                if (_.isEmpty(rows)) {
                    utils.toast.show('선택된 자재가 없습니다.', 'error');
                    return;
                }

                _.each(rows, function (row) {
                    var array = materials();
                    var length = array.length;
                    var id = row.MaterialId();
                    for (var i = 0 ; i < length ; i++) {
                        if (id === array[i].MaterialId()) {
                            materials().splice(i, 1);
                            break;
                        }
                    }
                });
                materialGridView.refresh();
            }

            function handlePopupButtonEdit() {
                viewModel.isEditHistoryButton(!viewModel.isEditHistoryButton);
                viewModel.isAddHistoryButton(true);
                FileView(true);
                isEditMode(true);
            }

            function handlePopupButtonClose() {
                isEditMode(false); // hcLee 2018 01 29
                viewModel.isAddHistoryButton(true);
                //viewModel.isAddHistoryButton(true);//2019.08.26
                popupVisible(false);
            }

            function refreshList() {
            }

            function getDoneFunc(messageId) {
                return function () {
                    refreshList();
                    popupVisible(false);
                    utils.toast.show($G(messageId));
                };
            }


            function handlePopupButtonSave() {
                viewModel.isAddHistoryButton(true);
                if (workCheckItemViewModel.TextResult() === "") {
                    utils.toast.show('작업내용을 입력하세요.', 'error');
                    return;
                }

                workCheckItemViewModel.SiteId(tempViewModel.dataModel.SiteId());
                workCheckItemViewModel.WorkRequestId(tempViewModel.dataModel.WorkRequestId());

                if (isNew()) {
                    BWA.db.FmsWorkResultCheckItem.insert({
                        SiteId: workCheckItemViewModel.SiteId(),
                        WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                        FacilityCode: workCheckItemViewModel.FacilityCode(),
                        CheckItemId: workCheckItemViewModel.CheckItemId(),
                        BoolResult: workCheckItemViewModel.BoolResult(),
                        TextResult: workCheckItemViewModel.TextResult(),
                        CheckDate: workCheckItemViewModel.CheckDate(),
                        FileId1: workCheckItemViewModel.FileId1(),
                        FileId2: workCheckItemViewModel.FileId2(),
                    }
                    ).done(function (response, responseKey) {
                        ///////////////////////2019-11-19 변경
                        if (responseKey.CheckItemId != null)
                            workCheckItemViewModel.CheckItemId(responseKey.CheckItemId);
                        if (_.isNull(viewModel.dropZone1) === false) { //추가
                            if (workCheckItemViewModel.FileId1() == null) {
                                viewModel.dropZone1.processQueue();
                                refreshListData();
                            }
                        }
                        if (_.isNull(viewModel.dropZone2) === false) { //추가
                            if (workCheckItemViewModel.FileId2() == null) {
                                viewModel.dropZone2.processQueue();
                                refreshListData();
                            }
                        }
                        ///////////////////////2019-11-19 변경
                        // 작업을 완료처리 할 경우 
                        if (workCheckItemViewModel.IsWorkDone()) {
                            var parameters = {
                                SiteId: workCheckItemViewModel.SiteId(),
                                WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                                WorkProgressId: $Code.WorkProgress.WORK_COMPLETE,
                                UserId: BWA.UserInfo.UserId()
                            };
                            //fmsreesult enddate 변경
                            var store = new DevExpress.data.ODataStore({
                                url: endpointSelector + "/FmsWorkResult",
                                key: ["SiteId", "WorkRequestId"],
                                keyType: { SiteId: "Int32", WorkRequestId: "Int32" }
                            });
                            store.update({ SiteId: workCheckItemViewModel.SiteId(), WorkRequestId: workCheckItemViewModel.WorkRequestId() },
                            {
                                EndDate: workCheckItemViewModel.IsdateboxCheckDate()
                            }).done(function (values, key) {
                                // FmsWorkRequest 업데이트: WorkProgressId(5)
                                BWA.api.post('FmsWorkRequest', null, parameters).done(function () {
                                    tempViewModel.dataModel.WorkProgressName('작업완료');
                                    var array = materials();

                                    if (array.length != 0) {
                                        var postData;
                                        var parameters2 = {
                                            SiteId: workCheckItemViewModel.SiteId(),
                                            BusinessFieldId: tempViewModel.dataModel.BusinessFieldId(),
                                            WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                                            CheckItemId: responseKey.CheckItemId
                                        };

                                        postData = _.map(array, function (m) {
                                            return {
                                                SiteId: workCheckItemViewModel.SiteId(),
                                                WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                                                MaterialId: m.MaterialId(),
                                                MaterialCount: m.MaterialCount(),
                                                CheckItemId: responseKey.CheckItemId,
                                                MaterialCode: m.MaterialCode(),
                                                Name: m.Name()
                                            };
                                        });

                                        // FmsWorkResultCheckItemMaterial 에 저장해야 함
                                        BWA.api.post('FmsWorkResultCheckItemMaterial/Update', postData, parameters2).done(function () {
                                            utils.toast.show($G('successDatabaseInsertionMsg'));
                                            materials([]);
                                            isEditMode(false);
                                            popupVisible(false);
                                            refreshListData(); // hcLee 2018 01 29
                                            // hcLee 2016 05 30
                                            viewModel.workResultCheckItemMaterialPopup.refreshMaterialGrid();
                                            // 작업이력버튼 표시 안함
                                            viewModel.isAddHistoryButton(false);
                                            viewModel.popupVisible(false); // 작업완료는 화면 닫음
                                        });
                                    }
                                    else {
                                        utils.toast.show($G('successDatabaseInsertionMsg'));
                                        isEditMode(false);
                                        refreshListData(); // hcLee 2018 01 29
                                        popupVisible(false);
                                        // 작업이력버튼 표시 안함
                                        viewModel.isAddHistoryButton(false);
                                        viewModel.popupVisible(false); // 작업완료는 화면 닫음
                                    }

                                    utils.toast.show($G('successDatabaseUpdateMsg'));
                                    workCheckItemViewModel.CheckDate('');
                                    workCheckItemViewModel.TextResult('');
                                    workCheckItemViewModel.IsWorkDone(false);
                                    refreshListData(); // hcLee 2018 01 29
                                    viewModel.popupVisible(false); // 작업완료는 화면 닫음
                                });
                            })
                            .fail(function (error) {
                                utils.toast.show(error);
                            });
                        }
                        else if (workCheckItemViewModel.IsWorkHold()) {
                            var parameters = {
                                SiteId: workCheckItemViewModel.SiteId(),
                                WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                                WorkProgressId: $Code.WorkProgress.WORK_HOLD,
                                UserId: BWA.UserInfo.UserId()
                            };

                            // FmsWorkRequest 업데이트: WorkProgressId(5)
                            BWA.api.post('FmsWorkRequest', null, parameters).done(function () {

                                tempViewModel.dataModel.WorkProgressName('작업보류');
                                var array = materials();
                                if (array.length != 0) {
                                    var postData;
                                    var parameters2 = {
                                        SiteId: workCheckItemViewModel.SiteId(),
                                        BusinessFieldId: tempViewModel.dataModel.BusinessFieldId(),
                                        WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                                        CheckItemId: responseKey.CheckItemId
                                    };

                                    postData = _.map(array, function (m) {
                                        return {
                                            SiteId: workCheckItemViewModel.SiteId(),
                                            WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                                            MaterialId: m.MaterialId(),
                                            MaterialCount: m.MaterialCount(),
                                            CheckItemId: responseKey.CheckItemId,
                                            MaterialCode: m.MaterialCode(),
                                            Name: m.Name()
                                        };
                                    });


                                    // FmsWorkResultCheckItemMaterial 에 저장해야 함
                                    BWA.api.post('FmsWorkResultCheckItemMaterial/Update', postData, parameters2).done(function () {
                                        utils.toast.show($G('successDatabaseInsertionMsg'));
                                        isEditMode(false);
                                        materials([]);
                                        refreshListData(); // hcLee 2018 01 29
                                        popupVisible(false);
                                        // hcLee 2016 05 30
                                        viewModel.workResultCheckItemMaterialPopup.refreshMaterialGrid();
                                    });
                                }
                                else {
                                    utils.toast.show($G('successDatabaseInsertionMsg'));
                                    isEditMode(false);
                                    refreshListData(); // hcLee 2018 01 29
                                    popupVisible(false);
                                }
                                viewModel.popupVisible(false);
                            });
                        }
                        else {
                            var array = materials();
                            if (array.length != 0) {
                                var postData;
                                var parameters2 = {
                                    SiteId: workCheckItemViewModel.SiteId(),
                                    BusinessFieldId: tempViewModel.dataModel.BusinessFieldId(),
                                    WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                                    CheckItemId: responseKey.CheckItemId
                                };

                                postData = _.map(array, function (m) {
                                    return {
                                        SiteId: workCheckItemViewModel.SiteId(),
                                        WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                                        MaterialId: (typeof (m.MaterialId) == "function" ? m.MaterialId() : m.MaterialId),
                                        MaterialCount: m.MaterialCount(),
                                        CheckItemId: responseKey.CheckItemId,
                                        MaterialCode: (typeof (m.MaterialCode) == "function" ? m.MaterialCode() : m.MaterialCode),
                                        Name: (typeof (m.Name) == "function" ? m.Name() : m.Name)
                                    };
                                });

                                // FmsWorkResultCheckItemMaterial 에 저장해야 함
                                BWA.api.post('FmsWorkResultCheckItemMaterial/Update', postData, parameters2).done(function () {
                                    utils.toast.show($G('successDatabaseInsertionMsg'));
                                    isEditMode(false);
                                    materials([]);
                                    refreshListData(); // hcLee 2018 01 29
                                    popupVisible(false);
                                    viewModel.workResultCheckItemMaterialPopup.refreshMaterialGrid();
                                });
                            }
                            else {
                                utils.toast.show($G('successDatabaseInsertionMsg'));
                                isEditMode(false);
                                refreshListData(); // hcLee 2018 01 29
                                popupVisible(false);
                            }
                        }
                    });
                }
                else { // 수정? hcLee 2015 12 28
                    var keys = BWA.db.extractKeysObject('FmsWorkResultCheckItem', workCheckItemViewModel);
                    BWA.db.FmsWorkResultCheckItem.update(keys,
                        {
                            SiteId: workCheckItemViewModel.SiteId(),
                            WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                            FacilityCode: workCheckItemViewModel.FacilityCode(),
                            CheckItemId: workCheckItemViewModel.CheckItemId(),
                            BoolResult: workCheckItemViewModel.BoolResult(),
                            TextResult: workCheckItemViewModel.TextResult(),
                            CheckDate: workCheckItemViewModel.CheckDate(),
                            FileId1: workCheckItemViewModel.FileId1(),
                            FileId2: workCheckItemViewModel.FileId2(),
                        }).done(function (res) {
                            ///////////////////////2019-11-19 변경
                            if (res.CheckItemId != null)
                                workCheckItemViewModel.CheckItemId(res.CheckItemId);
                            if (_.isNull(viewModel.dropZone1) === false) {
                                if (workCheckItemViewModel.FileId1() != null) { //변경 - 그림삭제
                                    var temp = {
                                        SiteId: BWA.UserInfo.SiteId(),
                                        FileId: workCheckItemViewModel.FileId1()
                                    }
                                    BWA.db.CmFile.byKey(temp).done(function (data) {
                                        viewModel.dropZone1.removeFile(data);
                                        viewModel.dropZone1.processQueue();
                                        refreshListData();
                                    });
                                }
                                else {
                                    viewModel.dropZone1.processQueue();//변경 - 그림 삭제 필요없음
                                    refreshListData();
                                }
                            }
                            if (_.isNull(viewModel.dropZone2) === false) {
                                if (workCheckItemViewModel.FileId2() != null) { //변경 - 그림삭제
                                    var temp = {
                                        SiteId: BWA.UserInfo.SiteId(),
                                        FileId: workCheckItemViewModel.FileId2()
                                    }
                                    BWA.db.CmFile.byKey(temp).done(function (data) {
                                        viewModel.dropZone2.removeFile(data);
                                        viewModel.dropZone2.processQueue();
                                        refreshListData();
                                    });
                                }
                                else {
                                    viewModel.dropZone2.processQueue();//변경 - 그림 삭제 필요없음
                                    refreshListData();
                                }
                            }
                            ///////////////////////2019-11-19 변경
                            // 작업을 완료처리 할 경우 
                            if (workCheckItemViewModel.IsWorkDone()) {
                                var parameters = {
                                    SiteId: workCheckItemViewModel.SiteId(),
                                    WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                                    WorkProgressId: $Code.WorkProgress.WORK_COMPLETE,
                                    UserId: BWA.UserInfo.UserId()
                                };

                                // FmsWorkRequest 업데이트: WorkProgressId(5)
                                BWA.api.post('FmsWorkRequest', null, parameters).done(function () {

                                    var array = materials();
                                    //if (array.length != 0) {
                                    var postData;
                                    var parameters2 = {
                                        SiteId: workCheckItemViewModel.SiteId(),
                                        BusinessFieldId: tempViewModel.dataModel.BusinessFieldId(),
                                        WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                                        CheckItemId: workCheckItemViewModel.CheckItemId()
                                    };

                                    postData = _.map(array, function (m) {
                                        return {
                                            SiteId: workCheckItemViewModel.SiteId(),
                                            WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                                            MaterialId: (typeof (m.MaterialId) == "function" ? m.MaterialId() : m.MaterialId),
                                            MaterialCount: m.MaterialCount(),
                                            CheckItemId: workCheckItemViewModel.CheckItemId(),
                                            MaterialCode: (typeof (m.MaterialCode) == "function" ? m.MaterialCode() : m.MaterialCode),
                                            Name: (typeof (m.Name) == "function" ? m.Name() : m.Name)
                                        };
                                    });

                                    // FmsWorkResultCheckItemMaterial 에 저장해야 함
                                    BWA.api.post('FmsWorkResultCheckItemMaterial/Update', postData, parameters2).done(function () {
                                        utils.toast.show($G('successDatabaseInsertionMsg'));
                                        isEditMode(false);
                                        materials([]);
                                        refreshListData(); // hcLee 2018 01 29
                                        popupVisible(false);
                                        // 작업이력버튼 표시 안함
                                        viewModel.isAddHistoryButton(false);
                                        // hcLee 2016 05 30
                                        viewModel.workResultCheckItemMaterialPopup.refreshMaterialGrid();
                                    });
                                    //}
                                    //else {
                                    //    utils.toast.show($G('successDatabaseInsertionMsg'));
                                    //    refreshListData(); // hcLee 2018 01 29
                                    //    popupVisible(false);
                                    //    // 작업이력버튼 표시 안함
                                    //    viewModel.isAddHistoryButton(false);
                                    //}

                                    utils.toast.show($G('successDatabaseUpdateMsg'));
                                    workCheckItemViewModel.CheckDate('');
                                    workCheckItemViewModel.TextResult('');
                                    workCheckItemViewModel.IsWorkDone(false);
                                });
                            }
                            else {
                                var array = materials();

                                var postData;
                                var parameters2 = {
                                    SiteId: workCheckItemViewModel.SiteId(),
                                    BusinessFieldId: tempViewModel.dataModel.BusinessFieldId(),
                                    WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                                    CheckItemId: workCheckItemViewModel.CheckItemId()
                                };

                                postData = _.map(array, function (m) {
                                    return {
                                        SiteId: workCheckItemViewModel.SiteId(),
                                        WorkRequestId: workCheckItemViewModel.WorkRequestId(),
                                        MaterialId: m.MaterialId(),
                                        MaterialCount: m.MaterialCount(),
                                        CheckItemId: workCheckItemViewModel.CheckItemId(),
                                        MaterialCode: m.MaterialCode(),
                                        Name: m.Name()
                                    };
                                });

                                // FmsWorkResultCheckItemMaterial 에 저장해야 함
                                BWA.api.post('FmsWorkResultCheckItemMaterial/Update', postData, parameters2).done(function () {
                                    isEditMode(false);
                                    utils.toast.show($G('successDatabaseInsertionMsg'));

                                    materials([]);
                                    refreshListData(); // hcLee 2018 01 29
                                    popupVisible(false);
                                    // hcLee 2016 05 30
                                    viewModel.workResultCheckItemMaterialPopup.refreshMaterialGrid();
                                });
                            }
                        });
                }
            }

            function handleViewShowing() {
                viewModel.imagefileUrl1(null);
                viewModel.imagefileUrl2(null);
            }

            function handleViewShown() {
                if (!isNew()) {
                    // hcLee 2018 01 29 -->
                    if (viewModel.isAddHistoryButton() == false) {
                        FileView(false);
                        FileEdit(false);
                    }
                    else {
                        FileView(false);
                        FileEdit(true);
                    }
                    isEditMode(false);
                    // <-- hcLee 2018 01 29

                    // 중요 !!! hcLee 2015 12 29
                    usedMaterialsDataSource.filter([
                        eq('SiteId', workCheckItemViewModel.SiteId()),
                        and,
                        eq('WorkRequestId', workCheckItemViewModel.WorkRequestId()),
                        and,
                        eq('CheckItemId', workCheckItemViewModel.CheckItemId())
                    ]);
                    //////////////
                    fmsmaterialsDataSource.filter([
                        eq('SiteId', viewModel.dataModel.SiteId())
                    ]);
                    var fmsMaterialsdata;
                    fmsmaterialsDataSource.load().done(function (fmsMaterials) {
                        fmsMaterialsdata = fmsMaterials;

                        usedMaterialsDataSource.load().done(function (dbMaterials) {
                            _.each(dbMaterials, function (sm) {
                                var standard = "";
                                var StockCount = null;
                                for (var i = 0; i < fmsMaterialsdata.length ; i++) {
                                    if (sm.MaterialId() == fmsMaterialsdata[i].MaterialId()) {
                                        standard = fmsMaterialsdata[i].Standard();
                                        if (standard == null)
                                            standard = ""
                                        break;
                                    }
                                }
                                if (viewModel.dataModel.MaterialExdataSource() != null)
                                    MaterialExdataSource(viewModel.dataModel.MaterialExdataSource())
                                if (MaterialExdataSource() !== null) {
                                    for (var i = 0; i < MaterialExdataSource().length; i++) {
                                        if (sm.MaterialId() == MaterialExdataSource()[i].MaterialId) {
                                            StockCount = MaterialExdataSource()[i].StockCount;
                                            break;
                                        }
                                    }
                                }
                                if (StockCount == null) {
                                    materials.push({
                                        SiteId: sm.SiteId,
                                        MaterialId: sm.MaterialId,
                                        Name: sm.Name,
                                        MaterialCode: sm.MaterialCode,
                                        MaterialCount: sm.MaterialCount,
                                        Standard: standard,
                                    });
                                } else {
                                    materials.push({
                                        SiteId: sm.SiteId,
                                        MaterialId: sm.MaterialId,
                                        Name: sm.Name,
                                        MaterialCode: sm.MaterialCode,
                                        MaterialCount: sm.MaterialCount,
                                        MaxMaterialCount: StockCount,
                                        Standard: standard,
                                    });
                                }
                            });
                            materialGridView.refresh();
                            //viewModel.workResultCheckItemMaterialPopup.materialGridView2().refresh();                      
                        });
                        setdownLoadUrl();
                    });
                }// hcLee 2018 01 29 -->             
                else { // 새이력            
                    viewModel.imagefileUrl1(null);
                    viewModel.imagefileUrl2(null);
                    if (viewModel.isAddHistoryButton() == false) {
                        FileView(false);
                        FileEdit(false);
                        isEditMode(false);
                    }
                    else {
                        FileView(true);
                        FileEdit(false);
                        isEditMode(true);
                    }
                }
                // <-- hcLee 2018 01 29
            }

            function handlePopupShowing() {

                $("#gridContainer3").dxDataGrid({
                    paging: {
                        pageSize: 7,
                        enabled: true
                    }
                });
            }

            function handlePopuphidden() {
                //viewModel.isAddHistoryButton(true);//2019.08.26
            }

            // hcLee 2018 01 29 -->
            function setdownLoadUrl() {
                if (_.isNull(viewModel.workCheckItemViewModel.FileId1()) === false) {
                    viewModel.imagefileUrl1('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, BWA.UserInfo.SiteId(), viewModel.workCheckItemViewModel.FileId1()));
                }
                else {
                    viewModel.imagefileUrl1(undefined);
                }
                if (_.isNull(viewModel.workCheckItemViewModel.FileId2()) === false) {
                    viewModel.imagefileUrl2('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, BWA.UserInfo.SiteId(), viewModel.workCheckItemViewModel.FileId2()));
                }
                else {
                    viewModel.imagefileUrl2(undefined);
                }
            }
            // <-- hcLee 2018 01 29

            viewModel.workCheckItemViewModel = workCheckItemViewModel;

            return {
                IsWorkDone: IsWorkDone,
                IsWorkHold: IsWorkHold,
                modifiableMaterialDataGridOptions: modifiableMaterialDataGridOptions,
                workCheckItemViewModel: workCheckItemViewModel,
                popupVisible: popupVisible,
                isNew: isNew,
                MaterialExdataSource: MaterialExdataSource,
                isEditMode: isEditMode,

                // hcLee 2018 01 29 -->
                FileEdit: FileEdit,
                FileView: FileView,
                setdownLoadUrl: setdownLoadUrl,
                // <-- hcLee 2018 01 29

                options: popupOptions,
                toolbarItems: toolbarItems,
                handlePopupButtonSave: handlePopupButtonSave,
                handleViewShown: handleViewShown,
                handleViewShowing: handleViewShowing,
                handlePopupShowing: handlePopupShowing,
                dataModel: dataModel,

                switchWorkDone: function (e) {
                    if (workCheckItemViewModel.IsWorkDone()) {
                        workCheckItemViewModel.IsWorkHold(false);
                    }
                },

                switchWorkHold: function (e) {
                    if (workCheckItemViewModel.IsWorkDone()) {
                        workCheckItemViewModel.IsWorkHold(false);
                    }
                },
                dateboxCheckDate: function (e) {
                    if (e.value == "")
                        var time = e.previousValue;
                    else
                        var time = e.value;
                    workCheckItemViewModel.IsdateboxCheckDate(new Date(time.getFullYear(), time.getMonth(), time.getDate()));
                },
                show: function () {
                    popupVisible(true);
                }
            };
        }
    }
});