$(function () { 'use strict'; BemsWebApplication.Popup.CivilComplaint = { create: function (viewInfo, viewModel, executionPlanOptions) { var isInnerCheckWorkType = ko.observable(false); var FmsWorkScheduleDataSource = BemsWebApplication.db.createDataSource('FmsWorkSchedule'); var facilities = ko.observableArray(), facilitiesInView = ko.observableArray(), businessFields = ko.observableArray(), isVisibleEditWorkOrderButton = ko.observable(), isVisibleButtons = ko.observable(); var eq = BWA.DataUtil.constructEqualFilter; var and = BWA.DataUtil.andFilter; var workResultCheckItems = ko.observableArray(); var workResultCheckItemDataSource = BemsWebApplication.db.createDataSource('FmsWorkResultCheckItem', true, true, false, true); if (executionPlanOptions == null) { isVisibleEditWorkOrderButton = ko.observable(); isVisibleButtons = ko.observable(); } else { isVisibleEditWorkOrderButton = executionPlanOptions ? executionPlanOptions.isVisibleEditWorkOrderButton : undefined; isVisibleButtons = executionPlanOptions ? executionPlanOptions.isVisibleButtons : undefined; } var facilitySearchPopup = null, facilityFactory = BWA.Factory.Facility, facilityGridView = ko.observable(undefined), facilityDataGridOptions, modifiableFacilityDataGridOptions = undefined, isWorkOrder = ko.observable(false), isReject = ko.observable(false); var workTypeId = null; //= $Code.WorkType.CIVIL_COMPLAINT; var facilityRequestDataSource = facilityFactory.getBasicDataSourceRef({ dbModeIId: 'FmsWorkRequestToFacility', primaryKeyDataField: 'WorkRequestId' }); function isValidateWithFunction(errorMessage) { if (_.isEmpty(facilities())) { errorMessage.message = '점검 계획을 위한 시설이 없습니다.'; return false; } return true; } function handleBeforePopupShowingPromise(isNewInPopup, dataViewModel, clickRowData) { var workProgressId; if (isNewInPopup()) { workProgressId = $Code.WorkProgress.WORK_PLAN; } else { workProgressId = clickRowData.WorkProgressId(); } isVisibleEditWorkOrderButton(workProgressId === $Code.WorkProgress.WORK_STANDBY); if (isNewInPopup()) { isVisibleButtons(false); } else { isVisibleButtons(workProgressId === $Code.WorkProgress.WORK_PLAN); } isWorkOrder(workProgressId >= $Code.WorkProgress.WORK_STANDBY); isReject(workProgressId === $Code.WorkProgress.WORK_POSTPONE); } function handlePopupShowing(isNewInPopup, dataModel, selectedData) { $("#gridContainer2").dxDataGrid({ paging: { pageSize: 10, enabled: true } }); $("#gridContainer3").dxDataGrid({ paging: { pageSize: 10, enabled: true } }); viewModel.visibleEditButton(false); viewModel.visibleDeleteButton(false); var userInfo = BWA.UserInfo; if (isNewInPopup()) { if (isInnerCheckWorkType()) { workTypeId = $Code.WorkType.INNER_CHECK; } else { workTypeId = $Code.WorkType.CIVIL_COMPLAINT; } dataModel.BusinessFieldName(userInfo.BusinessFieldName()); dataModel.BusinessFieldId(userInfo.BusinessFieldId()); dataModel.RequestUserName(userInfo.Name()); dataModel.RequestUserId(userInfo.UserId()); dataModel.WorkTypeId(workTypeId); BWA.db.FmsWorkCodeType.byKey(BWA.DataUtil.pickKeys(dataModel, 'FmsWorkCodeType')).done(function (workType) { dataModel.WorkTypeName(workType.Name); }); var now = moment(); dataModel.RequestDate(now.toDate()); dataModel.StartWorkDate(BWA.DataUtil.getDateFromDateTime(now)); dataModel.WorkProgressId($Code.WorkProgress.WORK_PLAN); BWA.db.FmsWorkCodeProgress.byKey(BWA.DataUtil.pickKeys(dataModel, 'FmsWorkCodeProgress')).done(function (workProgress) { dataModel.WorkProgressName(workProgress.Name); }); } } function handlePopupShown(isEditMode, isNew, dataViewModel) { } // 점검계획 정보가 저장된 후에 호출 된다. // 등록이면 responseKey가 있고, 수정이면 없다. function handleAfterSave(responseKey) { var dataModel = viewModel.dataModel; var siteId, workRequestId, workScheduleId; siteId = dataModel.SiteId(); workRequestId = dataModel.WorkRequestId(); workScheduleId = dataModel.WorkScheduleId(); var array = facilities(); var Schedulearray = array; if (dataModel.WorkTypeId() < $Code.WorkType.CIVIL_COMPLAINT) { FmsWorkScheduleDataSource.filter([ eq('SiteId', siteId), and, eq('WorkScheduleId', workScheduleId)]); $.when(FmsWorkScheduleDataSource.load()) .done(function (Result) { if (Result.length != 0) { var Data = { SiteId: dataModel.SiteId(), WorkScheduleId: dataModel.WorkScheduleId(), WorkTypeId: dataModel.WorkTypeId(), BusinessFieldId: dataModel.BusinessFieldId(), Name: dataModel.Title(), InspectionAgencyId: Result[0].InspectionAgencyId(), CycleSize: Result[0].CycleSize(), CycleUnitId: Result[0].CycleUnitId(), HolidayWorkTypeId: Result[0].HolidayWorkTypeId(), WorkDueDate: dataModel.StartWorkDate(), UpdateUserId: Result[0].UpdateUserId(), IsUse: Result[0].IsUse(), IsAutoOrder: Result[0].IsAutoOrder(), Content: dataModel.Content() } var keys = BWA.db.extractKeysObject('FmsWorkSchedule', dataModel); BWA.db.FmsWorkSchedule.update(keys, Data).done(function () { if (_.isEmpty(Schedulearray)) { var parametersSchedule = { SiteId: siteId, WorkScheduleId: workScheduleId }; BWA.api.post('FmsWorkScheduleToFacility/Delete', null, parametersSchedule); return; } var parametersSchedule = { SiteId: siteId, WorkScheduleId: workScheduleId }; var postDataSchedule = _.map(Schedulearray, function (f) { return { SiteId: siteId, WorkScheduleId: workScheduleId, FacilityCode: f.FacilityCode() }; }); BWA.api.post('FmsWorkScheduleToFacility/Insert', postDataSchedule, parametersSchedule); }); } }); } if (_.isEmpty(array)) { if (_.isUndefined(responseKey)) { var parametersRequest = { SiteId: siteId, WorkRequestId: workRequestId }; if (facilitiesInView()[0] != null) { if (facilitiesInView()[0].WorkRequestId() == workRequestId) BWA.api.post('FmsWorkRequestToFacility/Delete', null, parametersRequest); } } return; } if (!_.isUndefined(responseKey)) { siteId = responseKey.SiteId; workRequestId = responseKey.WorkRequestId; } var parametersRequest = { SiteId: siteId, WorkRequestId: workRequestId }; var postDataRequest = _.map(array, function (f) { return { SiteId: siteId, WorkRequestId: workRequestId, FacilityCode: f.FacilityCode() }; }); BWA.api.post('FmsWorkRequestToFacility/Insert', postDataRequest, parametersRequest); } function handleAfterLoadingModelByKey(data, dataViewModel, isNewInPopup) { if (dataViewModel.WorkProgressId() >= $Code.WorkProgress.WORK_PLAN) { if (dataViewModel.WorkTypeId() == $Code.WorkType.INNER_CHECK) { // WorkType 이 내부점검인 경우 수정/삭제할 수 있어야 함 viewModel.visibleEditButton(true); viewModel.visibleDeleteButton(true); } else { viewModel.visibleEditButton(true); viewModel.visibleDeleteButton(false); } } facilityRequestDataSource.filter([ eq('SiteId', dataViewModel.SiteId()), and, //eq('BusinessFieldId', dataViewModel.BusinessFieldId()), //and, eq('WorkRequestId', dataViewModel.WorkRequestId()) ]); facilityRequestDataSource.load().done(function (dbFacilities) { facilitiesInView(dbFacilities); }); if (!isNewInPopup()) { workResultCheckItemDataSource.filter([ eq('SiteId', dataViewModel.SiteId()), and, eq('WorkRequestId', dataViewModel.WorkRequestId()) ]); workResultCheckItemDataSource.load().done(function (dbWorkCheckItems) { workResultCheckItems(dbWorkCheckItems); }); viewModel.dataModel.selectedItemCheckDate(""); viewModel.dataModel.selectedItemTextResult(""); viewModel.dataModel.selectedItemCheckItemId(0); } } function handleBeforeShowingPopupForEdit(rowData, dataViewModel) { dataViewModel.BusinessFieldName(rowData['CmBusinessField/Name']()); dataViewModel.WorkTypeName(rowData['FmsWorkCodeType/Name']()); dataViewModel.RequestUserName(rowData['CmUser/Name']()); dataViewModel.WorkProgressName(rowData['FmsWorkCodeProgress/Name']()); dataViewModel.RejectUserName($KoValue(rowData['CmUser1/Name'])); } viewModel.popupVisible.subscribe(function (visible) { //if (!visible) { if (visible) { facilitiesInView([]); facilities([]); } }); viewModel.isEditModeInPopup.subscribe(function (isEditMode) { if (isEditMode) { facilities(facilitiesInView.slice(0)); } else { if (viewModel.dataModel.WorkTypeId() < $Code.WorkType.CIVIL_COMPLAINT) viewModel.visibleDeleteButton(false); } }); viewModel.dataModel.WorkTypeName = ko.observable(); viewModel.dataModel.BusinessFieldName = ko.observable(); viewModel.dataModel.RequestUserName = ko.observable(); viewModel.dataModel.RejectUserName = ko.observable(); viewModel.dataModel.WorkProgressName = ko.observable(); viewModel.dataModel.selectedItemCheckDate = ko.observable(); viewModel.dataModel.selectedItemTextResult = ko.observable(); viewModel.dataModel.selectedItemCheckItemId = ko.observable(); viewModel.workResultCheckItems = workResultCheckItems; viewModel.refreshListData = refreshListData; viewModel.onItemClick = onItemClick; 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 workRequestId = viewModel.dataModel.WorkRequestId(); _.each(selectedFacilities, function (sf) { // 어차피 SiteId와 BusinessField는 동일 할 수 밖에 없으므로 비교하지 않는다. var found = _.some(facilities(), function (f) { try { return f.FacilityCode() === sf.FacilityCode(); } catch (e) { return f.FacilityCode() === sf.FacilityCode; } }); if (found) return; //2019.08.08 수정 try { facilities.push({ SiteId: ko.observable(sf.SiteId()), WorkRequestId: ko.observable(workRequestId), 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), WorkRequestId: ko.observable(workRequestId), 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(); } }); function refreshListData() { //workResultCheckItemDataSource.filter([ // eq('SiteId', dataViewModel.SiteId()), // and, // eq('WorkRequestId', dataViewModel.WorkRequestId()) //]); //workResultCheckItemDataSource.load().done(function (dbWorkCheckItems) { // workResultCheckItems(dbWorkCheckItems); //}); //viewModel.dataModel.selectedItemCheckDate(""); //viewModel.dataModel.selectedItemTextResult(""); //viewModel.dataModel.selectedItemCheckItemId(0); } function onItemClick(e) { viewModel.dataModel.selectedItemCheckDate(e.itemData.CheckDate()); viewModel.dataModel.selectedItemTextResult(e.itemData.TextResult()); viewModel.dataModel.selectedItemCheckItemId(e.itemData.CheckItemId()); if (viewModel.workResultCheckItemMaterialPopup === undefined) { return; } viewModel.workResultCheckItemMaterialPopup.materials2([]); viewModel.workResultCheckItemMaterialPopup.materials2DataSource.filter([ eq('SiteId', viewModel.dataModel.SiteId()), and, eq('WorkRequestId', viewModel.dataModel.WorkRequestId()), and, eq('CheckItemId', e.itemData.CheckItemId()) ]); viewModel.workResultCheckItemMaterialPopup.materials2DataSource.load().done(function (dbMaterials) { _.each(dbMaterials, function (sm) { viewModel.workResultCheckItemMaterialPopup.materials2.push({ SiteId: sm.SiteId, //PurchaseRequestId: ko.observable(purchaseRequestId), MaterialId: sm.MaterialId, Name: sm.Name, MaterialCode: sm.MaterialCode, MaterialCount: sm.MaterialCount //FinalPrice: sm.FinalPrice, }); }); }); } return { workResultCheckItems: workResultCheckItems, refreshListData: refreshListData, isInnerCheckWorkType: isInnerCheckWorkType, facilitySearchPopup: facilitySearchPopup, facilities: facilitiesInView, businessFields: businessFields, isReject: isReject, isWorkOrder: isWorkOrder, isValidateWithFunction: isValidateWithFunction, facilityDataGridOptions: facilityDataGridOptions, modifiableFacilityDataGridOptions: modifiableFacilityDataGridOptions, handleAfterLoadingModelByKey: handleAfterLoadingModelByKey, handleAfterSave: handleAfterSave, handlePopupShowing: handlePopupShowing, handlePopupShown: handlePopupShown, handleBeforeShowingPopupForEdit: handleBeforeShowingPopupForEdit, handleDeleteSelectedFacilities: BWA.Popup.Facility.getDeleteSelectedFacilitiesFunc(facilityGridView, facilities), handleBeforePopupShowingPromise: handleBeforePopupShowingPromise }; } } });