Files
2017-03-08 11:21:27 +01:00

356 lines
13 KiB
VB.net

Imports System
Imports System.ComponentModel
Imports DevExpress.Xpo
Imports DevExpress.Data.Filtering
Imports DevExpress.ExpressApp
Imports DevExpress.Persistent.Base
Imports DevExpress.Persistent.BaseImpl
Imports DevExpress.Persistent.Validation
Imports DevExpress.ExpressApp.ConditionalAppearance
Public Enum ePlace
Left = 0
Center = 1
Right = 2
End Enum
Public Enum eYearFormat
YearNoDigit = 0
YearOneDigit = 1
YearTwoDigit = 2
YearFourDigit = 4
End Enum
<DefaultClassOptions()> _
<NavigationItem("GeneralStock")> _
<DefaultProperty("DisplayName")> _
<Appearance("Hide NewNumberPerMonth when NewNumberPerYear is False", AppearanceItemType.ViewItem, "NewNumberPerYear =False", TargetItems:="NewNumberPerMonth", visibility:=Editors.ViewItemVisibility.Hide)> _
<Appearance("Disable MonthAfterYear when NewNumberPerMonth is True", AppearanceItemType.ViewItem, "NewNumberPerMonth =True", TargetItems:="MonthAfterYear", Enabled:=False)> _
Public Class NumberGenerator
Inherits BaseObject
Private _NumberGeneratorGroups As NumberGeneratorGroups
Private _PrefixString As String
Private _PrefixTag As String
Private _SuffixString As String
Private _SuffixTag As String
Private _SerialNumber As Long
Private _SerialNumberPlace As ePlace
Private _SerialNumberDigit As Long = 4
Private _YearFormat As eYearFormat
Private _NewNumberPerYear As Boolean
Private _NewNumberPerMonth As Boolean
Private _ShortName As String
Private _MonthAfterYear As Boolean
Private _CurrentDay As Boolean
Private _CurrentDayFormat As String
Public Function GetNewNumber(ByVal NGO As NumberGenerator, Optional ByVal _YearString As String = "", Optional _MonthString As String = "") As String
Dim _NGSemafor As NumberGeneratorSemafor
If _YearString = "" Or _YearString Is Nothing Then
_YearString = Year(GetSQLTime(Session)).ToString
Else
End If
If (_MonthString = "" And MonthAfterYear) Or (_MonthString Is Nothing And MonthAfterYear) Then
_MonthString = Month(GetSQLTime(Session)).ToString
End If
If NewNumberPerYear = True Then
If _MonthString <> "" And NGO.MonthAfterYear And NGO.NewNumberPerMonth Then
_NGSemafor = Session.FindObject(Of NumberGeneratorSemafor)(CriteriaOperator.Parse("NumberGenerator=? and YearString=? and MonthString=? and NewNumberPerMonth=?", NGO.Oid, _YearString, _MonthString, True))
Else
_NGSemafor = Session.FindObject(Of NumberGeneratorSemafor)(CriteriaOperator.Parse("NumberGenerator=? and YearString=? and NewNumberPerMonth=?", NGO.Oid, _YearString, False))
End If
Else
Dim CurrentYear As Integer
Dim BaseYear As Integer = Convert.ToInt32(_YearString) - 4
For CurrentYear = Convert.ToInt32(_YearString) To BaseYear Step -1
'If _MonthString <> "" And NGO.MonthAfterYear And NGO.NewNumberPerMonth Then
' _NGSemafor = Session.FindObject(Of NumberGeneratorSemafor)(CriteriaOperator.Parse("NumberGenerator=? and YearString=? and MonthString=? and NewNumberPerMonth=?", NGO.Oid, CurrentYear.ToString(), _MonthString, True))
' If _NGSemafor IsNot Nothing Then
' Exit For
' End If
'Else
_NGSemafor = Session.FindObject(Of NumberGeneratorSemafor)(CriteriaOperator.Parse("NumberGenerator=? and YearString=? and NewNumberPerMonth=?", NGO.Oid, CurrentYear.ToString(), False))
If _NGSemafor IsNot Nothing Then
Exit For
End If
'End If
Next
If _NGSemafor Is Nothing Then
Dim _NGSemaforLastToNew As NumberGeneratorSemafor
'If _MonthString <> "" And NGO.MonthAfterYear And NGO.NewNumberPerMonth Then
' _NGSemaforLastToNew = Session.FindObject(Of NumberGeneratorSemafor)(CriteriaOperator.Parse("NumberGenerator=? and YearString=? and MonthString=?", NGO.Oid, (Convert.ToInt32(_YearString) - 5).ToString(), _MonthString))
'Else
_NGSemaforLastToNew = Session.FindObject(Of NumberGeneratorSemafor)(CriteriaOperator.Parse("NumberGenerator=? and YearString=? and NewNumberPerMonth=?", NGO.Oid, (Convert.ToInt32(_YearString) - 5).ToString(), False))
'End If
If _NGSemaforLastToNew IsNot Nothing Then
_NGSemafor = New NumberGeneratorSemafor(Session)
_NGSemafor.NumberGenerator = NGO
_NGSemafor.YearString = _YearString
_NGSemafor.MonthString = _MonthString
_NGSemafor.SerialNumber = _NGSemaforLastToNew.SerialNumber
_NGSemafor.Save()
End If
End If
End If
If _NGSemafor Is Nothing Then
_NGSemafor = New NumberGeneratorSemafor(Session)
_NGSemafor.NumberGenerator = NGO
_NGSemafor.YearString = _YearString
_NGSemafor.MonthString = _MonthString
_NGSemafor.SerialNumber = Me.SerialNumber + 1
If _NewNumberPerMonth = True Then
_NGSemafor.NewNumberPerMonth = True
End If
_NGSemafor.Save()
Else
_NGSemafor.SerialNumber += 1
If _NewNumberPerMonth = False Then
_NGSemafor.MonthString = _MonthString
End If
_NGSemafor.Save()
End If
'--- Paraméterek inicializálása
_PrefixString = NGO.PrefixString
_PrefixTag = NGO.PrefixTag
_SuffixString = NGO.SuffixString
_SuffixTag = NGO.SuffixTag
_SerialNumberPlace = NGO.SerialNumberPlace
_SerialNumberDigit = NGO.SerialNumberDigit
_YearFormat = NGO.YearFormat
_NewNumberPerYear = NGO.NewNumberPerYear
_MonthAfterYear = NGO.MonthAfterYear
Return CreateSampleString(_NGSemafor.YearString, _NGSemafor.MonthString, _NGSemafor.SerialNumber)
End Function
Function CreateSampleString(ByVal YearString As String, ByVal MonthString As String, ByVal NumberLong As Long) As String
Dim _NumberString As String = ""
Dim _SampleString As String = ""
Dim _CurrentDateString As String = ""
If NewNumberPerYear = True Then
Select Case YearFormat
Case eYearFormat.YearNoDigit
YearString = ""
Case eYearFormat.YearFourDigit
Case eYearFormat.YearOneDigit
YearString = Mid(YearString, 4, 1)
Case eYearFormat.YearTwoDigit
YearString = Mid(YearString, 3, 2)
End Select
Else
YearString = ""
End If
_NumberString = AlignStr(CStr(NumberLong), eDirection.Left, "0", _SerialNumberDigit)
If CurrentDay Then
_CurrentDateString = GetSQLTime(Session).ToString(CurrentDayFormat)
Else
_CurrentDateString = ""
End If
If MonthAfterYear Then
If MonthString.Length = 1 Then MonthString = "0" + MonthString
If _SuffixTag = "" Then
YearString += SuffixString & MonthString
Else
YearString += SuffixTag & MonthString
End If
End If
If _SerialNumberPlace = ePlace.Center Then
_SampleString = PrefixString & PrefixTag & _NumberString & SuffixTag & YearString & _CurrentDateString & SuffixTag & SuffixString
ElseIf _SerialNumberPlace = ePlace.Left Then
If CurrentDay Then
_SampleString = PrefixString & PrefixTag & YearString & _CurrentDateString & SuffixTag & _NumberString
Else
_SampleString = PrefixString & PrefixTag & YearString & _CurrentDateString & SuffixTag & _NumberString & SuffixTag & SuffixString
End If
ElseIf _SerialNumberPlace = ePlace.Right Then
_SampleString = PrefixString & _PrefixTag & _NumberString & SuffixTag & SuffixString & SuffixTag & YearString & _CurrentDateString
End If
Return _SampleString
End Function
ReadOnly Property SampleString()
Get
Return CreateSampleString(Year(Now), Month(Now), 0)
End Get
End Property
Public Sub New(ByVal session As Session)
MyBase.New(session)
End Sub
Public Overrides Sub AfterConstruction()
MyBase.AfterConstruction()
_SerialNumberPlace = ePlace.Right
OnChanged("SerialNumberPlace")
_NewNumberPerYear = True
OnChanged("NewNumberPerYear")
_YearFormat = eYearFormat.YearTwoDigit
OnChanged("YearFormat")
CurrentDayFormat = "ddMMyyyy"
_NewNumberPerMonth = False
End Sub
<RuleRequiredField("", DefaultContexts.Save)> _
Property NumberGeneratorGroups As NumberGeneratorGroups
Get
Return _NumberGeneratorGroups
End Get
Set(ByVal value As NumberGeneratorGroups)
SetPropertyValue("NumberGeneratorGroups", _NumberGeneratorGroups, value)
End Set
End Property
<RuleRequiredField("", DefaultContexts.Save)> _
<ImmediatePostData(True)> _
Property ShortName As String
Get
Return _ShortName
End Get
Set(ByVal value As String)
SetPropertyValue("ShortName", _ShortName, value)
End Set
End Property
<ImmediatePostData(True)> _
Property PrefixString As String
Get
Return _PrefixString
End Get
Set(ByVal value As String)
SetPropertyValue("PrefixString", _PrefixString, value)
End Set
End Property
<ImmediatePostData(True)> _
Property PrefixTag As String
Get
Return _PrefixTag
End Get
Set(ByVal value As String)
SetPropertyValue("PrefixTag", _PrefixTag, value)
End Set
End Property
<ImmediatePostData(True)> _
Property SuffixString As String
Get
Return _SuffixString
End Get
Set(ByVal value As String)
SetPropertyValue("SuffixString", _SuffixString, value)
End Set
End Property
<ImmediatePostData(True)> _
Property SuffixTag As String
Get
Return _SuffixTag
End Get
Set(ByVal value As String)
SetPropertyValue("SuffixTag", _SuffixTag, value)
End Set
End Property
<ImmediatePostData(True)> _
Property SerialNumber As Long
Get
Return _SerialNumber
End Get
Set(ByVal value As Long)
SetPropertyValue("SerialNumber", _SerialNumber, value)
End Set
End Property
<ImmediatePostData(True)> _
Property SerialNumberPlace As ePlace
Get
Return _SerialNumberPlace
End Get
Set(ByVal value As ePlace)
SetPropertyValue("SerialNumberPlace", _SerialNumberPlace, value)
End Set
End Property
<RuleRequiredField("", DefaultContexts.Save)> _
<ImmediatePostData(True)> _
Property YearFormat As eYearFormat
Get
Return _YearFormat
End Get
Set(ByVal value As eYearFormat)
SetPropertyValue("YearFormat", _YearFormat, value)
End Set
End Property
<ImmediatePostData(True)> _
Property NewNumberPerYear As Boolean
Get
Return _NewNumberPerYear
End Get
Set(ByVal value As Boolean)
SetPropertyValue("NewNumberPerYear", _NewNumberPerYear, value)
End Set
End Property
<ImmediatePostData(True)> _
Property NewNumberPerMonth As Boolean
Get
Return _NewNumberPerMonth
End Get
Set(ByVal value As Boolean)
SetPropertyValue("NewNumberPerMonth", _NewNumberPerMonth, value)
If Session.IsObjectsLoading = False And Session.IsObjectsSaving = False Then
If value = True Then
Me.MonthAfterYear = True
End If
End If
End Set
End Property
<ImmediatePostData(True)> _
Property SerialNumberDigit As Long
Get
Return _SerialNumberDigit
End Get
Set(ByVal value As Long)
SetPropertyValue("SerialNumberDigit", _SerialNumberDigit, value)
End Set
End Property
<ImmediatePostData(True)> _
Property MonthAfterYear As Boolean
Get
Return _MonthAfterYear
End Get
Set(ByVal value As Boolean)
SetPropertyValue("MonthAfterYear", _MonthAfterYear, value)
End Set
End Property
Property CurrentDay As Boolean
Get
Return _CurrentDay
End Get
Set(value As Boolean)
SetPropertyValue("CurrentDay", _CurrentDay, value)
End Set
End Property
Property CurrentDayFormat As String
Get
Return _CurrentDayFormat
End Get
Set(value As String)
SetPropertyValue("CurrentDayFormat", _CurrentDayFormat, value)
End Set
End Property
ReadOnly Property DisplayName() As String
Get
Return SampleString & ", " & ShortName
End Get
End Property
<VisibleInListView(False), VisibleInLookupListView(False)>
ReadOnly Property NumberGeneratorSemafor As XPCollection(Of NumberGeneratorSemafor)
Get
Return New XPCollection(Of NumberGeneratorSemafor)(Session, CriteriaOperator.Parse("NumberGenerator=?", Me))
End Get
End Property
End Class