1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723
|
Imports System.Xml
Namespace MaCaveAVin
Public Class Cave
Implements IEqualityComparer(Of Bouteille), INotifyPropertyChanged, IXmlSerializable
Public Const NBR_DE_CASIERS As Integer = 289
Public Shared ReadOnly CouleursParDefaut() As String = {"BLANC DOUX", "BLANC SEC", "ROUGE", "ROSE", "PETILLANT"}
Public Shared ReadOnly RegionsParDefaut() As String = {"ALSACE", "BEAUJOLAIS", "BERGERAC", "BORDEAUX", "BOURGOGNE", "BRETAGNE", "CHAMPAGNE", "CORSE", "JURA", "LANGUEDOC", "LORRAINE", "MONDE", "PROVENCE", "ROUSILLON", "SAVOIE", "SUD OUEST", "VALLEE DE LA LOIRE", "VALLEE DU RHONE"}
Public Shared ReadOnly AccompagnementParDefaut() As String = {"CUISINE", "DESSERTS", "FOIE GRAS", "FROMAGES", "GIBIERS", "PLATS FAMILIAUX", "POISSON/CRUSTACES", "VIANDE BLANCHE", "VIANDE ROUGE"}
Private Shared WithEvents _AccesAuxDonnees As New AccesAuxDonnees
Private Shared _ModificationEnCours As Boolean = False
Private Shared _DateDernierAcces As Date
Private Shared _DateDernierEcriture As Date
Private Shared _InstanceEnCours As Cave
''' <summary>
''' Détermine si des Modifications ont été apporté à la Cave.
''' </summary>
Public Shared ReadOnly Property ModificationEncours As Boolean
Get
Return _ModificationEnCours
End Get
End Property
''' <summary>
''' Obtiens la Date de Dernière modification de la Charge.
''' </summary>
Public Shared ReadOnly Property DateDerniereModification As Date
Get
Return _DateDernierEcriture
End Get
End Property
''' <summary>
''' Obtiens la Date du Dernier Accés de la Charge.
''' </summary>
Public Shared ReadOnly Property DateDernierAcces As Date
Get
Return _DateDernierAcces
End Get
End Property
''' <summary>
''' Obtiens l'instance en cours de la Cave.
''' </summary>
Public Shared ReadOnly Property GetInstance As Cave
Get
If IsNothing(_InstanceEnCours) AndAlso Not _AccesAuxDonnees.LoadXml(GetType(Cave), _InstanceEnCours) Then
SyncLock GetType(Cave)
_InstanceEnCours = New Cave()
End SyncLock
End If
Return _InstanceEnCours
End Get
End Property
' Après le Chargement ou la Sauvegarde des Données
Private Shared Sub _AccesAuDonnees_Charge(ByVal DernierAcces As Date, ByVal DernierEcriture As Date, ByVal IsFileOfDefault As Boolean) Handles _AccesAuxDonnees.DonneesCharge, _AccesAuxDonnees.DonneesSauvegarde
If Not IsFileOfDefault Then Exit Sub
_DateDernierEcriture = DernierEcriture
_DateDernierAcces = DernierAcces
_ModificationEnCours = False
End Sub
Private WithEvents _Regions As BindingList(Of String)
Private WithEvents _Accompagnements As BindingList(Of String)
Private WithEvents _Bouteilles As BindingList(Of Bouteille)
Private WithEvents _Convives As BindingList(Of Convive)
Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
''' <summary>
''' Obtiens la Liste des Régions.
''' </summary>
Public ReadOnly Property Regions() As BindingList(Of String)
Get
Return _Regions
End Get
End Property
''' <summary>
''' Obtiens la Liste des Accompagnements.
''' </summary>
Public ReadOnly Property Accompagnements() As BindingList(Of String)
Get
Return _Accompagnements
End Get
End Property
''' <summary>
''' Obtiens la Liste des Bouteilles.
''' </summary>
Public ReadOnly Property Bouteilles() As BindingList(Of Bouteille)
Get
Return _Bouteilles
End Get
End Property
''' <summary>
''' Obtiens la Liste des Convives.
''' </summary>
Public ReadOnly Property Convives() As BindingList(Of Convive)
Get
Return _Convives
End Get
End Property
''' <summary>
''' Obtiens le Prix Total des Bouteilles enregistrées.
''' </summary>
Public ReadOnly Property ValeurDeLaCave() As Integer
Get
If _Bouteilles.Count = 0 Then Return 0
Return _Bouteilles.Sum(Function(UneBouteille) (UneBouteille.Stock * UneBouteille.Prix))
End Get
End Property
''' <summary>
''' Obtiens le Nombre Total de Bouteilles enregistrées total ou bien en fonction de la Couleur spécifié.
''' </summary>
''' <param name="Couleur">Couleur de Vin</param>
Public ReadOnly Property Count(Optional Couleur As String = Nothing) As Integer
Get
If _Bouteilles.Count = 0 Then Return 0
If IsNothing(Couleur) Then Return Math.Abs(_Bouteilles.Sum(Function(UneBouteille) UneBouteille.Stock))
Return Math.Abs(_Bouteilles.Sum(Function(UneBouteille) String.Equals(UneBouteille.Couleur, Couleur, StringComparison.CurrentCultureIgnoreCase) And UneBouteille.Stock))
End Get
End Property
''' <summary>
''' Obtiens le Nombre Total de Bouteilles sortie en fonction de la couleur spécifié.
''' </summary>
Public ReadOnly Property Sortie(ByVal Couleur As String) As Integer
Get
If _Bouteilles.Count = 0 Then Return 0
If IsNothing(Couleur) OrElse String.IsNullOrWhiteSpace(Couleur) Then Throw New ArgumentException("Veuillez renseigner la Couleur de Vin.")
Return Math.Abs(_Bouteilles.Sum(Function(UneBouteille) String.Equals(UneBouteille.Couleur, Couleur, StringComparison.CurrentCultureIgnoreCase) And UneBouteille.Sorties))
End Get
End Property
Private Sub New()
_Regions = New BindingList(Of String)(RegionsParDefaut.ToList)
_Accompagnements = New BindingList(Of String)(AccompagnementParDefaut.ToList)
_Bouteilles = New BindingList(Of Bouteille)
_Convives = New BindingList(Of Convive)
End Sub
Public Function Search(ByVal Value As Object) As BindingList(Of Bouteille) ' Couleur ou Région ou disponibilité ou Acccompagnements
If TypeOf Value Is String Then Return _Bouteilles.Where(Function(UneBouteille) UneBouteille.Couleur.Equals(Value.ToString, StringComparison.CurrentCultureIgnoreCase) OrElse UneBouteille.Region.Equals(Value.ToString, StringComparison.CurrentCultureIgnoreCase))
End Function
''' <summary>
''' Indique si le Casier spécifié contient une Bouteille.
''' </summary>
''' <param name="Casier">Nom du Casier</param>
Public Function EnStock(ByVal Casier As String) As Boolean
If IsNothing(Casier) OrElse String.IsNullOrWhiteSpace(Casier) Then Throw New ArgumentException("Veuillez renseigner le Casier.")
Return _Bouteilles.ToList.Exists(Function(UneBouteille) UneBouteille.EnStock(Casier))
End Function
''' <summary>
''' Retourne l'Index de Liste d'une Bouteille spécifié par son Identifiant.
''' </summary>
''' <param name="Identifiant">Identifiant de l'Article.</param>
Public Function IndexListe(ByVal Identifiant As Integer) As Integer
If IsNothing(Identifiant) OrElse Identifiant <= 0 Then Throw New ArgumentException("Veuillez renseigner l'Identifiant.")
Try
Return _Bouteilles.IndexOf(_Bouteilles.Single(Function(UneBouteille) UneBouteille.Identifiant = Identifiant))
Catch ex As Exception
Throw New ArgumentException("Aucune Bouteille ne correspond à cet Identifiant.")
End Try
End Function
''' <summary>
''' Retourne l'Index de Liste d'une Bouteille spécifié par son Identifiant.
''' </summary>
''' <param name="Casier">Casier de l'Article.</param>
Public Function IndexListe(ByVal Casier As String) As Integer
If IsNothing(Casier) OrElse String.IsNullOrWhiteSpace(Casier) Then Throw New ArgumentException("Veuillez renseigner le Casier.")
Try
Return _Bouteilles.IndexOf(_Bouteilles.Single(Function(UneBouteille) UneBouteille.EnStock(Casier)))
Catch ex As Exception
Throw New ArgumentException("Aucune Bouteille ne correspond à cet Identifiant.")
End Try
End Function
''' <summary>
''' Sauvegarde la Cave.
''' </summary>
Public Function Save() As Boolean
Return _AccesAuxDonnees.SaveXml(Me)
End Function
''' <summary>
''' Sauvegarde la cave.
''' </summary>
''' <param name="LeFichier">Fichier de Sauvegarde</param>
Public Function Save(ByVal LeFichier As FileInfo) As Boolean
Return _AccesAuxDonnees.SaveXml(Me, LeFichier)
End Function
''' <summary>
''' Détermine si deux Objets sont égaux.
''' </summary>
''' <param name="x">Objet Article à comparer</param>
''' <param name="y">Objet Article à comparer</param>
Public Shadows Function Equals(x As Bouteille, y As Bouteille) As Boolean Implements IEqualityComparer(Of Bouteille).Equals
Select Case True
Case x.Identifiant = y.Identifiant
Return True
Case x.Equals(x, y)
Return True
Case Else
Return False
End Select
End Function
''' <summary>
''' Retourne un Code de Hachage pour l'objet spécifié.
''' </summary>
''' <param name="obj">Objet Article</param>
''' <returns>Retourne son Identifiant par défaut.</returns>
Public Shadows Function GetHashCode(obj As Bouteille) As Integer Implements IEqualityComparer(Of Bouteille).GetHashCode
Return obj.Identifiant
End Function
Private Sub _Cave__LesCouleurs_LesRegions_LesAccompagnements_LesConvives_Modifie(ByVal Sender As Object, ByVal e As ListChangedEventArgs) Handles _Bouteilles.ListChanged, _Regions.ListChanged, _Accompagnements.ListChanged, _Convives.ListChanged
Select Case e.ListChangedType
Case ListChangedType.ItemAdded, ListChangedType.ItemChanged, ListChangedType.ItemDeleted, ListChangedType.Reset
_ModificationEnCours = True
RaiseEvent PropertyChanged(Sender, New PropertyChangedEventArgs(Sender.GetType.ToString))
End Select
End Sub
#Region "Partie IXMLSerializable"
Public Function GetSchema() As Xml.Schema.XmlSchema Implements IXmlSerializable.GetSchema
Return Nothing
End Function
Public Sub WriteXml(Writer As Xml.XmlWriter) Implements IXmlSerializable.WriteXml
Dim _XmlSerializer As XmlSerializer
Dim _XmlAttributeOverrides As XmlAttributeOverrides
Dim _XmlAttribute As XmlAttributes
Writer.WriteElementString("Regions", String.Join(";", Me.Regions))
Writer.WriteElementString("Accompagnements", String.Join(";", Me.Accompagnements))
' -- Partie Bouteilles
_XmlAttributeOverrides = New XmlAttributeOverrides
_XmlAttribute = New XmlAttributes
_XmlAttribute.XmlRoot = New XmlRootAttribute("Bouteilles")
_XmlAttributeOverrides.Add(GetType(BindingList(Of Bouteille)), _XmlAttribute)
_XmlSerializer = New XmlSerializer(GetType(BindingList(Of Bouteille)), _XmlAttributeOverrides)
_XmlSerializer.Serialize(Writer, Me.Bouteilles)
' -- Partie Convives
_XmlAttributeOverrides = New XmlAttributeOverrides
_XmlAttribute = New XmlAttributes
_XmlAttribute.XmlRoot = New XmlRootAttribute("Convives")
_XmlAttributeOverrides.Add(GetType(BindingList(Of Bouteille)), _XmlAttribute)
_XmlSerializer = New XmlSerializer(GetType(BindingList(Of Convive)), _XmlAttributeOverrides)
_XmlSerializer.Serialize(Writer, Me.Convives)
End Sub
Public Sub ReadXml(Reader As Xml.XmlReader) Implements IXmlSerializable.ReadXml
_Regions.RaiseListChangedEvents = False
_Accompagnements.RaiseListChangedEvents = False
_Bouteilles.RaiseListChangedEvents = False
_Convives.RaiseListChangedEvents = False
Dim _XmlSerializer As XmlSerializer
Dim _XmlAttributeOverrides As XmlAttributeOverrides
Dim _XmlAttribute As XmlAttributes
While (Reader.Read)
If Reader.NodeType = XmlNodeType.Element AndAlso Reader.Name = "Regions" Then
If Reader.Read() AndAlso Reader.NodeType = XmlNodeType.Text Then
_Regions = New BindingList(Of String)(Reader.Value.Split(";").ToList)
End If
ElseIf Reader.NodeType = XmlNodeType.Element AndAlso Reader.Name = "Accompagnements" Then
If Reader.Read() AndAlso Reader.NodeType = XmlNodeType.Text Then
_Accompagnements = New BindingList(Of String)(Reader.Value.Split(";").ToList)
End If
ElseIf Reader.NodeType = XmlNodeType.Element AndAlso Reader.Name = "Bouteilles" Then
' -- Partie Bouteilles
_XmlAttributeOverrides = New XmlAttributeOverrides
_XmlAttribute = New XmlAttributes
_XmlAttribute.XmlRoot = New XmlRootAttribute("Bouteilles")
_XmlAttributeOverrides.Add(GetType(BindingList(Of Bouteille)), _XmlAttribute)
_XmlSerializer = New XmlSerializer(GetType(BindingList(Of Bouteille)), _XmlAttributeOverrides)
_Bouteilles = CType(_XmlSerializer.Deserialize(Reader), BindingList(Of Bouteille))
ElseIf Reader.NodeType = XmlNodeType.Element AndAlso Reader.Name = "Convives" Then
' -- Partie Convives
_XmlAttributeOverrides = New XmlAttributeOverrides
_XmlAttribute = New XmlAttributes
_XmlAttribute.XmlRoot = New XmlRootAttribute("Convives")
_XmlAttributeOverrides.Add(GetType(BindingList(Of Convive)), _XmlAttribute)
_XmlSerializer = New XmlSerializer(GetType(BindingList(Of Convive)), _XmlAttributeOverrides)
_Convives = CType(_XmlSerializer.Deserialize(Reader), BindingList(Of Convive))
End If
End While
_Regions.RaiseListChangedEvents = True
_Accompagnements.RaiseListChangedEvents = True
_Bouteilles.RaiseListChangedEvents = True
_Convives.RaiseListChangedEvents = True
End Sub
#End Region
End Class
Public Class Bouteille
Implements IEqualityComparer(Of Bouteille), INotifyPropertyChanged, IXmlSerializable
Public Shared ReadOnly Legende As New Dictionary(Of Color, String) From {{Color.Green, "Bouteille Disponible"}, {Color.Red, "Bouteille en Attente"}, {Color.Black, "Bouteille à Consommer"}}
Public Shared ReadOnly Notes As New Dictionary(Of Byte, Image) From {{0, My.Resources.Mauvais}, {1, My.Resources.Etoile1}, {2, My.Resources.Etoile2}, {3, My.Resources.Etoile3}}
Private Shared _IdentifiantUnique As New Random
Private _Identifiant As Integer = -1
Private _Etiquette As String
Private _Couleur As String
Private _Region As String
Private _Millesime As UShort = Nothing
Private _Accompagnements As New List(Of String)
Private _Observation As String
Private _TempsDeGarde As Byte = 0
Private _Tolerance As Byte = 0
Private _Prix As Byte = 0
Private _Note As Image = My.Resources.Inconnu
Private WithEvents _Casiers As New BindingList(Of String)
Private _Sorties As New List(Of Date)
Public Event Propriete_Modifie(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
''' <summary>
''' Obtiens l'Identifiant de la Bouteille.
''' </summary>
<XmlAttribute("Identifiant")>
Public Property Identifiant() As Integer
Get
Return _Identifiant
End Get
Set(value As Integer)
If value < 1 Then Throw New ArgumentException("L'identifiant doit être supérieur à zéro.")
_Identifiant = value
End Set
End Property
''' <summary>
''' Obtiens ou Détermine l'Etiquette de la Bouteille.
''' </summary>
Public Property Etiquette() As String
Get
Return _Etiquette
End Get
Set(value As String)
If String.IsNullOrWhiteSpace(value) Then Throw New ArgumentException("Veuillez renseigner l'étiquette.")
_Etiquette = value.ToUpper.Trim
RaiseEvent Propriete_Modifie(Me, New PropertyChangedEventArgs("Etiquette"))
End Set
End Property
''' <summary>
''' Obtiens ou Détermine la Couleur de la Bouteille.
''' </summary>
Public Property Couleur() As String
Get
Return _Couleur
End Get
Set(value As String)
If String.IsNullOrWhiteSpace(value) Then Throw New ArgumentException("Veuillez renseigner la Couleur du vin.")
_Couleur = value.ToUpper.Trim
RaiseEvent Propriete_Modifie(Me, New PropertyChangedEventArgs("Couleur"))
End Set
End Property
''' <summary>
''' Obtiens ou Détermine la Region de la Bouteille.
''' </summary>
Public Property Region() As String
Get
Return _Region
End Get
Set(value As String)
If String.IsNullOrWhiteSpace(value) Then Throw New ArgumentException("Veuillez renseigner la Région du vin.")
_Region = value.ToUpper.Trim
RaiseEvent Propriete_Modifie(Me, New PropertyChangedEventArgs("Region"))
End Set
End Property
''' <summary>
''' Obtiens ou Détermine le Millesime de la Bouteille.
''' </summary>
Public Property Millesime() As UShort
Get
Return _Millesime
End Get
Set(value As UShort)
If Not (value >= (Date.Now.Year - Infos.MillesimeDureeMax) And value <= Date.Now.Year) Then Throw New ArgumentException("Le Millésime est hors Plage.")
_Millesime = value
RaiseEvent Propriete_Modifie(Me, New PropertyChangedEventArgs("Millesime"))
End Set
End Property
''' <summary>
''' Obtiens la liste des Accompagnements de la Bouteille.
''' </summary>
<XmlArray("Accompagnements")>
<XmlArrayItem("Accompagnement")>
Public ReadOnly Property Accompagnements() As List(Of String)
Get
Return _Accompagnements
End Get
End Property
''' <summary>
''' Obtiens ou Détermine l'Observation de la Bouteille.
''' </summary>
Public Property Observation() As String
Get
Return _Observation
End Get
Set(value As String)
_Observation = value
End Set
End Property
''' <summary>
''' Obtiens ou Détermine le Temps de Garde de la Bouteille.
''' </summary>
Public Property TempsDeGarde() As Byte
Get
Return _TempsDeGarde
End Get
Set(value As Byte)
If Not (value >= 0 And value <= Infos.TempsDeGardeMax) Then Throw New ArgumentException("Le Temps de garde est hors plage")
_TempsDeGarde = value
RaiseEvent Propriete_Modifie(Me, New PropertyChangedEventArgs("TempsDeGarde"))
End Set
End Property
''' <summary>
''' Obtiens ou Détermine la Tolérance.
''' </summary>
Public Property Tolerance() As Byte
Get
Return _Tolerance
End Get
Set(value As Byte)
If Not (value >= 0 And value <= Infos.ToleranceMax) Then Throw New ArgumentException("La Tolérance est hors plage")
_Tolerance = value
RaiseEvent Propriete_Modifie(Me, New PropertyChangedEventArgs("Tolerance"))
End Set
End Property
''' <summary>
''' Obtiens ou Détermine le Prix de la Bouteille.
''' </summary>
Public Property Prix() As Byte
Get
Return _Prix
End Get
Set(value As Byte)
If Not (value >= 0 And value <= Infos.PrixMax) Then Throw New ArgumentException("Le Prix est hors plage")
_Prix = value
RaiseEvent Propriete_Modifie(Me, New PropertyChangedEventArgs("Prix"))
End Set
End Property
''' <summary>
''' Obtiens ou Détermine la Note de la Bouteille.
''' </summary>
Public Property Note() As Image
Get
Return _Note
End Get
Set(ByVal value As Image)
If IsNothing(value) Then Throw New ArgumentException("Veuillez renseigner la note.")
If value Is _Note Then Exit Property
_Note = value
RaiseEvent Propriete_Modifie(Me, New PropertyChangedEventArgs("Note"))
End Set
End Property
''' <summary>
''' Obtiens le Nombre de Bouteille en Stock.
''' </summary>
Public ReadOnly Property Stock() As Integer
Get
Return _Casiers.Count
End Get
End Property
''' <summary>
''' Obtiens l'état de la Bouteille.
''' </summary>
Public ReadOnly Property Status() As Color
Get
If (_Millesime + _TempsDeGarde) > Date.Now.Year Then
Return Color.Red
ElseIf (_Millesime + _TempsDeGarde + _Tolerance) <= Date.Now.Year Then
Return Color.Black
Else
Return Color.Green
End If
End Get
End Property
' -------
''' <summary>
''' Obtiens la liste des Casiers de ce type de Bouteille.
''' </summary>
Public ReadOnly Property Casiers() As BindingList(Of String)
Get
Return _Casiers
End Get
End Property
''' <summary>
''' Obtiens le nombre de Sortie Bouteille.
''' </summary>
Public ReadOnly Property Sorties() As Integer
Get
If _Sorties.Count > 0 Then _Sorties.RemoveAll(Function(UneDate) DateDiff(DateInterval.Day, UneDate, Date.Now) > 365)
Return _Sorties.Count
End Get
End Property
''' <summary>
''' Crée une Nouvelle Bouteille.
''' </summary>
Public Sub New()
_Identifiant = _IdentifiantUnique.Next
'MsgBox("Nouvel Bouteille")
End Sub
Public Function EstAccompagnements(ByVal Values() As String) As Boolean ' Bordeaux, Vichy, Champagne
If Values.Count = 0 Then Return False
End Function
''' <summary>
''' Détermine si le Casier spécifié contient la Bouteille actuelle.
''' </summary>
Public Function EnStock(ByVal NomDuCasier As String) As Boolean
Return _Casiers.Contains(NomDuCasier)
End Function
''' <summary>
''' Compare deux bouteilles entre elles
''' </summary>
''' <param name="x">Bouteille à comparer</param>
''' <param name="y">Bouteille à comparer</param>
Public Shadows Function Equals(x As Bouteille, y As Bouteille) As Boolean Implements IEqualityComparer(Of Bouteille).Equals
If IsNothing(x) OrElse IsNothing(y) Then Throw New ArgumentException("Veuillez renseigner les Bouteilles à comparer.")
Select Case True
Case x.Identifiant = y.Identifiant
Return True
Case String.Equals(x.Couleur, y.Couleur, StringComparison.CurrentCultureIgnoreCase) And String.Equals(x.Region, y.Region, StringComparison.CurrentCultureIgnoreCase) And String.Equals(x.Etiquette, y.Etiquette, StringComparison.CurrentCultureIgnoreCase) And x.Millesime = y.Millesime
Return True
Case Else
Return False
End Select
End Function
''' <summary>
''' Retourne l'identifiant de la Bouteille
''' </summary>
''' <param name="obj">Bouteille</param>
Public Shadows Function GetHashCode(obj As Bouteille) As Integer Implements IEqualityComparer(Of Bouteille).GetHashCode
Return obj._Identifiant
End Function
''' <summary>
''' Retourne la surcharge du ToString de la Bouteille.
''' </summary>
Public Shadows Function ToString() As String
Return String.Format("{0} de {1}, ({2}, {3})", _Etiquette, _Millesime, _Region, _Couleur)
End Function
Private Sub _Casiers_Modifie(ByVal sender As Object, ByVal e As ListChangedEventArgs) Handles _Casiers.ListChanged
If Cave.GetInstance.Bouteilles.Contains(Me, Me) Then
Select Case e.ListChangedType = ListChangedType.ItemDeleted
Case True
_Sorties.Add(Date.Now)
RaiseEvent Propriete_Modifie(Me, New PropertyChangedEventArgs("Casiers"))
Case Else
RaiseEvent Propriete_Modifie(Me, New PropertyChangedEventArgs("Casiers"))
End Select
End If
End Sub
#Region "Partie IXMLSerializable"
Public Function GetSchema() As Schema.XmlSchema Implements IXmlSerializable.GetSchema
Return Nothing
End Function
Public Sub WriteXml(Writer As XmlWriter) Implements IXmlSerializable.WriteXml
Writer.WriteAttributeString("Identifiant", _Identifiant)
Writer.WriteElementString("Etiquette", Me.Etiquette)
Writer.WriteElementString("Couleur", Me.Couleur)
Writer.WriteElementString("Region", Me.Region)
Writer.WriteElementString("Millesime", Me.Millesime)
Writer.WriteElementString("Accompagnements", String.Join(";", Me.Accompagnements))
Writer.WriteElementString("Observation", Me.Observation)
Writer.WriteElementString("TempsDeGarde", Me.TempsDeGarde)
Writer.WriteElementString("Tolerance", Me.Tolerance)
Writer.WriteElementString("Prix", Me.Prix)
Writer.WriteElementString("Note", "")
Writer.WriteElementString("Casiers", String.Join(";", Me.Casiers))
Writer.WriteElementString("Sorties", String.Join(";", _Sorties))
End Sub
Public Sub ReadXml(reader As XmlReader) Implements IXmlSerializable.ReadXml
_Casiers.RaiseListChangedEvents = False
_Identifiant = CInt(reader.GetAttribute("Identifiant"))
While (reader.Read)
If reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "Etiquette" Then
If reader.Read() AndAlso reader.NodeType = XmlNodeType.Text Then
_Etiquette = reader.Value.ToString
End If
ElseIf reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "Couleur" Then
If reader.Read() AndAlso reader.NodeType = XmlNodeType.Text Then
_Couleur = reader.Value.ToString
End If
ElseIf reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "Region" Then
If reader.Read() AndAlso reader.NodeType = XmlNodeType.Text Then
_Region = reader.Value.ToString
End If
ElseIf reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "Millesime" Then
If reader.Read() AndAlso reader.NodeType = XmlNodeType.Text Then
_Millesime = CUShort(reader.Value)
End If
ElseIf reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "Accompagnements" Then
If reader.Read() AndAlso reader.NodeType = XmlNodeType.Text Then
_Accompagnements = reader.Value.Split(";").ToList
End If
ElseIf reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "Observation" Then
If reader.Read() AndAlso reader.NodeType = XmlNodeType.Text Then
_Observation = reader.Value
End If
ElseIf reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "TempsDeGarde" Then
If reader.Read() AndAlso reader.NodeType = XmlNodeType.Text Then
_TempsDeGarde = CByte(reader.Value)
End If
ElseIf reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "Tolerance" Then
If reader.Read() AndAlso reader.NodeType = XmlNodeType.Text Then
_Tolerance = CByte(reader.Value)
End If
ElseIf reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "Prix" Then
If reader.Read() AndAlso reader.NodeType = XmlNodeType.Text Then
_Prix = CByte(reader.Value)
End If
'ElseIf reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "Note" Then
' If reader.Read() AndAlso reader.NodeType = XmlNodeType.Text Then
' _Note = reader.Value
' End If
ElseIf reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "Casiers" Then
If reader.Read() AndAlso reader.NodeType = XmlNodeType.Text Then
_Casiers = New BindingList(Of String)(reader.Value.Split(";").ToList)
End If
'ElseIf reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "Sorties" Then
' If reader.Read() AndAlso reader.NodeType = XmlNodeType.Text Then
' _Sorties = reader.Value.Split(";").ToList
' End If
End If
End While
_Casiers.RaiseListChangedEvents = True
End Sub
#End Region
End Class
End Namespace |
Partager