BemsWebApplication.WorkOrder = function( params, viewInfo ) { "use strict"; var workOrderDataModel = new BemsWebApplication.FmsWorkOrderViewModel(), workOrderDataModelForView = $.extend( { 'CmCompany_Name': ko.observable(), 'FmsWorkCodeEmergency_Name': ko.observable(), 'CmBusinessField_Name': ko.observable(), 'CmUser_OrderUserId_Name': ko.observable() } , workOrderDataModel ); var selectedUserData = params.selectedUserData = ko.observable(); var targetFacilities = ko.observableArray(); var facilityDataSource = BemsWebApplication.Factory.Facility.getDataSourceWithRelation( BemsWebApplication.db.FmsWorkOrderToFacility ); var emergencyCodeDataSource = BemsWebApplication.db.createDataSource( 'FmsWorkCodeEmergency', true, true ), workOrderDataSource = $DataSource( { dataSourceOptions: { store: BemsWebApplication.db.FmsWorkOrder, select: [ 'SiteId', 'OrderId', 'RequestId', 'EmergencyId', 'ChargeCompanyId', 'BusinessFieldId', 'OrderedDate', 'Title', 'Contents', 'TeamId', 'WorkerPhoneNo', 'WorkerUserName', 'IsSms', 'CmCompany/Name', 'FmsWorkCodeEmergency/Name', 'CmBusinessField/Name', 'CmUser/Name', 'CmUser1/Name' ], expand: [ 'FmsWorkCodeEmergency', 'CmBusinessField', 'CmCompany' ], extendOptions: { multipleItems: [ { id: 'UserId', entries: [ 'CmUser', 'CmUser1' ], fields: [ 'OrderUserId', 'WorkerUserId' ] } ] } } } ), //facilityDataSource = $DataSource( { // dataSourceOptions: { // store: BemsWebApplication.db.FmsWorkResult, // select: [ 'SiteId', 'OrderId', 'RequestId', 'EmergencyId', 'OrderUserId', 'ChargeCompanyId', 'BusinessFieldId', // 'OrderedDate', 'Title', 'Contents', 'TeamId', 'WorkerPhoneNo', 'WorkerUserId', 'WorkerUserName', 'IsSms', // 'CmCompany/Name', // 'FmsWorkCodeEmergency/Name', 'CmBusinessField/Name', 'CmUser/UserId', 'CmUser1/UserId', 'CmUser/Name', 'CmUser1/Name' ], // expand: [ 'FmsWorkCodeEmergency', 'CmBusinessField', 'CmCompany' ], // multiple: [ { id: 'UserId', entries: [ 'CmUser', 'CmUser1'], fields: [ 'OrderUserId', 'WorkerUserId' ] } ] // } //} ), emergencyCodes = ko.observableArray(); var orderButtonsVisibleInDetailPopup = ko.observable(), editOrderButtonsVisibleInDetailPopup = ko.observable(); var popupVisibleInTransfer = ko.observable( false ), popupVisibleInWorkOrder = ko.observable( false ); viewInfo.handleAfterLoadingModelByKey = function( data, dataModel ) { orderButtonsVisibleInDetailPopup( (dataModel.ProgressId() === $Code.WorkProgress.Request) || (dataModel.ProgressId() === $Code.WorkProgress.Transfer) ); var workOrderProgress = dataModel.ProgressId() === $Code.WorkProgress.WorkOrder; editOrderButtonsVisibleInDetailPopup( workOrderProgress ); if( workOrderProgress ) { workOrderDataSource.filter( [ 'SiteId', '=', dataModel.SiteId() ], 'and', [ 'RequestId', '=', dataModel.RequestId() ] ); workOrderDataModel.OrderId( null ); workOrderDataSource.load().done( function( result ) { if( result.length > 0 ) { BWA.DataUtil.copyViewModel( result[0], workOrderDataModelForView ); BWA.DataUtil.copyViewModel( workOrderDataModelForView, workOrderDataModel ); // workOrderDataModel.fromJS( result[0].toJS() ); } facilityDataSource.filter( [ 'SiteId', '=', workOrderDataModel.SiteId() ], 'and', [ 'OrderId', '=', workOrderDataModel.OrderId() ] ); facilityDataSource.load().done( function( facilities ) { targetFacilities( facilities ); } ); } ); } else { workOrderDataModel.WorkerUserName( null ); workOrderDataModel.WorkerUserId( null ); workOrderDataModel.WorkerPhoneNo( null ); workOrderDataModel.ChargeCompanyId( dataModel.ChargeCompanyId() ); workOrderDataModel.BusinessFieldId( dataModel.BusinessFieldId() ); workOrderDataModel.Title( dataModel.Title() ); workOrderDataModel.Contents( dataModel.Content() ); var db = BemsWebApplication.db; var keys = db.extractKeysObject( 'CmFacility', dataModel ); db.CmFacility.byKey( keys ).done( function( f ) { targetFacilities.removeAll(); var v = new BemsWebApplication.CmFacilityViewModel(); v.fromJS( f ); targetFacilities.push( v ); } ); } }; viewInfo.handleViewShowing = function() { emergencyCodeDataSource.load().done( function( result ) { emergencyCodes( result ); if( result.length > 0 ) { workOrderDataModel.EmergencyId( result[0].EmergencyId() ); } }); }; params.workOrderVisible = ko.observable( false ); params.workOrderDataModel = workOrderDataModelForView; workOrderDataModel.OrderId.subscribe( function( value ) { params.workOrderVisible( value !== null ); } ); var facilityFactory = BemsWebApplication.Factory.Facility; var dataGridOptions = { dataSource: targetFacilities, columns: facilityFactory.getColumns( [ { dataField: 'ClassName', width: '40%' }, { dataField: 'Name', width: '40%' }, { dataField: 'FmsWorkCodeProgress_Name', width: '20%' } ] ), cellPrepared: facilityFactory.cellPrepared, height: 400 }; params.facilityDataGridOptions = dataGridOptions; var viewModel = BemsWebApplication.WorkRequest( params, viewInfo ); viewModel.toolbarItems = [ { location: 'before', text: '작업지시' }, { location: 'after', widget: 'button', options: { text: $G('workOrder'), icon: 'save' , visible: orderButtonsVisibleInDetailPopup, clickAction: function() { popupVisibleInWorkOrder( true ); } } }, { location: 'after', widget: 'button', options: { text: $G('cancelWorkOrder'), icon: 'remove' , visible: editOrderButtonsVisibleInDetailPopup, clickAction: handleCancelWorkOrder } }, { location: 'after', widget: 'button', options: { text: $G('edit'), icon: 'save' , visible: editOrderButtonsVisibleInDetailPopup, clickAction: function() { popupVisibleInWorkOrder( true ); } } }, { location: 'after', widget: 'button', options: { text: $G('workTransfer'), icon: 'save', visible: orderButtonsVisibleInDetailPopup, clickAction: function() { popupVisibleInTransfer( true ); } } }, { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: viewModel.handlePopupButtonClose } } ]; selectedUserData.subscribe( function( value ) { workOrderDataModel.WorkerUserId( value.UserId ); workOrderDataModel.WorkerUserName( value.Name ); workOrderDataModel.WorkerPhoneNo( value.MobilePhoneNo ); } ); function handleCancelWorkOrder() { viewModel.dataModel.ProgressId( $Code.WorkProgress.Request ); var removePromise = BemsWebApplication.db.removeFromViewModel( 'FmsWorkOrder', workOrderDataModel ); workOrderDataModel.OrderId( null ); $.when( viewModel.update(), removePromise ).done( function() { viewModel.popupVisible( false ); utils.toast.show( '작업지시가 취소 되었습니다.' ); } ); } function handleTransferPopupButtonSave() { viewModel.dataModel.ProgressId( $Code.WorkProgress.Transfer ); viewModel.update(); popupVisibleInTransfer( false ); viewModel.popupVisible( false ); } viewModel.toolbarItemsInTransferPopup = [ { location: 'before', text: $G('workTransfer') }, { location: 'after', widget: 'button', options: { text: $G('setup'), icon: 'save' , clickAction: handleTransferPopupButtonSave } }, { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: function() { popupVisibleInTransfer( false ); } } } ]; viewModel.popupOptionsInTransfer = { width: '600px', height: 'auto', visible: popupVisibleInTransfer, closeOnOutsideClick: false, animation: utils.popup.createAnimation() }; viewModel.emergencyCodes = emergencyCodes; BemsWebApplication.Factory.WorkOrderPopup.create( viewModel, targetFacilities, workOrderDataModel, popupVisibleInWorkOrder, editOrderButtonsVisibleInDetailPopup, dataGridOptions ); return viewModel; };