Index: VerpakkingsDefinitie/UI/ProductDetailScherm.pas =================================================================== diff -u -r599 -r600 --- VerpakkingsDefinitie/UI/ProductDetailScherm.pas (.../ProductDetailScherm.pas) (revision 599) +++ VerpakkingsDefinitie/UI/ProductDetailScherm.pas (.../ProductDetailScherm.pas) (revision 600) @@ -32,6 +32,7 @@ procedure ListViewVerpakkingenSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); procedure ButtonNieuweVerpakkingClick(Sender: TObject); procedure ButtonDupliceerVerpakkingClick(Sender: TObject); + procedure ButtonVerwijderVerpakkingClick(Sender: TObject); private FProductsContextSubject: TSubject; FProductsContextSubjectObserver: TSubjectObserver; @@ -104,6 +105,14 @@ VerwerkAgentVerpakkingCall(); end; +procedure TFormProductDetail.ButtonVerwijderVerpakkingClick(Sender: TObject); +begin + FProductsAgent.VerwijderVerpakking(ApplicationContext.ProductVerpakkingContext.GeselecteerdeVerpakking, + ApplicationContext.UserContext, ApplicationContext.ProductVerpakkingContext); + + VerwerkAgentVerpakkingCall(); +end; + procedure TFormProductDetail.VerwerkAgentVerpakkingCall(); var ErrorMessage: string; @@ -167,6 +176,8 @@ FVerpakkingenContextSubjectObserver.Enabled := true; end; + UpdateVerpakkingControlsEnableStatus(); + Navigator.NavigeerNaar(NAVTOONPRODUCTVERPAKKING); end; end; Index: VerpakkingsDefinitie/WS/ProductsAgent.pas =================================================================== diff -u -r599 -r600 --- VerpakkingsDefinitie/WS/ProductsAgent.pas (.../ProductsAgent.pas) (revision 599) +++ VerpakkingsDefinitie/WS/ProductsAgent.pas (.../ProductsAgent.pas) (revision 600) @@ -36,6 +36,7 @@ // Verpakkingen procedure MapPxBoxDataNaarProductVerpakking(pxBoxDataObj: OptiServerService.pxBoxData; ProductVerpakking: TProductVerpakking); procedure MapProductVerpakkingNaarPxBoxData(ProductVerpakking: TProductVerpakking; pxBoxDataObj: OptiServerService.pxBoxData); + procedure RegistreerGelukteVerpakkingQuery(ProductVerpakkingenContext: TProductVerpakkingenContext); procedure RegistreerMislukteVerpakkingQuery(ProductVerpakkingenContext: TProductVerpakkingenContext; pxStatusObj: OptiServerService.pxStatus); overload; function GetVerpakkingIDsViaProduct(ProductNr: Integer; UserContext: TUserContext; @@ -60,6 +61,8 @@ ProductVerpakkingenContext: TProductVerpakkingenContext); procedure OpslaanProductVerpakking(ProductVerpakking: TProductVerpakking; UserContext: TUserContext; ProductVerpakkingenContext: TProductVerpakkingenContext); + procedure VerwijderVerpakking(ProductVerpakking: TProductVerpakking; UserContext: TUserContext; + ProductVerpakkingenContext: TProductVerpakkingenContext); end; implementation @@ -541,9 +544,7 @@ // Gelukt // Andere velden juist zetten - ProductVerpakkingenContext.IsOK := True; - ProductVerpakkingenContext.ErrorMessage := ''; - ProductVerpakkingenContext.InternalErrorMessage := ''; + RegistreerGelukteVerpakkingQuery(ProductVerpakkingenContext); MapPxBoxDataNaarProductVerpakking(GetBoxDataViaIDResponseObj.varBoxData, NieuweVerpakking); @@ -593,9 +594,8 @@ if (Product = nil) or (CutOrder < 0) then exit; - ProductVerpakkingenContext.IsOK := True; - ProductVerpakkingenContext.ErrorMessage := ''; - ProductVerpakkingenContext.InternalErrorMessage := ''; + // 'Gelukte' query emuleren + RegistreerGelukteVerpakkingQuery(ProductVerpakkingenContext); // Nieuwe productverpakking aanmaken NieuweProductVerpakking := TProductVerpakking.Create(); @@ -658,22 +658,67 @@ // Response if SaveBoxDataResponseObj.SaveBoxDataResult.IsOK then begin - // Gelukt, ID juist zetten + // Gelukt + RegistreerGelukteVerpakkingQuery(ProductVerpakkingenContext); + // ID juist zetten ProductVerpakking.ID := SaveBoxDataResponseObj.SaveBoxDataResult.Data; ProductVerpakkingenContext.NotifyChanged(); end else begin // Mislukt - ProductVerpakkingenContext.IsOK := SaveBoxDataResponseObj.SaveBoxDataResult.IsOK; - ProductVerpakkingenContext.ErrorMessage := SaveBoxDataResponseObj.SaveBoxDataResult.Message_; - ProductVerpakkingenContext.InternalErrorMessage := SaveBoxDataResponseObj.SaveBoxDataResult.InternalMessage; + RegistreerMislukteVerpakkingQuery(ProductVerpakkingenContext, SaveBoxDataResponseObj.SaveBoxDataResult); end; finally FreeAndNil(RequestData); end; end; +procedure TProductsAgent.VerwijderVerpakking(ProductVerpakking: TProductVerpakking; UserContext: TUserContext; + ProductVerpakkingenContext: TProductVerpakkingenContext); +var + RequestData: OptiServerService.DeleteBoxDataViaID; + DeleteBoxDataViaIDResponseObj: OptiServerService.DeleteBoxDataViaIDResponse; +begin + RequestData := nil; + + // Als product nog niet is opgeslagen op server heeft het geen ID + // Enkel verwijderen uit lijst en stoppen. + if ProductVerpakking.ID = '' then + begin + ProductVerpakkingenContext.VerwijderProductVerpakking(ProductVerpakking); + exit; + end; + + // Eerst verwijderen van server, dan lokaal. + try + // Request + RequestData := OptiServerService.DeleteBoxDataViaID.Create(); + RequestData.SessionKey := UserContext.SessionKey; + RequestData.BoxDataID := ProductVerpakking.ID; + + // Verpakking wissen + DeleteBoxDataViaIDResponseObj := FOptiBoxServerSoap.DeleteBoxDataViaID(RequestData); + + // Response + if DeleteBoxDataViaIDResponseObj.DeleteBoxDataViaIDResult = nil then + begin + // Gelukt + RegistreerGelukteVerpakkingQuery(ProductVerpakkingenContext); + end + else + begin + // Mislukt + RegistreerMislukteVerpakkingQuery(ProductVerpakkingenContext, DeleteBoxDataViaIDResponseObj.DeleteBoxDataViaIDResult); + end; + + // Wissen uit lijst + ProductVerpakkingenContext.VerwijderProductVerpakking(ProductVerpakking); + finally + FreeAndNil(RequestData); + end; +end; + procedure TProductsAgent.MapPxBoxDataNaarProductVerpakking(pxBoxDataObj: OptiServerService.pxBoxData; ProductVerpakking: TProductVerpakking); var @@ -820,11 +865,16 @@ end; end; +procedure TProductsAgent.RegistreerGelukteVerpakkingQuery(ProductVerpakkingenContext: TProductVerpakkingenContext); +begin + ProductVerpakkingenContext.IsOK := True; + ProductVerpakkingenContext.ErrorMessage := ''; + ProductVerpakkingenContext.InternalErrorMessage := ''; +end; + procedure TProductsAgent.RegistreerMislukteVerpakkingQuery(ProductVerpakkingenContext: TProductVerpakkingenContext; pxStatusObj: OptiServerService.pxStatus); begin - ProductVerpakkingenContext.Reset(false); - ProductVerpakkingenContext.IsOK := pxStatusObj.IsOK; ProductVerpakkingenContext.ErrorMessage := pxStatusObj.Message_; ProductVerpakkingenContext.InternalErrorMessage := pxStatusObj.InternalMessage; Index: VerpakkingsDefinitie/ApplicationContext.pas =================================================================== diff -u -r599 -r600 --- VerpakkingsDefinitie/ApplicationContext.pas (.../ApplicationContext.pas) (revision 599) +++ VerpakkingsDefinitie/ApplicationContext.pas (.../ApplicationContext.pas) (revision 600) @@ -237,6 +237,7 @@ property ProductVerpakkingen: TReadOnlyList read GetProductVerpakkingenLijst; procedure SetProductVerpakkingen(Collection: TEnumerable); procedure AddProductVerpakking(ProductVerpakking: TProductVerpakking); + procedure VerwijderProductVerpakking(ProductVerpakking: TProductVerpakking); function GetDeelVanOpties(ProductVerpakking: TProductVerpakking): TList; property GeselecteerdeVerpakking: TProductVerpakking read FGeselecteerdeVerpakking write SetGeselecteerdeVerpakking; @@ -410,6 +411,27 @@ self.NotifyChanged(); end; +procedure TProductVerpakkingenContext.VerwijderProductVerpakking(ProductVerpakking: TProductVerpakking); +var + I: Integer; +begin + // We gaan matchen met equals, niet op de objectinstantie. + // Zoeken + I := 0; + while (I < FProductVerpakkingen.Count) and (not FProductVerpakkingen[I].Equals(ProductVerpakking)) do + I := I + 1; + // Wissen + if I < FProductVerpakkingen.Count then + begin + FProductVerpakkingen.Delete(I); + // Als dit product gelijk was aan het geselecteerde product, geselecteerde product leegmaken. + if ProductVerpakking.Equals(FGeselecteerdeVerpakking) then + FreeAndNil(FGeselecteerdeVerpakking); + end; + + self.NotifyChanged(); +end; + procedure TProductVerpakkingenContext.SetGeselecteerdeVerpakking(ProductVerpakking: TProductVerpakking); begin FGeselecteerdeVerpakking := ProductVerpakking; Index: VerpakkingsDefinitie/UI/ProductDetailScherm.dfm =================================================================== diff -u -r599 -r600 --- VerpakkingsDefinitie/UI/ProductDetailScherm.dfm (.../ProductDetailScherm.dfm) (revision 599) +++ VerpakkingsDefinitie/UI/ProductDetailScherm.dfm (.../ProductDetailScherm.dfm) (revision 600) @@ -176,6 +176,7 @@ Anchors = [akTop, akRight] Caption = 'Verwijder' TabOrder = 2 + OnClick = ButtonVerwijderVerpakkingClick end object ButtonDupliceerVerpakking: TButton Left = 698