Index: VerpakkingsDefinitie/WS/ProductsAgent.pas =================================================================== diff -u -r601 -r602 --- VerpakkingsDefinitie/WS/ProductsAgent.pas (.../ProductsAgent.pas) (revision 601) +++ VerpakkingsDefinitie/WS/ProductsAgent.pas (.../ProductsAgent.pas) (revision 602) @@ -40,6 +40,8 @@ procedure RegistreerMislukteVerpakkingQuery(ProductVerpakkingenContext: TProductVerpakkingenContext; pxStatusObj: OptiServerService.pxStatus); overload; function BepaalNieuwCutOrderProductVerpakking(ProductVerpakkingen: TEnumerable): Integer; + procedure OpslaanProductVerpakking(ProductVerpakking: TProductVerpakking; UserContext: TUserContext; + ProductVerpakkingenContext: TProductVerpakkingenContext; nieuw: Boolean); function GetVerpakkingIDsViaProduct(ProductNr: Integer; UserContext: TUserContext; ProductVerpakkingenContext: TProductVerpakkingenContext): TList; function GeefVerpakkingMetID(VerpakkingID: string; UserContext: TUserContext; @@ -60,7 +62,7 @@ UserContext: TUserContext; ProductVerpakkingenContext: TProductVerpakkingenContext); procedure DupliceerVerpakking(ProductVerpakkingen: TEnumerable; ProductVerpakking: TProductVerpakking; UserContext: TUserContext; ProductVerpakkingenContext: TProductVerpakkingenContext); - procedure OpslaanProductVerpakking(ProductVerpakking: TProductVerpakking; UserContext: TUserContext; + procedure OpslaanGewijzigdeProductVerpakking(ProductVerpakking: TProductVerpakking; UserContext: TUserContext; ProductVerpakkingenContext: TProductVerpakkingenContext); procedure VerwijderVerpakking(ProductVerpakking: TProductVerpakking; UserContext: TUserContext; ProductVerpakkingenContext: TProductVerpakkingenContext); @@ -491,6 +493,7 @@ // Opvragen productverpakkingen TempProductVerpakkingen := GeefVerpakkingenMetIDs(VerpakkingIDs, UserContext, ProductVerpakkingenContext); if ProductVerpakkingenContext.IsOK = false then + // Mislukt, breek af exit; // Registreer DeelVan, zoekt de verpakking op met het overeenkomstige DeelVanID = ID @@ -617,7 +620,7 @@ // Nadien slaan we deze verpakking meteen op de server. if ProductVerpakking = nil then exit; - + { TODO : Bug: dupliceren van diplicaat geeft probleem met default data (data uit database lijkt alsof leeg ID werd gebruikt, geeft leeg object terug dan) } NieuweVerpakking := GeefVerpakkingMetID(ProductVerpakking.ID, UserContext, ProductVerpakkingenContext); if ProductVerpakkingenContext.IsOK = false then @@ -631,48 +634,51 @@ NieuweVerpakking.CutOrder := BepaalNieuwCutOrderProductVerpakking(ProductVerpakkingen); // Opslaan - OpslaanProductVerpakking(NieuweVerpakking, UserContext, ProductVerpakkingenContext); + OpslaanProductVerpakking(NieuweVerpakking, UserContext, ProductVerpakkingenContext, True); if ProductVerpakkingenContext.IsOK then - ProductVerpakkingenContext.AddProductVerpakking(NieuweVerpakking); + ProductVerpakkingenContext.AddProductVerpakking(NieuweVerpakking); // Notify gebeurt hier end; -procedure TProductsAgent.OpslaanProductVerpakking(ProductVerpakking: TProductVerpakking; UserContext: TUserContext; +procedure TProductsAgent.OpslaanGewijzigdeProductVerpakking(ProductVerpakking: TProductVerpakking; UserContext: TUserContext; ProductVerpakkingenContext: TProductVerpakkingenContext); +begin + OpslaanProductVerpakking(ProductVerpakking, UserContext, ProductVerpakkingenContext, false); + ProductVerpakkingenContext.NotifyChanged(); +end; + +procedure TProductsAgent.OpslaanProductVerpakking(ProductVerpakking: TProductVerpakking; UserContext: TUserContext; + ProductVerpakkingenContext: TProductVerpakkingenContext; nieuw: Boolean); var RequestData: OptiServerService.SaveBoxData; VerpakkingData: OptiServerService.pxBoxData; SaveBoxDataResponseObj: SaveBoxDataResponse; begin - RequestData := nil; - try - // Request - RequestData := OptiServerService.SaveBoxData.Create(); - RequestData.SessionKey := UserContext.SessionKey; + // Request + // Kan hier geen try--finally met free rond zetten, want dan geeft free de tweede keer dat deze functie wordt opgeroepen een error. + RequestData := OptiServerService.SaveBoxData.Create(); + RequestData.SessionKey := UserContext.SessionKey; - VerpakkingData := OptiServerService.pxBoxData.Create(); - MapProductVerpakkingNaarPxBoxData(ProductVerpakking, VerpakkingData); - RequestData.pxBoxData := VerpakkingData; + VerpakkingData := OptiServerService.pxBoxData.Create(); + MapProductVerpakkingNaarPxBoxData(ProductVerpakking, VerpakkingData); + RequestData.pxBoxData := VerpakkingData; - // Verpakking opslaan + // Verpakking opslaan - SaveBoxDataResponseObj := FOptiBoxServerSoap.SaveBoxData(RequestData); + SaveBoxDataResponseObj := FOptiBoxServerSoap.SaveBoxData(RequestData); - // Response - if SaveBoxDataResponseObj.SaveBoxDataResult.IsOK then - begin - // Gelukt - RegistreerGelukteVerpakkingQuery(ProductVerpakkingenContext); + // Response + if SaveBoxDataResponseObj.SaveBoxDataResult = nil then + begin + // Gelukt + RegistreerGelukteVerpakkingQuery(ProductVerpakkingenContext); + if nieuw then // ID juist zetten ProductVerpakking.ID := SaveBoxDataResponseObj.SaveBoxDataResult.Data; - ProductVerpakkingenContext.NotifyChanged(); - end - else - begin - // Mislukt - RegistreerMislukteVerpakkingQuery(ProductVerpakkingenContext, SaveBoxDataResponseObj.SaveBoxDataResult); - end; - finally - FreeAndNil(RequestData); + end + else + begin + // Mislukt + RegistreerMislukteVerpakkingQuery(ProductVerpakkingenContext, SaveBoxDataResponseObj.SaveBoxDataResult); end; end; @@ -751,7 +757,6 @@ with ProductVerpakking do begin RawDefaultData := pxBoxDataObj.DefaultData; - VolumeVanCaption := pxBoxDataObj.VolumeVanCaption; ID := pxBoxDataObj.ID; ObjType := pxBoxDataObj.ObjType; @@ -839,8 +844,16 @@ // Speciale properties DeelVanCaption := ProductVerpakking.DeelVanCaption; - DeelVanID := ProductVerpakking.DeelVanID; - VolumeVanCaption := ProductVerpakking.VolumeVanCaption; + // 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 + else + begin + DeelVanID := ''; + DeelVanCaption := ''; + end; + VolumeVanID := ProductVerpakking.VolumeVanID; MetaCaption := ProductVerpakking.MetaCaption; MetaID := ProductVerpakking.MetaID; @@ -896,8 +909,6 @@ ProductVerpakkingenContext.IsOK := pxStatusObj.IsOK; ProductVerpakkingenContext.ErrorMessage := pxStatusObj.Message_; ProductVerpakkingenContext.InternalErrorMessage := pxStatusObj.InternalMessage; - - ProductVerpakkingenContext.NotifyChanged(); end; end.