Files
OmagPHOTO/Project/Slab.vb
T
Emmanuele Sassi 53c8d6d934 OmagPHOTO :
- Aggiunta lista lastre che scorre e gestisce migliaia di lastre.
- Miglioramenti e correzioni varie.
2018-01-15 10:14:32 +00:00

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