53c8d6d934
- Aggiunta lista lastre che scorre e gestisce migliaia di lastre. - Miglioramenti e correzioni varie.
468 lines
15 KiB
VB.net
468 lines
15 KiB
VB.net
Imports System.Collections.ObjectModel
|
|
Imports System.Data.SQLite
|
|
Imports System.IO
|
|
Imports EgtUILib
|
|
Imports EgtWPFLib5
|
|
|
|
Public Class Slab
|
|
Inherits VMBase
|
|
|
|
#Region "FIELDS & PROPERTIES"
|
|
|
|
Public Const DB_SLABS As String = "Slabs"
|
|
Public Const DB_ID As String = "Id"
|
|
Public Const DB_IMAGEPATH As String = "ImagePath"
|
|
Public Const DB_STATE As String = "State"
|
|
Public Const DB_PROJASSIGNEDTO As String = "ProjectAssignedTo"
|
|
Public Const DB_MATERIAL As String = "Material"
|
|
Public Const DB_THICKNESS As String = "Thickness"
|
|
Public Const DB_WAREHOUSEPOS As String = "WarehousePosition"
|
|
Public Const DB_ADDEDDATE As String = "AddedDate"
|
|
|
|
Friend Shared m_IsEnabledBtn As Action(Of Boolean)
|
|
|
|
Public Enum StateOpt As Integer
|
|
AVAILABLE = 1
|
|
ASSIGNED = 2
|
|
TAKEN = 3
|
|
End Enum
|
|
|
|
Private m_IsModifiedId As Boolean = False
|
|
Friend ReadOnly Property IsModifiedId As Boolean
|
|
Get
|
|
Return m_IsModifiedId
|
|
End Get
|
|
End Property
|
|
Private m_OrigId As String
|
|
Friend ReadOnly Property OrigId As String
|
|
Get
|
|
Return m_OrigId
|
|
End Get
|
|
End Property
|
|
Private m_Id As String
|
|
Public Property Id As String
|
|
Get
|
|
Return m_Id
|
|
End Get
|
|
Set(value As String)
|
|
If Not String.IsNullOrWhiteSpace(value) Then
|
|
m_Id = value
|
|
m_IsModifiedId = m_Id <> m_OrigId
|
|
Else
|
|
NotifyPropertyChanged("Id")
|
|
End If
|
|
m_IsEnabledBtn(IsValid And IsModified)
|
|
If Not String.IsNullOrWhiteSpace(m_IdError) Then
|
|
Map.refStatusBarVM.SetOutputMessage(m_IdError, 5, MSG_TYPE.ERROR_)
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Public ReadOnly Property GraphicalImagePath As BitmapImage
|
|
Get
|
|
Dim src As BitmapImage = New BitmapImage()
|
|
src.BeginInit()
|
|
src.DecodePixelWidth = 256
|
|
src.CacheOption = BitmapCacheOption.OnLoad
|
|
src.UriSource = New Uri(m_ImagePath, UriKind.Absolute)
|
|
src.EndInit()
|
|
Return src
|
|
End Get
|
|
End Property
|
|
|
|
Private m_IsModifiedImagePath As Boolean = False
|
|
Friend ReadOnly Property IsModifiedImagePath As Boolean
|
|
Get
|
|
Return m_IsModifiedImagePath
|
|
End Get
|
|
End Property
|
|
Private m_OrigImagePath As String
|
|
Private m_ImagePath As String
|
|
Public Property ImagePath As String
|
|
Get
|
|
Return m_ImagePath
|
|
End Get
|
|
Set(value As String)
|
|
If Not String.IsNullOrWhiteSpace(value) Then
|
|
m_ImagePath = value
|
|
m_IsModifiedImagePath = m_ImagePath <> m_OrigImagePath
|
|
Else
|
|
NotifyPropertyChanged("ImagePath")
|
|
End If
|
|
m_IsEnabledBtn(IsValid And IsModified)
|
|
If Not String.IsNullOrWhiteSpace(m_ImagePathError) Then
|
|
Map.refStatusBarVM.SetOutputMessage(m_ImagePathError, 5, MSG_TYPE.ERROR_)
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_IsModifiedState As Boolean = False
|
|
Friend ReadOnly Property IsModifiedState As Boolean
|
|
Get
|
|
Return m_IsModifiedState
|
|
End Get
|
|
End Property
|
|
Private m_OrigState As StateOpt
|
|
Private m_State As StateOpt
|
|
Public Property State As StateOpt
|
|
Get
|
|
Return m_State
|
|
End Get
|
|
Set(value As StateOpt)
|
|
m_State = value
|
|
m_IsModifiedState = m_State <> m_OrigState
|
|
m_IsEnabledBtn(IsValid And IsModified)
|
|
End Set
|
|
End Property
|
|
|
|
Private m_IsModifiedProjectAssignedTo As Boolean = False
|
|
Friend ReadOnly Property IsModifiedProjectAssignedTo As Boolean
|
|
Get
|
|
Return m_IsModifiedProjectAssignedTo
|
|
End Get
|
|
End Property
|
|
Private m_OrigProjectAssignedTo As String
|
|
Private m_ProjectAssignedTo As String
|
|
Public Property ProjectAssignedTo As String
|
|
Get
|
|
Return m_ProjectAssignedTo
|
|
End Get
|
|
Set(value As String)
|
|
m_ProjectAssignedTo = value
|
|
m_IsModifiedProjectAssignedTo = m_ProjectAssignedTo <> m_OrigProjectAssignedTo
|
|
m_IsEnabledBtn(IsValid And IsModified)
|
|
End Set
|
|
End Property
|
|
|
|
Private m_IsModifiedMaterial As Boolean = False
|
|
Friend ReadOnly Property IsModifiedMaterial As Boolean
|
|
Get
|
|
Return m_IsModifiedMaterial
|
|
End Get
|
|
End Property
|
|
Private m_OrigMaterial As String
|
|
Private m_Material As String
|
|
Public Property Material As String
|
|
Get
|
|
Return m_Material
|
|
End Get
|
|
Set(value As String)
|
|
m_Material = value
|
|
m_IsModifiedMaterial = m_Material <> m_OrigMaterial
|
|
m_IsEnabledBtn(IsValid And IsModified)
|
|
End Set
|
|
End Property
|
|
|
|
Private m_IsModifiedThickness As Boolean = False
|
|
Friend ReadOnly Property IsModifiedThickness As Boolean
|
|
Get
|
|
Return m_IsModifiedThickness
|
|
End Get
|
|
End Property
|
|
Private m_OrigThickness As Double
|
|
Private m_Thickness As Double
|
|
Public Property Thickness As String
|
|
Get
|
|
If m_Thickness < EPS_SMALL Then Return ""
|
|
Return LenToString(m_Thickness, -2)
|
|
End Get
|
|
Set(value As String)
|
|
Dim dThickness As Double = 0
|
|
If StringToLen(value, dThickness) And dThickness > -EPS_ZERO Then
|
|
m_Thickness = dThickness
|
|
m_IsModifiedThickness = m_Thickness <> m_OrigThickness
|
|
Else
|
|
NotifyPropertyChanged("Thickness")
|
|
End If
|
|
m_IsEnabledBtn(IsValid)
|
|
If Not String.IsNullOrWhiteSpace(m_ThicknessError) Then
|
|
Map.refStatusBarVM.SetOutputMessage(m_ThicknessError, 5, MSG_TYPE.ERROR_)
|
|
End If
|
|
End Set
|
|
End Property
|
|
Friend Function GetThickness() As Double
|
|
Return m_Thickness
|
|
End Function
|
|
|
|
Private m_IsModifiedWarehousePosition As Boolean = False
|
|
Friend ReadOnly Property IsModifiedWarehousePosition As Boolean
|
|
Get
|
|
Return m_IsModifiedWarehousePosition
|
|
End Get
|
|
End Property
|
|
Private m_OrigWarehousePosition As String
|
|
Private m_WarehousePosition As String
|
|
Public Property WarehousePosition As String
|
|
Get
|
|
Return m_WarehousePosition
|
|
End Get
|
|
Set(value As String)
|
|
m_WarehousePosition = value
|
|
m_IsModifiedWarehousePosition = m_WarehousePosition <> m_OrigWarehousePosition
|
|
m_IsEnabledBtn(IsValid And IsModified)
|
|
End Set
|
|
End Property
|
|
|
|
Private m_AddedDate As Date
|
|
Public Property AddedDate As Date
|
|
Get
|
|
Return m_AddedDate
|
|
End Get
|
|
Set(value As Date)
|
|
m_AddedDate = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_IsLoaded As Boolean
|
|
Public Property IsLoaded As Boolean
|
|
Get
|
|
Return m_IsLoaded
|
|
End Get
|
|
Set(value As Boolean)
|
|
m_IsLoaded = value
|
|
NotifyPropertyChanged("IsLoaded")
|
|
End Set
|
|
End Property
|
|
|
|
Public ReadOnly Property Slab_Tooltip As String
|
|
Get
|
|
Dim CurrState As String = String.Empty
|
|
For Index = 0 To Map.refProjectVM.StateList.Count - 1
|
|
If Map.refProjectVM.StateList(Index).Id = m_State Then
|
|
CurrState = Map.refProjectVM.StateList(Index).Name
|
|
End If
|
|
Next
|
|
Dim Tooltip As String = EgtMsg(MSG_SLAB + 1) & ": " & m_Id & Environment.NewLine &
|
|
EgtMsg(MSG_SLAB + 3) & ": " & CurrState & Environment.NewLine &
|
|
EgtMsg(MSG_SLAB + 4) & ": " & m_ProjectAssignedTo & Environment.NewLine &
|
|
EgtMsg(MSG_RAWPARTPAGEUC + 9) & ": " & m_Material & Environment.NewLine &
|
|
EgtMsg(MSG_RAWPARTPAGEUC + 5) & ": " & Thickness & Environment.NewLine &
|
|
EgtMsg(MSG_SLAB + 5) & ": " & m_WarehousePosition & Environment.NewLine &
|
|
EgtMsg(MSG_SLAB + 6) & ": " & m_AddedDate
|
|
Return Tooltip
|
|
End Get
|
|
End Property
|
|
|
|
#End Region ' FIELDS & PROPERTIES
|
|
|
|
#Region "CONSTRUCTOR"
|
|
|
|
Sub New(sId As String, sPath As String, State As StateOpt, sProjectAssignedTo As String, Material As String, dThickness As Double, sWarehousePosition As String)
|
|
m_Id = sId
|
|
m_ImagePath = sPath
|
|
m_State = State
|
|
m_ProjectAssignedTo = sProjectAssignedTo
|
|
m_Material = Material
|
|
m_Thickness = dThickness
|
|
m_WarehousePosition = sWarehousePosition
|
|
m_AddedDate = Date.Today
|
|
m_IsLoaded = False
|
|
End Sub
|
|
|
|
Sub New(SlabReader As SQLiteDataReader)
|
|
m_Id = SlabReader(DB_ID)
|
|
Dim TempPath As String = SlabReader(DB_IMAGEPATH)
|
|
If Not File.Exists(TempPath) Then TempPath = Map.refMainWindowVM.MainWindowM.sPhotoDir & "\" & CStr(SlabReader(DB_IMAGEPATH))
|
|
m_ImagePath = TempPath
|
|
m_State = SlabReader(DB_STATE)
|
|
m_ProjectAssignedTo = If(SlabReader(DB_PROJASSIGNEDTO) Is DBNull.Value, Nothing, SlabReader(DB_PROJASSIGNEDTO))
|
|
Dim MaterialName As String = SlabReader(DB_MATERIAL)
|
|
m_Material = If(Not String.IsNullOrWhiteSpace(MaterialName), MaterialName, Nothing)
|
|
m_Thickness = SlabReader(DB_THICKNESS)
|
|
m_WarehousePosition = SlabReader(DB_WAREHOUSEPOS)
|
|
m_AddedDate = Date.Today
|
|
End Sub
|
|
|
|
#End Region ' CONSTRUCTOR
|
|
|
|
#Region "METHODS"
|
|
|
|
Private m_IdError As String
|
|
Public ReadOnly Property IdErrorMsg As String
|
|
Get
|
|
Return m_IdError
|
|
End Get
|
|
End Property
|
|
|
|
Private m_ImagePathError As String
|
|
Public ReadOnly Property ImagePathErrorMsg As String
|
|
Get
|
|
Return m_ImagePathError
|
|
End Get
|
|
End Property
|
|
|
|
Private m_ThicknessError As String
|
|
Public ReadOnly Property ThicknessErrorMsg As String
|
|
Get
|
|
Return m_ThicknessError
|
|
End Get
|
|
End Property
|
|
|
|
Private Function GetValidationError(propertyName As String) As Boolean
|
|
Dim bOk As Boolean = True
|
|
Select Case propertyName
|
|
Case "Id"
|
|
bOk = Me.ValidateId()
|
|
Case "ImagePath"
|
|
bOk = Me.ValidateImagePath()
|
|
Case "Thickness"
|
|
bOk = Me.ValidateThickness()
|
|
End Select
|
|
Return bOk
|
|
End Function
|
|
|
|
''' <summary>
|
|
''' Returns true if this object has no validation errors.
|
|
''' </summary>
|
|
Public ReadOnly Property IsValid() As Boolean
|
|
Get
|
|
For Each [property] As String In ValidatedProperties
|
|
If Not GetValidationError([property]) Then
|
|
Return False
|
|
End If
|
|
Next [property]
|
|
Return True
|
|
End Get
|
|
End Property
|
|
|
|
Private Shared ReadOnly ValidatedProperties() As String = {"Id", "ImagePath", "Thickness"}
|
|
|
|
Private Function ValidateId() As Boolean
|
|
m_IdError = String.Empty
|
|
If Not String.IsNullOrEmpty(m_Id) Then
|
|
For Each Slab In Map.refProjectVM.SlabList
|
|
If Slab IsNot Me AndAlso Slab.Id = m_Id Then
|
|
' Nome già utilizzato
|
|
m_IdError = EgtMsg(MSG_SLAB + 1)
|
|
'Map.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
Return False
|
|
End If
|
|
Next
|
|
Return True
|
|
Else
|
|
' Il nome è obbligatorio
|
|
m_IdError = EgtMsg(MSG_SLAB + 2)
|
|
'Map.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
Return False
|
|
End If
|
|
End Function
|
|
|
|
Private Function ValidateImagePath() As Boolean
|
|
m_ImagePathError = String.Empty
|
|
If Not String.IsNullOrEmpty(m_ImagePath) Then Return True
|
|
' Il nome immagine è obbligatorio
|
|
m_ImagePathError = EgtMsg(MSG_SLAB + 3)
|
|
Return False
|
|
End Function
|
|
|
|
Private Function ValidateThickness() As Boolean
|
|
m_ThicknessError = String.Empty
|
|
If Not IsNothing(m_Thickness) Then
|
|
Dim dThickness As Double = 0
|
|
StringToLen(m_Thickness, dThickness)
|
|
If dThickness > EPS_SMALL Then Return True
|
|
' Non sono ammessi spessori negativi
|
|
m_ThicknessError = EgtMsg(MSG_RAWPARTPAGEUC + 18)
|
|
'Map.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
Return False
|
|
End If
|
|
Return False
|
|
End Function
|
|
|
|
Public ReadOnly Property IsModified() As Boolean
|
|
Get
|
|
Return m_IsModifiedId OrElse m_IsModifiedImagePath OrElse m_IsModifiedState OrElse
|
|
m_IsModifiedProjectAssignedTo OrElse m_IsModifiedMaterial OrElse m_IsModifiedThickness OrElse
|
|
m_IsModifiedWarehousePosition
|
|
End Get
|
|
End Property
|
|
|
|
Friend Sub ResetIsModified()
|
|
m_IsModifiedId = False
|
|
m_IsModifiedImagePath = False
|
|
m_IsModifiedState = False
|
|
m_IsModifiedProjectAssignedTo = False
|
|
m_IsModifiedMaterial = False
|
|
m_IsModifiedThickness = False
|
|
m_IsModifiedWarehousePosition = False
|
|
End Sub
|
|
|
|
Friend Sub SetOrigValues()
|
|
m_OrigId = m_Id
|
|
m_OrigImagePath = m_ImagePath
|
|
m_OrigState = m_State
|
|
m_OrigProjectAssignedTo = m_ProjectAssignedTo
|
|
m_OrigMaterial = m_Material
|
|
m_OrigThickness = m_Thickness
|
|
m_OrigWarehousePosition = m_WarehousePosition
|
|
End Sub
|
|
|
|
#End Region ' METHODS
|
|
|
|
End Class
|
|
|
|
Public Class Material
|
|
|
|
Private m_nId As Integer
|
|
Private m_sName As String
|
|
|
|
Public ReadOnly Property nId As Integer
|
|
Get
|
|
Return m_nId
|
|
End Get
|
|
End Property
|
|
|
|
Public Property sName As String
|
|
Get
|
|
Return m_sName
|
|
End Get
|
|
Set(value As String)
|
|
m_sName = value
|
|
End Set
|
|
End Property
|
|
|
|
Sub New(sName As String, MaterialList As ObservableCollection(Of Material))
|
|
Dim nMaxId As Integer = 0
|
|
For Each Material In MaterialList
|
|
If Material.nId > nMaxId Then
|
|
nMaxId = Material.nId
|
|
End If
|
|
Next
|
|
m_nId = nMaxId + 1
|
|
m_sName = sName
|
|
End Sub
|
|
|
|
Sub New(nId As Integer, sName As String)
|
|
m_nId = nId
|
|
m_sName = sName
|
|
End Sub
|
|
|
|
End Class
|
|
|
|
''' <summary>
|
|
''' Class that represent a Converter that convert mm in inch if necessary for the param depth.
|
|
''' </summary>
|
|
Public Class StateIndexConverter
|
|
Implements IMultiValueConverter
|
|
|
|
Dim StateList As List(Of IdNameStruct)
|
|
|
|
Public Function Convert(value() As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IMultiValueConverter.Convert
|
|
If Not TypeOf value(1) Is List(Of IdNameStruct) Then Return value(0)
|
|
StateList = DirectCast(value(1), List(Of IdNameStruct))
|
|
Dim SelState As Slab.StateOpt
|
|
If Not TypeOf value(0) Is Slab.StateOpt Then Return value(0)
|
|
SelState = DirectCast(value(0), Slab.StateOpt)
|
|
For Index = 0 To StateList.Count - 1
|
|
If StateList(Index).Id = SelState Then
|
|
Return Index
|
|
End If
|
|
Next
|
|
Return value
|
|
End Function
|
|
|
|
Public Function ConvertBack(value As Object, targetType() As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object() Implements IMultiValueConverter.ConvertBack
|
|
Return {StateList(value).Id}
|
|
End Function
|
|
|
|
End Class |