unit PalletScherm; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, 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 IsKaderdeurLocatie(GescandeInput: string): boolean; public { Public declarations } end; var fmPalletScherm: TfmPalletScherm; implementation uses DnaCodeService, UiContext, Agent, ProScanMain, StrUtils, System.RegularExpressions; {$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; 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 )then begin fZoekViaPalletCodeResponse := TAgent.Create(UiContext).ZoekViaPalletCode(edtPallet.Text); try if fZoekViaPalletCodeResponse.Header.Status = '200' then begin UiContext.Toelevering := fZoekViaPalletCodeResponse.DnaCodes[0].Toelevering; Self.ModalResult := mrBestaandePallet; end else begin //enkel leegmaken indien de huidige toelevering al compleet is fZoekViaToeleveringResponse := TAgent.Create(UiContext).ZoekViaToelevering(UiContext.Toelevering); if fZoekViaToeleveringResponse.AantalInToelevering = fZoekViaToeleveringResponse.AantalReedsGescand then UiContext.Toelevering := ''; Self.ModalResult := mrDnaCode; end; finally fZoekViaPalletCodeResponse.Free; end end else if UiContext.Modus = modusKAD then begin Self.ModalResult := mrDnaCode; //popups resetten UiContext.IsDirecteLeveringPopupGetoond := false; UiContext.IsWegwerpPalletPopupGetoond := false; 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; begin // pallet code valideren result := false; fValideerPalletCodeResponse := TAgent.Create(UiContext).ValideerPalletCode(edtPallet.Text); 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; procedure TfmPalletScherm.btnGenereerTbpClick(Sender: TObject); var fGeefVolgendeTbpCodeResponse: GeefVolgendeTbpCodeResponse; begin inherited; fGeefVolgendeTbpCodeResponse := TAgent.Create(UiContext).GeefVolgendeTbpCode(); 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 IsKaderdeurLocatie(edtPallet.Text) then UiContext.Pallet := edtPallet.Text else UiContext.Pallet := UpperCase(edtPallet.Text); end; procedure TfmPalletScherm.SetModus(GescandeInput: string); begin if IsKaderdeurLocatie(GescandeInput) then UiContext.Modus := modusKAD else if (Length(GescandeInput)=10) and StartsText('O1',GescandeInput) then UiContext.Modus := modusVHOSS else Uicontext.Modus := modusDefault; end; function TfmPalletScherm.IsKaderdeurLocatie(GescandeInput: string): boolean; begin result := false; if TRegEx.IsMatch(UpperCase(GescandeInput),'10[kK]..[tT]0.') then result := true; end; end.