$(function () { 'use strict'; BemsWebApplication.Popup.RegularCheckSchedule = { create: function (viewInfo, viewModel, legalCheckOptions, anyCheckOptions) { var facilities = ko.observableArray(), facilitiesInView = ko.observableArray(), businessFields = ko.observableArray(), viewModeInPopup = ko.observable(true), isEditModeInPopup = ko.observable(false); var facilitySearchPopup = null, facilityFactory = BWA.Factory.Facility, purchaseProgressCode = BWA.Code.PurchaseProgress, facilityGridView = ko.observable(), facilityDataGridOptions, modifiableFacilityDataGridOptions = undefined; var facilityDataSource = facilityFactory.getBasicDataSourceRef({ dbModeIId: 'FmsWorkScheduleToFacility', primaryKeyDataField: 'WorkScheduleId' }); function isValidateWithFunction(errorMessage) { if (_.isEmpty(facilities())) { errorMessage.message = '점검 계획을 위한 시설이 없습니다.'; return false; } return true; } function handlePopupShowing(isNewInPopup, dataModel) { $("#gridContainer2").dxDataGrid({ paging: { pageSize: 8, enabled: true } }); $("#gridContainer3").dxDataGrid({ paging: { pageSize: 8, enabled: true } }); var userInfo = BWA.UserInfo; if (isNewInPopup()) { //if (userInfo.isDependBusinessField(viewInfo.viewName)) { // BWA.db.CmBusinessField.byKey({ // SiteId: userInfo.SiteId(), // BusinessFieldId: userInfo.BusinessFieldId() // }).done(function(businessField) { // dataModel.BusinessFieldName(businessField.Name); // }); //} dataModel.UpdateUserId(userInfo.UserId()); dataModel.UpdateUserName(userInfo.Name()); dataModel.BusinessFieldId(userInfo.BusinessFieldId()); dataModel.BusinessFieldName(userInfo.BusinessFieldName()); //dataModel.WorkDueDate(BWA.DataUtil.getDateFromDateTime(moment().add(1,'d'))); dataModel.WorkDueDate(BWA.DataUtil.getDateFromDateTime(moment())); } } // 점검계획 정보가 저장된 후에 호출 된다. // 등록이면 responseKey가 있고, 수정이면 없다. function handleAfterSave(responseKey) { var array = facilities(); // JD : Facility 가 없는 경우도 있음 //if (_.isEmpty(array)) { // return; //} var siteId, workScheduleId;//, businessFieldId; if (_.isUndefined(responseKey)) { var dataModel = viewModel.dataModel; siteId = dataModel.SiteId(); //businessFieldId = dataModel.BusinessFieldId(); workScheduleId = dataModel.WorkScheduleId(); } else { siteId = responseKey.SiteId; //businessFieldId = responseKey.BusinessFieldId; workScheduleId = responseKey.WorkScheduleId; } var postData; var parameters = { SiteId: siteId, //BusinessFieldId: businessFieldId, WorkScheduleId: workScheduleId }; postData = _.map(array, function (f) { return { SiteId: siteId, //BusinessFieldId: businessFieldId, WorkScheduleId: workScheduleId, FacilityCode: f.FacilityCode() }; }); BWA.api.post('FmsWorkScheduleToFacility/Insert', postData, parameters); } function handleAfterLoadingModelByKey(data, dataViewModel) { var eq = BWA.DataUtil.constructEqualFilter; var and = BWA.DataUtil.andFilter; facilityDataSource.filter([ eq('SiteId', dataViewModel.SiteId()), and, //eq('BusinessFieldId', dataViewModel.BusinessFieldId()), //and, eq('WorkScheduleId', dataViewModel.WorkScheduleId()) ]); facilityDataSource.load().done(function (dbFacilities) { facilitiesInView(dbFacilities); }); } function handleBeforeShowingPopupForEdit(rowData, dataViewModel) { dataViewModel.CycleUnitName(rowData['FmsWorkCodeCycleUnit/Name']()); dataViewModel.HolidayWorkTypeName(rowData['FmsWorkCodeHolidayWorkType/Name']()); dataViewModel.BusinessFieldName(rowData['CmBusinessField/Name']()); dataViewModel.UpdateUserName(rowData['CmUser/Name']()); if (!_.isUndefined(legalCheckOptions)) { if (_.isUndefined(rowData['CmPartner/Name'])) //viewModel.dataModel.InspectionAgencyName(""); viewModel.dataModel.InspectionAgencyName(null); else viewModel.dataModel.InspectionAgencyName(rowData['CmPartner/Name']()); } if (!_.isUndefined(anyCheckOptions)) { if (_.isUndefined(rowData['CmPartner/Name'])) //viewModel.dataModel.InspectionAgencyName(""); viewModel.dataModel.InspectionAgencyName(null); else viewModel.dataModel.InspectionAgencyName(rowData['CmPartner/Name']()); } } //viewModel.popupVisible.subscribe(function(visible) { // if (!visible) { // facilitiesInView([]); // } //}); viewModel.isEditModeInPopup.subscribe(function (isEditMode) { //추가 if (isEditMode) { facilities(facilitiesInView.slice(0)); } }); if (!_.isUndefined(legalCheckOptions)) { viewModel.dataModel.InspectionAgencyName = ko.observable(); } if (!_.isUndefined(anyCheckOptions)) { viewModel.dataModel.InspectionAgencyName = ko.observable(); } viewModel.dataModel.CycleUnitName = ko.observable(); viewModel.dataModel.HolidayWorkTypeName = ko.observable(); viewModel.dataModel.BusinessFieldName = ko.observable(); viewModel.dataModel.UpdateUserName = ko.observable(); facilityDataGridOptions = BWA.Popup.Facility.getReadOnlyDataGridOptions(facilitiesInView, viewModel.viewModeInPopup); modifiableFacilityDataGridOptions = BWA.Popup.Facility.getModifiableDataGridOptions(facilities, viewModel.isEditModeInPopup, facilityGridView); viewModel.facilitySearchPopup = facilitySearchPopup = BWA.Popup.Facility.create(viewModel, undefined, { isMultipleSelect: true, onSelectedFacilities: function (selectedFacilities) { var workScheduleId = viewModel.dataModel.WorkScheduleId(); _.each(selectedFacilities, function (sf) { // 어차피 SiteId와 BusinessField는 동일 할 수 밖에 없으므로 비교하지 않는다. // JD : 팝업에서 전체선택시 추가로 하면 오류 발생함. 이에 대한 회피 코드로 try-catch // JD : 근본적인 원인은 시간 관계상 차후로 넘김 var found = _.some(facilities(), function (f) { try { return f.FacilityCode() === sf.FacilityCode(); } catch (e) { return f.FacilityCode() === sf.FacilityCode; } }); if (found) return; //facilities.push({ // SiteId: sf.SiteId, // WorkScheduleId: ko.observable(workScheduleId), // FacilityCode: sf.FacilityCode, // Name: sf.Name, // FirstClassId: sf.FirstClassId, // SecondClassId: sf.SecondClassId, // ThirdClassId: sf.ThirdClassId, //}); //2019.08.08 수정 try { facilities.push({ SiteId: ko.observable(sf.SiteId()), WorkScheduleId: ko.observable(workScheduleId), FacilityCode: ko.observable(sf.FacilityCode()), Name: ko.observable(sf.Name()), FirstClassId: ko.observable(sf.FirstClassId()), SecondClassId: ko.observable(sf.SecondClassId()), ThirdClassId: ko.observable(sf.ThirdClassId()), }); } catch (e) { facilities.push({ SiteId: ko.observable(sf.SiteId), WorkScheduleId: ko.observable(workScheduleId), FacilityCode: ko.observable(sf.FacilityCode), Name: ko.observable(sf.Name), FirstClassId: ko.observable(sf.FirstClassId), SecondClassId: ko.observable(sf.SecondClassId), ThirdClassId: ko.observable(sf.ThirdClassId), }); } }); facilityGridView().refresh(); } }); return { facilities: facilities, facilitiesInView: facilitiesInView, facilitySearchPopup: facilitySearchPopup, businessFields: businessFields, isValidateWithFunction: isValidateWithFunction, facilityDataGridOptions: facilityDataGridOptions, modifiableFacilityDataGridOptions: modifiableFacilityDataGridOptions, handleAfterLoadingModelByKey: handleAfterLoadingModelByKey, handleAfterSave: handleAfterSave, handlePopupShowing: handlePopupShowing, handleBeforeShowingPopupForEdit: handleBeforeShowingPopupForEdit, handleDeleteSelectedFacilities: BWA.Popup.Facility.getDeleteSelectedFacilitiesFunc(facilityGridView, facilities), viewModeInPopup: viewModeInPopup, isEditModeInPopup: isEditModeInPopup }; } } });