unit PalletScherm; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, System.IniFiles, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DrieKnoppenScherm, Vcl.ActnList, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Imaging.pngimage; type TfmPalletScherm = class(TfmDrieKnoppenScherm) lblScanPallet: TLabel; imgPallet: TImage; edtPallet: TEdit; btnGenereerTbp: TButton; procedure FormShow(Sender: TObject); procedure actHomeExecute(Sender: TObject); procedure actVolgendeExecute(Sender: TObject); procedure edtPalletKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure btnGenereerTbpClick(Sender: TObject); procedure FormActivate(Sender: TObject); private procedure SetContext; procedure SetModus(GescandeInput: string); function ValideerPalletCode(GescandeInput: string): boolean; function GeefLpnCode(): string; function MoetNieuweLpnCodeAangemaaktWorden(): boolean; public { Public declarations } end; var fmPalletScherm: TfmPalletScherm; implementation uses DnaCodeService, UiContext, Agent, ProScanMain, StrUtils, CommonFunctions; {$R *.dfm} procedure TfmPalletScherm.actHomeExecute(Sender: TObject); begin inherited; PostMessage(Self.Handle,WM_Close,0,0); (Self.Parent.Parent As TfmProScanHoofdscherm).NavigeerNaar(mrHome); end; procedure TfmPalletScherm.actVolgendeExecute(Sender: TObject); var fZoekViaPalletCodeResponse: ZoekViaPalletCodeResponse; fZoekViaToeleveringResponse: ZoekViaToeleveringResponse; fPalletGevalideerd: boolean; fAgent: TAgent; begin SetModus(edtPallet.Text); fPalletGevalideerd := false; if not (UiContext.Modus = modusKAD) then fPalletGevalideerd := ValideerPalletCode(edtPallet.Text); //checken of pallet in gebruik is indien het vorige geslaagd is if fPalletGevalideerd and not(UiContext.Modus = modusKAD) and not(UiContext.Modus = modusVHOSS ) then begin UiContext.LpnCode := GeefLpnCode(); fAgent := TAgent.Create(UiContext); fZoekViaPalletCodeResponse := fAgent.ZoekViaPalletCode(edtPallet.Text); fAgent.Free; try if fZoekViaPalletCodeResponse.Header.Status = '200' then begin UiContext.Toelevering := fZoekViaPalletCodeResponse.DnaCodes[0].Toelevering; if fZoekViaPalletCodeResponse.MeerdereToeleveringenToegestaan then Self.ModalResult := mrBestaandePallet else Self.ModalResult := mrDnaCode; end else begin //enkel leegmaken indien de huidige toelevering al compleet is fAgent := TAgent.Create(UiContext); try fZoekViaToeleveringResponse := fAgent.ZoekViaToelevering(UiContext.Toelevering); if fZoekViaToeleveringResponse.AantalInToelevering = fZoekViaToeleveringResponse.AantalReedsGescand then UiContext.Toelevering := ''; finally fAgent.Free; fZoekViaToeleveringResponse.Free; end; Self.ModalResult := mrDnaCode; end; finally fZoekViaPalletCodeResponse.Free; end; //popups resetten UiContext.IsDirecteLeveringPopupGetoond := false; UiContext.IsWegwerpPalletPopupGetoond := false; UiContext.IsSSTPopupGetoond := false; UiContext.IsExportPopupGetoond := false; UiContext.IsBlumXsPopupGetoond := false; UiContext.InternVhossId := ''; end else if (UiContext.Modus = modusKAD) then begin Self.ModalResult := mrDnaCode; end else if (UiContext.Modus = modusVHOSS) then begin Self.ModalResult := mrDnaCode; end else begin Self.ModalResult := mrPallet; end; PostMessage(Self.Handle,WM_Close,0,0); (Self.Parent.Parent As TfmProScanHoofdscherm).NavigeerNaar(Self.ModalResult); end; function TfmPalletScherm.ValideerPalletCode(GescandeInput: string): boolean; var fValideerPalletCodeResponse: ValideerPalletCodeResponse; fAgent: TAgent; begin // pallet code valideren result := false; fAgent := TAgent.Create(UiContext); fValideerPalletCodeResponse := fAgent.ValideerPalletCode(edtPallet.Text); fAgent.Free; try if fValideerPalletCodeResponse.Header.Status <> '200' then begin Self.ModalResult := mrPallet; ToonPopupScherm(fValideerPalletCodeResponse.Header.Omschrijving, 'Probeer opnieuw'); edtPallet.Text := ''; SetContext; end else begin result := true; end; finally fValideerPalletCodeResponse.Free; end; end; function TfmPalletScherm.GeefLpnCode(): string; var fGeefVolgendeLpnCodeResponse: GeefVolgendeLpnCodeResponse; fAgent: TAgent; begin try if (Self.MoetNieuweLpnCodeAangemaaktWorden()) then begin fAgent := TAgent.Create(UiContext); fGeefVolgendeLpnCodeResponse := fAgent.GeefVolgendeLpnCode(); fAgent.Free; result := fGeefVolgendeLpnCodeResponse.VolgendeLpnCode; fGeefVolgendeLpnCodeResponse.Free; end else begin result := UiContext.LpnCode; end; finally end; end; function TfmPalletScherm.MoetNieuweLpnCodeAangemaaktWorden(): boolean; var fZoekViaLpnCodeResponse: ZoekViaLpnCodeResponse; fUniekePalletCodes: THashedStringList; fDnaCode: DnaCode; fAgent: TAgent; begin fAgent := TAgent.Create(UiContext); fZoekViaLpnCodeResponse := fAgent.ZoekViaLpnCode(UiContext.LpnCode); result := false; try if (fZoekViaLpnCodeResponse.Header.Status <> '200') then begin result := true; end else begin fUniekePalletCodes := THashedStringList.Create; fUniekePalletCodes.Duplicates := dupIgnore; for fDnaCode in fZoekViaLpnCodeResponse.DnaCodes do fUniekePalletCodes.Add(fDnaCode.PalletCode); if (fUniekePalletCodes.Count > 1) then result := true; fUniekePalletCodes.Free; end; finally fZoekViaLpnCodeResponse.Free; end; fAgent.Free; end; procedure TfmPalletScherm.btnGenereerTbpClick(Sender: TObject); var fGeefVolgendeTbpCodeResponse: GeefVolgendeTbpCodeResponse; fAgent: TAgent; begin inherited; fAgent := TAgent.Create(UiContext); fGeefVolgendeTbpCodeResponse := fAgent.GeefVolgendeTbpCode(); fAgent.Free; try if fGeefVolgendeTbpCodeResponse.Header.Status <> '200' then begin Self.ModalResult := mrPallet; ToonPopupScherm(fGeefVolgendeTbpCodeResponse.Header.Omschrijving, 'Probeer opnieuw'); edtPallet.Text := ''; end else begin edtPallet.Text := fGeefVolgendeTbpCodeResponse.VolgendeTbpCode; UiContext.Toelevering := ''; end; SetContext; finally fGeefVolgendeTbpCodeResponse.Free; end; actVolgendeExecute(Self); end; procedure TfmPalletScherm.edtPalletKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin inherited; SetContext; if Key = VK_RETURN then begin actVolgende.Execute; Key := 0; end; end; procedure TfmPalletScherm.FormActivate(Sender: TObject); begin inherited; ActiveControl := edtPallet; end; procedure TfmPalletScherm.FormShow(Sender: TObject); begin btnLinksOnder.Action := nil; btnCentraalOnder.Action := actHome; btnRechtsOnder.Action := actVolgende; edtPallet.Text := ''; edtPallet.SetFocus; SetContext; inherited; end; procedure TfmPalletScherm.SetContext; begin if TCommonFunctions.IsKaderdeurLocatie(edtPallet.Text) then UiContext.Pallet := edtPallet.Text else UiContext.Pallet := UpperCase(edtPallet.Text); end; procedure TfmPalletScherm.SetModus(GescandeInput: string); begin if TCommonFunctions.IsKaderdeurLocatie(GescandeInput) then UiContext.Modus := modusKAD else if (Length(GescandeInput)=10) and StartsText('O1',GescandeInput) then UiContext.Modus := modusVHOSS else Uicontext.Modus := modusDefault; end; end.