Files
SISBusiness/SISBusiness.Module.Win/Controllers/InLineEditVC.vb
T
2017-03-26 20:00:03 +02:00

557 lines
26 KiB
VB.net

Imports System
Imports System.ComponentModel
Imports System.Collections.Generic
Imports System.Diagnostics
Imports System.Text
Imports DevExpress.ExpressApp
Imports DevExpress.ExpressApp.Actions
Imports DevExpress.Persistent.Base
Imports DevExpress.ExpressApp.Win.Editors
Imports DevExpress.ExpressApp.ConditionalAppearance
Imports DevExpress.ExpressApp.Editors
Imports DevExpress.ExpressApp.Model
Imports DevExpress.Data.Filtering
Imports DevExpress.ExpressApp.Utils
Imports DevExpress.ExpressApp.TreeListEditors.Win
Imports DevExpress.ExpressApp.Win.Core
Imports DevExpress.Xpo
Imports DevExpress.XtraEditors.Repository
Imports DevExpress.ExpressApp.Validation
Public Class InLineEditVC
Inherits DevExpress.ExpressApp.ViewController(Of ListView)
Private _GridListEditor As GridListEditor
Private _TreeListEditor As TreeListEditor
Private _HandlerCreated As Boolean = False
Private appearanceController As AppearanceController
Public Sub New()
MyBase.New()
InitializeComponent()
RegisterActions(components)
End Sub
Protected Overrides Sub OnActivated()
MyBase.OnActivated()
End Sub
Protected Overrides Sub OnViewControlsCreated()
MyBase.OnViewControlsCreated()
Dim _ListView As ListView = CType(View, ListView)
_GridListEditor = TryCast(_ListView.Editor, GridListEditor)
If _GridListEditor IsNot Nothing Then
_GridListEditor.AllowEdit = True
Dim _ic As New DevExpress.Utils.ImageCollection
_ic.AddImage(ImageLoader.Instance.GetImageInfo("data_edit").Image, "data_edit")
_GridListEditor.GridView.Images = _ic
AddHandler _GridListEditor.ColumnCreated, AddressOf GridListEditor_ColumnCreated
_HandlerCreated = True
For Each column As XafGridColumnWrapper In _GridListEditor.Columns
UpdateColumnProperties(column.Column, column.PropertyName, _GridListEditor)
Next
AddHandler _GridListEditor.GridView.CustomColumnDisplayText, AddressOf GridView_CustomColumnDisplayText
'AddHandler _GridListEditor.GridView.CustomDrawCell
Dim _IModelListViewExtender As IModelListViewExtender = TryCast(View.Model, IModelListViewExtender)
If _IModelListViewExtender IsNot Nothing Then
If _GridListEditor.GridView IsNot Nothing Then
_GridListEditor.GridView.GroupFormat = _IModelListViewExtender.GridViewGroupFormat
End If
End If
End If
_TreeListEditor = TryCast(_ListView.Editor, TreeListEditor)
If _TreeListEditor IsNot Nothing Then
_TreeListEditor.TreeList.OptionsBehavior.Editable = True
_TreeListEditor.TreeList.OptionsFilter.AllowColumnMRUFilterList = True
_TreeListEditor.TreeList.OptionsFilter.AllowFilterEditor = True
_TreeListEditor.TreeList.OptionsFilter.AllowMRUFilterList = True
If TryCast(View.Model, IModelListViewExtender) IsNot Nothing Then
If TryCast(View.Model, IModelListViewExtender).TreeListEnableFiltering Then
_TreeListEditor.TreeList.OptionsBehavior.EnableFiltering = True
End If
End If
For Each _RepositoryItem As RepositoryItem In _TreeListEditor.TreeList.RepositoryItems
_RepositoryItem.ReadOnly = False
Next _RepositoryItem
For Each column As TreeListColumnWrapper In _TreeListEditor.Columns
Dim modelColumn As IModelColumnExtender = Nothing
If column.PropertyName IsNot Nothing Then
DisableInlineEdit(column.Column)
If column.PropertyName.Contains(".") Then
Dim NewName As String() = column.PropertyName.Split(New Char() {"."c}, StringSplitOptions.RemoveEmptyEntries)
modelColumn = TryCast(CType(View.Model.Columns, IModelList(Of IModelColumn))(NewName(NewName.Length - 1)), IModelColumnExtender)
Else
modelColumn = TryCast(CType(View.Model.Columns, IModelList(Of IModelColumn))(column.PropertyName), IModelColumnExtender)
End If
If modelColumn IsNot Nothing Then
If modelColumn.InLineEdit = True Then
EnableInlineEdit(column.Column)
End If
If modelColumn.InLineEditAutoCommit Then
AddHandler _TreeListEditor.TreeList.CellValueChanged, AddressOf TreeListEditor_CellValueChanged
AddHandler _TreeListEditor.TreeList.ShownEditor, AddressOf TreeListEditor_ShownEditor
_TreeListEditor.TreeList.OptionsBehavior.ImmediateEditor = True
End If
End If
End If
Next
End If
End Sub
Protected Overrides Sub OnDeactivated()
MyBase.OnDeactivated()
If _HandlerCreated Then
If _GridListEditor IsNot Nothing Then
RemoveHandler _GridListEditor.ColumnCreated, AddressOf GridListEditor_ColumnCreated
If _GridListEditor.GridView IsNot Nothing Then RemoveHandler _GridListEditor.GridView.CustomColumnDisplayText, AddressOf GridView_CustomColumnDisplayText
End If
End If
End Sub
Private Sub GridListEditor_ColumnCreated(sender As Object, e As ColumnCreatedEventArgs)
Dim _GridListEditor = DirectCast(sender, GridListEditor)
UpdateColumnProperties(e.Column, e.ColumnInfo.PropertyName, _GridListEditor)
End Sub
Private Sub UpdateColumnProperties(gridColumn As DevExpress.XtraGrid.Columns.GridColumn, name As String, GridListEditor As GridListEditor)
'//Tiltás -----------------------------------------------------------------------------------------
DisableInlineEdit(gridColumn)
'--------------------------------------------------------------------------------------------------
'//Engedélyezés -----------------------------------------------------------------------------------
Select Case View.Id
Case "GLRows_ListView_Account"
Select Case name
Case "NoteRows", "Controlling", "CostHolder", "CostPlace", "JobNumberObjects", "UniqueObjects"
EnableInlineEdit(gridColumn)
End Select
Case "CRMEstate_Leads_CRMEstate_Leads_Immovables_ListView", "CRMEstate_Opportunity_CRMEstate_Opportunity_Immovables_ListView"
Select Case name
Case "AreaPriceNettoHUF", "AreaPriceNettoDEV", "AreaPriceDivide"
EnableInlineEdit(gridColumn)
End Select
Case "StorageOutRowsInRows_ListView_DeliveryNote_OrderIn", "StorageOutRowsInRows_ListView_DeliveryNote_Transfer", "DeliveryNoteOutRows_ListView_Invoice"
Select Case name
Case "QTT_Will"
EnableInlineEdit(gridColumn)
End Select
Case "ImmovablesPriceListHeader_ImmovablesPriceListRowsA_ListView", "ImmovablesPriceListHeader_ImmovablesPriceListRowsO_ListView", _
"ImmovablesPriceListHeader_ImmovablesPriceListRowsG_ListView", "ImmovablesPriceListHeader_ImmovablesPriceListRowsC_ListView"
Select Case name
Case "ListPriceBruttoDEV", "ListPriceBruttoHUF", "ListPriceBruttoDEVRent", "ListPriceBruttoHUFRent"
EnableInlineEdit(gridColumn)
End Select
Case "InvoiceHeader_InvoiceRows_ListView"
Dim _ListView As ListView = CType(View, ListView)
Dim _PropertyCollectionSource As PropertyCollectionSource = CType(_ListView.CollectionSource, PropertyCollectionSource)
Dim _InvoiceHeader As InvoiceHeader = CType(_PropertyCollectionSource.MasterObject, InvoiceHeader)
If _InvoiceHeader.IsEditable = True Then
Select Case name
Case "ShortName", "InvoicePeriod", "CustomsTariffs", "Description", "Units", "Controlling"
EnableInlineEdit(gridColumn)
End Select
End If
Case "OrderInHeader_OrderInRowsOther_ListView"
Dim _ListView As ListView = CType(View, ListView)
Dim _PropertyCollectionSource As PropertyCollectionSource = CType(_ListView.CollectionSource, PropertyCollectionSource)
Dim _OrderInHeader As OrderInHeader = CType(_PropertyCollectionSource.MasterObject, OrderInHeader)
If _OrderInHeader.IsEditable = True Then
Select Case name
Case "QTT", "Description"
EnableInlineEdit(gridColumn)
End Select
If _OrderInHeader.OrderInParameters.CurrencyName.ShortName = "HUF" Then
If name = "DiscountPriceHUF" Then
EnableInlineEdit(gridColumn)
End If
Else
If name = "DiscountPriceDEV" Then
EnableInlineEdit(gridColumn)
End If
End If
End If
Case "OfferInHeader_OfferInRows_ListView"
Dim _ListView As ListView = CType(View, ListView)
Dim _PropertyCollectionSource As PropertyCollectionSource = CType(_ListView.CollectionSource, PropertyCollectionSource)
Dim _OfferInHeader As OfferInHeader = CType(_PropertyCollectionSource.MasterObject, OfferInHeader)
If _OfferInHeader.IsEditable = True Then
Select Case name
Case "QTT"
EnableInlineEdit(gridColumn)
End Select
If _OfferInHeader.CurrencyName.ShortName = "HUF" Then
If name = "FinalPriceHUF" Then
EnableInlineEdit(gridColumn)
End If
Else
If name = "FinalPriceDEV" Then
EnableInlineEdit(gridColumn)
End If
End If
End If
Case "OfferOutHeader_OfferOutRows_ListView"
Dim _ListView As ListView = CType(View, ListView)
Dim _PropertyCollectionSource As PropertyCollectionSource = CType(_ListView.CollectionSource, PropertyCollectionSource)
Dim _OfferOutHeader As OfferOutHeader = CType(_PropertyCollectionSource.MasterObject, OfferOutHeader)
CriteriaOperator.Parse("")
If _OfferOutHeader.IsEditable = True Then
Select Case name
Case "QTT", "Description", "RowGroup1", "RowGroup2", "DescriptionPrivate"
EnableInlineEdit(gridColumn)
End Select
If _OfferOutHeader.CurrencyName.ShortName = "HUF" Then
If name = "FinalPriceHUF" Then
EnableInlineEdit(gridColumn)
End If
Else
If name = "FinalPriceHUF" Then
EnableInlineEdit(gridColumn)
End If
End If
End If
Case "OrderOutHeader_OrderOutRows_ListView"
Dim _ListView As ListView = CType(View, ListView)
Dim _PropertyCollectionSource As PropertyCollectionSource = CType(_ListView.CollectionSource, PropertyCollectionSource)
Dim _OrderOutHeader As OrderOutHeader = CType(_PropertyCollectionSource.MasterObject, OrderOutHeader)
If _OrderOutHeader.IsEditable = True Then
Select Case name
Case "Products"
EnableInlineEdit(gridColumn)
End Select
End If
Case "ContractRows_ListView_Invoice_Not_MileStone"
Dim _ListView As ListView = CType(View, ListView)
Dim _PropertyCollectionSource As PropertyCollectionSource = TryCast(_ListView.CollectionSource, PropertyCollectionSource)
Select Case name
Case "NettoPriceHUF", "NettoPriceDEV", "ShortName", "Description", "InvoicePeriod", "Controlling", "PaymentOption", "VAT", "CurrencyRate", "QTT", "DateExecution"
EnableInlineEdit(gridColumn)
End Select
Case "ProductFinder_ProductSelected_ListView"
Select Case name
Case "QTT", "Description"
EnableInlineEdit(gridColumn)
End Select
Case "InventoryHeader_InventorySC_ListView"
Select Case name
Case "QTT_Found"
EnableInlineEdit(gridColumn)
End Select
Case "StorageInRows_ListView", "StorageInHeader_StorageInRows_ListView"
Select Case name
Case "QTT_Will"
EnableInlineEdit(gridColumn)
End Select
Case "Subcontractor_SubcontractorCustomers_ListView"
Select Case name
Case "Workplace"
EnableInlineEdit(gridColumn)
End Select
Case "WorkSheet_Header_WorkSheet_Rows_ListView"
Select Case name
Case "RowGroup1", "RowGroup2", "ShortName", "Description", "Quantity"
EnableInlineEdit(gridColumn)
End Select
Case "WorkSheet_Header_Worksheet_CostRows_ListView"
Select Case name
Case "FinalPriceHUF_Out", "FinalPriceDEV_Out", "Controlling"
EnableInlineEdit(gridColumn)
End Select
Case "BankImportHeaderSum_BankImportNameParameters_ListView"
Select Case name
Case "Controlling", "ChartOfAccounts"
EnableInlineEdit(gridColumn)
End Select
Case "GLRows_ListView_Bank"
Select Case name
Case "NoteRows", "Controlling", "CostHolder", "CostPlace", "JobNumberObjects", "UniqueObjects"
EnableInlineEdit(gridColumn)
End Select
Case "GLRowsDivideH_GLRowsDivideR_ListView_ConnectionDivide", "GLRowsDivideH_GLRowsDivideR_ListView"
Select Case name
Case "AmountHUF", "AmountDEV", "Controlling", "CostHolder", "CostPlace", "UniqueObjects", "JobNumberObjects"
EnableInlineEdit(gridColumn)
End Select
Case "GLRows_ListView_Cassa"
Select Case name
Case "NoteRows", "Controlling", "CostHolder", "CostPlace", "JobNumberObjects", "UniqueObjects"
EnableInlineEdit(gridColumn)
End Select
Case "GLRows_ListView_Compensation"
Select Case name
Case "NoteRows", "Controlling", "CostHolder", "CostPlace", "JobNumberObjects", "UniqueObjects"
EnableInlineEdit(gridColumn)
End Select
Case "LiquidAssetsReturnHeader_LiquidAssetsReturnDenomination_ListView"
Select Case name
Case "DenominationValue"
EnableInlineEdit(gridColumn)
End Select
Case "GLHeader_GLRows_ListView_Mixed"
Select Case name
Case "NoteRows", "AmountHUF", "AmountDEV", "DebitChartOfAccounts", "CreditChartOfAccounts", "Controlling", "CostHolder", "CostPlace", "JobNumberObjects", "UniqueObjects"
EnableInlineEdit(gridColumn)
End Select
Case "GLRows_ListView_Mixed"
Select Case name
Case "NoteRows", "Controlling", "CostHolder", "CostPlace", "JobNumberObjects", "UniqueObjects"
EnableInlineEdit(gridColumn)
End Select
Case "GLCardsHeader_GLCardsRows_ListView"
Select Case name
Case "Note_Rows"
EnableInlineEdit(gridColumn)
End Select
Case "GLRows_ListView_Bank"
Select Case name
Case "CurrencyRate2"
EnableInlineEdit(gridColumn)
End Select
Case "PermissionMatrix_ListView"
Select Case name
Case "IsCreate", "IsRead", "IsWrite", "IsNavigate", "IsDelete"
EnableInlineEdit(gridColumn)
End Select
Case "Corner_InvoiceNameParameters_ListView"
Select Case name
Case "Controlling"
EnableInlineEdit(gridColumn)
End Select
Case "Corner_CustomerNameParameters_ListView"
Select Case name
Case "Customers"
EnableInlineEdit(gridColumn)
End Select
Case "Vivaldi_InvoiceNameParameters_ListView"
Select Case name
Case "Controlling"
EnableInlineEdit(gridColumn)
End Select
Case "Vivaldi_CustomerNameParameters_ListView"
Select Case name
Case "Customers"
EnableInlineEdit(gridColumn)
End Select
Case "StorageOutRows_ListView_DeliveryNote"
Select Case name
Case "QTT_Will"
EnableInlineEdit(gridColumn)
End Select
Case "StorageInfromDeliveryNoteInRowsHeader_StorageInfromDeliveryNoteInRowsRows_ListView", _
"DeliveryNoteInFromOrderOutRowsHeader_DeliveryNoteInFromOrderOutRowsRows_ListView"
Select Case name
Case "QTT_Process"
EnableInlineEdit(gridColumn)
End Select
Case "DeliveryNoteInHeader_DeliveryNoteInrows_ListView"
Dim _ListView As ListView = CType(View, ListView)
Dim _PropertyCollectionSource As PropertyCollectionSource = CType(_ListView.CollectionSource, PropertyCollectionSource)
Dim _DeliveryNoteInHeader As DeliveryNoteInHeader = CType(_PropertyCollectionSource.MasterObject, DeliveryNoteInHeader)
If _DeliveryNoteInHeader.IsEditable = True Then
Select Case name
Case "QTT", "NoteRows"
EnableInlineEdit(gridColumn)
End Select
If _DeliveryNoteInHeader.CurrencyName.ShortName = "HUF" Then
If name = "ListPriceHUF" Then
EnableInlineEdit(gridColumn)
End If
Else
If name = "ListPriceDEV" Then
EnableInlineEdit(gridColumn)
End If
End If
End If
End Select
'// ModelEditor InLineEdit, InLineEditCriteria alapján
Dim modelColumn As IModelColumnExtender = Nothing
If name IsNot Nothing Then
If name.Contains(".") Then
Dim NewName As String() = name.Split(New Char() {"."c}, StringSplitOptions.RemoveEmptyEntries)
modelColumn = TryCast(CType(View.Model.Columns, IModelList(Of IModelColumn))(NewName(NewName.Length - 1)), IModelColumnExtender)
Else
modelColumn = TryCast(CType(View.Model.Columns, IModelList(Of IModelColumn))(name), IModelColumnExtender)
End If
If modelColumn IsNot Nothing Then
If modelColumn.InLineEdit = True Then
EnableInlineEdit(gridColumn)
End If
If modelColumn.InLineEditAutoCommit Then
AddHandler GridListEditor.GridView.CellValueChanged, AddressOf GridListEditor_CellValueChanged
End If
End If
End If
End Sub
Sub DisableInlineEdit(gridColumn As DevExpress.XtraGrid.Columns.GridColumn)
gridColumn.OptionsColumn.ReadOnly = True
gridColumn.OptionsColumn.AllowEdit = False
gridColumn.OptionsColumn.TabStop = False
gridColumn.ImageIndex = -1
If Mid(gridColumn.FieldName, 1, 4) = "row_" Then
gridColumn.OptionsColumn.AllowShowHide = False
End If
End Sub
Sub DisableInlineEdit(_TreeListColumn As DevExpress.XtraTreeList.Columns.TreeListColumn)
_TreeListColumn.OptionsColumn.ReadOnly = True
_TreeListColumn.OptionsColumn.AllowEdit = False
End Sub
Sub EnableInlineEdit(gridColumn As DevExpress.XtraGrid.Columns.GridColumn)
gridColumn.OptionsColumn.ReadOnly = False
gridColumn.OptionsColumn.AllowEdit = True
gridColumn.OptionsColumn.TabStop = True
gridColumn.ImageIndex = 0
End Sub
Sub EnableInlineEdit(_TreeListColumn As DevExpress.XtraTreeList.Columns.TreeListColumn)
_TreeListColumn.OptionsColumn.ReadOnly = False
_TreeListColumn.OptionsColumn.AllowEdit = True
End Sub
Private Sub GridListEditor_CellValueChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs)
Try
Dim nestedFrame As NestedFrame = TryCast(Frame, NestedFrame)
If nestedFrame IsNot Nothing Then
Frame.GetController(Of PersistenceValidationController)().Active.SetItemValue("", False)
Dim parentView As View = nestedFrame.View
TryCast(parentView.ObjectSpace, Xpo.XPObjectSpace).CommitChanges()
Frame.GetController(Of PersistenceValidationController)().Active.SetItemValue("", True)
parentView.ObjectSpace.Refresh()
ElseIf Frame IsNot Nothing Then
Frame.GetController(Of PersistenceValidationController)().Active.SetItemValue("", False)
TryCast(View.ObjectSpace, Xpo.XPObjectSpace).CommitChanges()
Frame.GetController(Of PersistenceValidationController)().Active.SetItemValue("", True)
View.ObjectSpace.Refresh()
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, String.Format(CaptionHelper.GetLocalizedText("Exceptions\SISBusinessExceptions", "MsgBoxCheckItAgain")))
End Try
End Sub
Private Sub GridView_CustomColumnDisplayText(sender As Object, e As DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs)
Dim modelColumn As IModelColumnExtender = Nothing
If View IsNot Nothing Then
If e.Column.FieldName <> "" Then
'If e.Column.FieldName.Contains(".") Then
' Dim NewName As String() = e.Column.FieldName.Split(New Char() {"."c}, StringSplitOptions.RemoveEmptyEntries)
' modelColumn = TryCast(CType(View.Model.Columns, IModelList(Of IModelColumn))(NewName(NewName.Length - 1)), IModelColumnExtender)
'Else
modelColumn = TryCast(CType(View.Model.Columns, IModelList(Of IModelColumn))(e.Column.FieldName), IModelColumnExtender)
'End If
If modelColumn IsNot Nothing Then
If modelColumn.HideValueIfZero = True Then
If e.Value = 0 Then e.DisplayText = ""
End If
End If
End If
End If
End Sub
Private Sub TreeListEditor_CellValueChanged(sender As Object, e As DevExpress.XtraTreeList.CellValueChangedEventArgs)
Try
Dim nestedFrame As NestedFrame = TryCast(Frame, NestedFrame)
Dim newValue As Object = e.Value
If TypeOf e.Value Is IXPSimpleObject Then
newValue = ObjectSpace.GetObject(e.Value)
End If
Dim focusedObject As Object = _TreeListEditor.FocusedObject
If focusedObject IsNot Nothing Then
Dim focusedColumnMemberInfo As DevExpress.ExpressApp.DC.IMemberInfo = ObjectSpace.TypesInfo.FindTypeInfo(focusedObject.GetType()).FindMember(e.Column.FieldName)
If focusedColumnMemberInfo IsNot Nothing Then
focusedColumnMemberInfo.SetValue(focusedObject, Convert.ChangeType(newValue, focusedColumnMemberInfo.MemberType))
End If
End If
If nestedFrame IsNot Nothing Then
Frame.GetController(Of DevExpress.ExpressApp.Validation.PersistenceValidationController)().Active.SetItemValue("", False)
Dim parentView As View = nestedFrame.View
TryCast(parentView.ObjectSpace, Xpo.XPObjectSpace).CommitChanges()
Frame.GetController(Of DevExpress.ExpressApp.Validation.PersistenceValidationController)().Active.SetItemValue("", True)
'parentView.ObjectSpace.Refresh()
ElseIf Frame IsNot Nothing Then
Frame.GetController(Of DevExpress.ExpressApp.Validation.PersistenceValidationController)().Active.SetItemValue("", False)
TryCast(View.ObjectSpace, Xpo.XPObjectSpace).CommitChanges()
Frame.GetController(Of DevExpress.ExpressApp.Validation.PersistenceValidationController)().Active.SetItemValue("", True)
'View.ObjectSpace.Refresh()
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, String.Format(CaptionHelper.GetLocalizedText("Exceptions\SISBusinessExceptions", "MsgBoxCheckItAgain")))
End Try
End Sub
Private Sub TreeListEditor_ShownEditor(sender As Object, e As EventArgs)
'Dim activeEditor As IGridInplaceEdit = TryCast(_TreeListEditor.TreeList.ActiveEditor, IGridInplaceEdit)
'If activeEditor IsNot Nothing AndAlso TypeOf _TreeListEditor.TreeList.FocusedObject Is IXPSimpleObject Then
' activeEditor.GridEditingObject = _TreeListEditor.TreeList.FocusedObject
'End If
End Sub
End Class