Files
OmagPHOTO/Project/Slab.vb
T
Emmanuele Sassi 68ee9ec34f OmagPHOTO 1.8k1 :
- Primo rilascio.
2017-11-18 10:22:46 +00:00

391 lines
13 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"
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
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)
End Set
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)
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
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)
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
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 = "Id: " & m_Id & Environment.NewLine &
"ImagePath: " & m_ImagePath & Environment.NewLine &
"State: " & CurrState & Environment.NewLine &
"ProjectAssignedTo: " & m_ProjectAssignedTo & Environment.NewLine &
"Material: " & m_Material & Environment.NewLine &
"Thickness: " & m_Thickness & Environment.NewLine &
"WarehousePosition: " & m_WarehousePosition
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
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 = SlabReader(DB_MATERIAL)
m_Thickness = SlabReader(DB_THICKNESS)
m_WarehousePosition = SlabReader(DB_WAREHOUSEPOS)
End Sub
#End Region ' CONSTRUCTOR
#Region "METHODS"
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
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
Dim sMsg As String = "Nome già utilizzato"
Map.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
Return False
End If
Next
Return True
Else
' Il nome è obbligatorio
Dim sMsg As String = "Il nome è obbligatorio"
Map.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
Return False
End If
End Function
Private Function ValidateImagePath() As Boolean
If Not String.IsNullOrEmpty(m_ImagePath) Then Return True
' Il nome è obbligatorio
Dim sMsg As String = "L'immagine è obbligatoria"
Map.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
Return False
End Function
Private Function ValidateThickness() As Boolean
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
Dim sMsg As String = 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
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