Index: VerpakkingsDefinitie/WS/ProductsAgent.pas =================================================================== diff -u -r608 -r609 --- VerpakkingsDefinitie/WS/ProductsAgent.pas (.../ProductsAgent.pas) (revision 608) +++ VerpakkingsDefinitie/WS/ProductsAgent.pas (.../ProductsAgent.pas) (revision 609) @@ -52,6 +52,9 @@ procedure RegistreerProductGroepenDataset(ProductVerpakkingMetaContext: TProductVerpakkingMetaContext; DataSet: string); procedure RegistreerProductVerpakkingMetaDataset(ProductVerpakkingMetaContext: TProductVerpakkingMetaContext; DataSet: string); + procedure RegistreerProductVerpakkingNieuweDefault(ProductVerpakking: TProductVerpakking; + varBoxMetaObj: OptiServerService.pxBoxMeta); + procedure MappxBoxMetaNaarPxBoxData(pxBoxMetaObj: pxBoxMeta; pxBoxDataObj: pxBoxData); procedure RegistreerGelukteVerpakkingMetaQuery(ProductVerpakkingMetaContext: TProductVerpakkingMetaContext); procedure RegistreerMislukteVerpakkingMetaQuery(ProductVerpakkingMetaContext: TProductVerpakkingMetaContext; pxStatusObj: OptiServerService.pxStatus); @@ -77,6 +80,9 @@ procedure LaadProductGroepen(UserContext: TUserContext; ProductVerpakkingMetaContext: TProductVerpakkingMetaContext); procedure LaadProductVerpakkingMetas(ProductGroep: string; UserContext: TUserContext; ProductVerpakkingMetaContext: TProductVerpakkingMetaContext); + procedure KiesProductVerpakkingMeta(ProductVerpakkingMeta: TProductVerpakkingMeta; ProductVerpakking: TProductVerpakking; + UserContext: TUserContext; ProductVerpakkingenContext: TProductVerpakkingenContext; + ProductVerpakkingMetaContext: TProductVerpakkingMetaContext); end; implementation @@ -838,7 +844,7 @@ NieuweVerpakkingParameter.ToolTip := pxBoxDataObj.Params[i].ToolTip; NieuweVerpakkingParameter.Waarde := pxBoxDataObj.Params[i].Waarde; // Kijken of aantal parameters in default data overeenkomt met die in gewone data. - if (pxBoxDataObj.DefaultData <> nil) and (High(pxBoxDataObj.Params) = High(pxBoxDataObj.DefaultData.Params)) then + if (pxBoxDataObj.DefaultData <> nil) and (Length(pxBoxDataObj.Params) = Length(pxBoxDataObj.DefaultData.Params)) then NieuweVerpakkingParameter.DefaultWaarde := pxBoxDataObj.DefaultData.Params[i].Waarde; TempNieuweVerpakkingParameters.Add(NieuweVerpakkingParameter); end; @@ -859,7 +865,8 @@ begin // Default data object casten. Dit uit klasse halen bespaart extra call. if ProductVerpakking.RawDefaultData = nil then - raise Exception.Create('Default data raw object mag niet leeg zijn'){ TODO : Controleren dat nieuwe verpakking nod geen ID heeft en dus niet kan worden opgeslagen } + raise Exception.Create('Default data raw object mag niet leeg zijn') + { TODO : Controleren dat nieuwe verpakking nod geen ID heeft en dus niet kan worden opgeslagen } else DefaultDataObj := pxBoxData(ProductVerpakking.RawDefaultData); @@ -907,9 +914,9 @@ PPSSubgroep := DefaultDataObj.PPSSubgroep; PPSOutput := DefaultDataObj.PPSOutput; - // Parameters jusit zetten en terugvallen op default waarde indien nodig. + // Parameters juist zetten en terugvallen op default waarde indien nodig. SetLength(TempParams, ProductVerpakking.Parameters.Count); - for i := 0 to high(TempParams) - 1 do + for i := 0 to high(TempParams) do begin // Andere velden overnemen TempParams[i] := pxemDataParam.Create(); @@ -1121,6 +1128,135 @@ end; end; +procedure TProductsAgent.KiesProductVerpakkingMeta(ProductVerpakkingMeta: TProductVerpakkingMeta; + ProductVerpakking: TProductVerpakking; UserContext: TUserContext; ProductVerpakkingenContext: TProductVerpakkingenContext; + ProductVerpakkingMetaContext: TProductVerpakkingMetaContext); +var + RequestData: OptiServerService.GetMetaViaID; + GetMetaViaIDResponseObj: OptiServerService.GetMetaViaIDResponse; +begin + RequestData := nil; + try + // Request + RequestData := OptiServerService.GetMetaViaID.Create(); + RequestData.SessionKey := UserContext.SessionKey; + RequestData.MetaID := IntToStr(ProductVerpakkingMeta.ID); + + // Verpakking wissen + GetMetaViaIDResponseObj := FOptiBoxServerSoap.GetMetaViaID(RequestData); + + // Response + if GetMetaViaIDResponseObj.GetMetaViaIDResult = nil then + begin + // Gelukt + RegistreerGelukteVerpakkingMetaQuery(ProductVerpakkingMetaContext); + RegistreerProductVerpakkingNieuweDefault(ProductVerpakking, GetMetaViaIDResponseObj.varBoxMeta); + ProductVerpakkingenContext.NotifyChanged(); + end + else + // Mislukt + RegistreerMislukteVerpakkingMetaQuery(ProductVerpakkingMetaContext, GetMetaViaIDResponseObj.GetMetaViaIDResult); + + finally + FreeAndNil(RequestData); + end; +end; + +procedure TProductsAgent.RegistreerProductVerpakkingNieuweDefault(ProductVerpakking: TProductVerpakking; + varBoxMetaObj: OptiServerService.pxBoxMeta); +var + i: Integer; + TempNieuweVerpakkingParameters: TList; + NieuweVerpakkingParameter: TProductVerpakkingParameter; + NieuweDefaultData: OptiServerService.pxBoxData; +begin + // Nieuwe default initialiseren indien nodig en overschrijven met waarden van meta. + if ProductVerpakking.RawDefaultData <> nil then + begin + MappxBoxMetaNaarPxBoxData(varBoxMetaObj, pxBoxData(ProductVerpakking.RawDefaultData)); + NieuweDefaultData := pxBoxData(ProductVerpakking.RawDefaultData); // Toekennen aan tussenvariabele. + end + else + begin + // Default data is leeg. Aanmaken, vullen en toewijzen. + NieuweDefaultData := OptiServerService.pxBoxData.Create(); + MappxBoxMetaNaarPxBoxData(varBoxMetaObj, NieuweDefaultData); + ProductVerpakking.RawDefaultData := NieuweDefaultData; + end; + + TempNieuweVerpakkingParameters := TList.Create(); + try + with ProductVerpakking do + begin + // Default waarden overschrijven + RawDefaultData := NieuweDefaultData; + + // Meta gegevens invullen + ProductVerpakking.MetaID := varBoxMetaObj.ID; + ProductVerpakking.MetaCaption := varBoxMetaObj.ProductGroep + ': ' + varBoxMetaObj.Name_; // Wordt overschreven door server + + // Default data overschrijven + DefaultOptiType := NieuweDefaultData.OptiType; + DefaultPlaatsing := NieuweDefaultData.Plaatsing; + DefaultHoogte := NieuweDefaultData.Hoogte; + DefaultBreedte := NieuweDefaultData.Breedte; + DefaultDiepte := NieuweDefaultData.Diepte; + + DefaultPosities.AddRange(SplitString(NieuweDefaultData.Positie, ';')); + DefaultRichtingen.AddRange(SplitString(NieuweDefaultData.Rotatie, ';')); + + // Verpakking parameters overschrijven. Default data bevat enkel ID en waarde. + for i := 0 to High(NieuweDefaultData.Params) do + begin + NieuweVerpakkingParameter := TProductVerpakkingParameter.Create(); + NieuweVerpakkingParameter.ID := varBoxMetaObj.Params[i].ID; + NieuweVerpakkingParameter.ProgLabel := varBoxMetaObj.Params[i].ProgLabel; + NieuweVerpakkingParameter.ToolTip := varBoxMetaObj.Params[i].Omschrijving; + NieuweVerpakkingParameter.DefaultWaarde := varBoxMetaObj.Params[i].Default_; + + TempNieuweVerpakkingParameters.Add(NieuweVerpakkingParameter); + end; + SetParameters(TempNieuweVerpakkingParameters); + end; + finally + TempNieuweVerpakkingParameters.Clear(); + FreeAndNil(TempNieuweVerpakkingParameters); + end; +end; + +procedure TProductsAgent.MappxBoxMetaNaarPxBoxData(pxBoxMetaObj: pxBoxMeta; pxBoxDataObj: pxBoxData); +var + i: Integer; + DefaultDataObj: OptiServerService.pxBoxData; + TempParams: ArrayOfpxemDataParampxemDataParam; +begin + with pxBoxDataObj do + begin + CutOrder := 0; + Positie := pxBoxMetaObj.Positie; + // Box select, eerste item z'n naam selecteren indien aanwezig + if Length(pxBoxMetaObj.BoxSelect) > 0 then + BoxSelect := pxBoxMetaObj.BoxSelect[0].Naam; + Rotatie := pxBoxMetaObj.Rotatie; + Plaatsing := pxBoxMetaObj.Plaatsing; + Hoogte := pxBoxMetaObj.Hoogte; + Breedte := pxBoxMetaObj.Breedte; + Diepte := pxBoxMetaObj.Diepte; + + // Params, enkel ID en waarde overnemen + SetLength(TempParams, Length(pxBoxMetaObj.Params)); + for i := 0 to high(TempParams) do + begin + TempParams[i] := pxemDataParam.Create(); + TempParams[i].ID := pxBoxMetaObj.Params[i].ID; + TempParams[i].ProgLabel := ''; + TempParams[i].ToolTip := ''; + TempParams[i].Waarde := pxBoxMetaObj.Params[i].Default_; + end; + Params := TempParams; + end; +end; + procedure TProductsAgent.RegistreerGelukteVerpakkingMetaQuery(ProductVerpakkingMetaContext: TProductVerpakkingMetaContext); begin ProductVerpakkingMetaContext.IsOK := True;