Index: VerpakkingsDefinitie/UI/VerpakkingDetailScherm.pas =================================================================== diff -u -r617 -r618 --- VerpakkingsDefinitie/UI/VerpakkingDetailScherm.pas (.../VerpakkingDetailScherm.pas) (revision 617) +++ VerpakkingsDefinitie/UI/VerpakkingDetailScherm.pas (.../VerpakkingDetailScherm.pas) (revision 618) @@ -307,8 +307,9 @@ // DeelVan // Kijken waar geselecteerde index ligt. Indien het een geldige selectie is, object selecteren. - if (ComboBoxDeelVan.ItemIndex > 0) and (ComboBoxDeelVan.ItemIndex < ComboBoxDeelVan.Items.Count - 1) then - ProductVerpakking.DeelVan := ApplicationContext.ProductVerpakkingContext.ProductVerpakkingen[ComboBoxDeelVan.ItemIndex] + if (ComboBoxDeelVan.ItemIndex >= 0) and (ComboBoxDeelVan.ItemIndex < ComboBoxDeelVan.Items.Count) then + ProductVerpakking.DeelVan := ApplicationContext.ProductVerpakkingContext.GetDeelVan + (ComboBoxDeelVan.Items[ComboBoxDeelVan.ItemIndex]) else // Geen 'deel van' geselecteerd. ProductVerpakking.DeelVan := nil; Index: VerpakkingsDefinitie/ApplicationContext.pas =================================================================== diff -u -r610 -r618 --- VerpakkingsDefinitie/ApplicationContext.pas (.../ApplicationContext.pas) (revision 610) +++ VerpakkingsDefinitie/ApplicationContext.pas (.../ApplicationContext.pas) (revision 618) @@ -257,6 +257,7 @@ procedure AddProductVerpakking(ProductVerpakking: TProductVerpakking); procedure VerwijderProductVerpakking(ProductVerpakking: TProductVerpakking); function GetDeelVanOpties(ProductVerpakking: TProductVerpakking): TReadOnlyList; + function GetDeelVan(DeelVanIdentificatie: string): TProductVerpakking; property GeselecteerdeVerpakking: TProductVerpakking read FGeselecteerdeVerpakking write SetGeselecteerdeVerpakking; property IsOK: boolean read FIsOK write FIsOK; @@ -471,8 +472,22 @@ procedure TProductVerpakkingenContext.VerwijderProductVerpakking(ProductVerpakking: TProductVerpakking); var + TempVerpakking: TProductVerpakking; I: Integer; begin + if ProductVerpakking = nil then + exit; + + // De andere objecten afgaan en we verwijderen elke 'Deel van' referentie + for TempVerpakking in FProductVerpakkingen do + begin + if (TempVerpakking.DeelVan <> nil) and TempVerpakking.DeelVan.Equals(ProductVerpakking) then + begin + TempVerpakking.DeelVan := nil; + TempVerpakking.DeelVanCaption := ''; + end; + end; + // We gaan matchen met equals, niet op de objectinstantie. // Zoeken I := 0; @@ -509,6 +524,21 @@ Result := TReadOnlyList.Create(ProductVerpakkingen); end; +function TProductVerpakkingenContext.GetDeelVan(DeelVanIdentificatie: string): TProductVerpakking; +var + TempVerpakking: TProductVerpakking; +begin + for TempVerpakking in FProductVerpakkingen do + begin + if DeelVanIdentificatie = TempVerpakking.GetDeelVanDisplay then + begin + Result := TempVerpakking; + exit; + end; + end; + Result := nil; +end; + // Product verpakking constructor TProductVerpakking.Create(); begin Index: VerpakkingsDefinitie/WS/ProductsAgent.pas =================================================================== diff -u -r617 -r618 --- VerpakkingsDefinitie/WS/ProductsAgent.pas (.../ProductsAgent.pas) (revision 617) +++ VerpakkingsDefinitie/WS/ProductsAgent.pas (.../ProductsAgent.pas) (revision 618) @@ -877,10 +877,14 @@ DeelVanCaption := ProductVerpakking.DeelVanCaption; // Deel van informatie halen uit object. Leeg betekent niks geslecteerd. if ProductVerpakking.DeelVan <> nil then - // Caption wordt door server juist gezet - DeelVanID := ProductVerpakking.DeelVan.ID + if ProductVerpakking.ID = ProductVerpakking.DeelVan.ID then + Exception.Create('Een verpakking kan geen onderdeel zijn van zichzelf.') + else + // Caption wordt door server juist gezet + DeelVanID := ProductVerpakking.DeelVan.ID else begin + // Geen deel van een andere verpakking DeelVanID := ''; DeelVanCaption := ''; end;