unit DnaCodeSchermVoorOnderdelen; 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, DnaCodeService, AfdrukService, Vcl.ExtCtrls, Images, Vcl.Imaging.pngimage, System.StrUtils; type TfmDnaCodeSchermVoorOnderdelen = class(TfmDrieKnoppenScherm) lblToeleveringData: TLabel; lblScancode: TLabel; lblHuidigePalletData: TLabel; lblLaatstGescandData: TLabel; lblAantalGescand: TLabel; lblTotaalAantal: TLabel; lblSlash: TLabel; imgDirecteLevering: TImage; lblScanPallet: TLabel; imgWegwerpPallet: TImage; btnInfo: TButton; imgToelevering: TImage; imgPallet: TImage; imgLaatstGescand: TImage; imgExport: TImage; imgBlumXs: TImage; lblAantalOpPallet: TLabel; procedure FormShow(Sender: TObject); procedure actTerugExecute(Sender: TObject); procedure actPalletExecute(Sender: TObject); procedure actAfrondenExecute(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btnInfoClick(Sender: TObject); private fImagesScherm: TImagesScherm; function MeldDnaCodeVoorOnderdelenAf: boolean; procedure ToeleveringDataOphalen(); function BepaalAantalLadesOpHuidigePallet: integer; procedure ZetIcoontjesBovenaan; procedure ZetInfoIcoontjeZichtbaar; procedure DrukProboxEtiketAf; function GeefAantalOpPallet(Palletcode: String): integer; function BepaalDirecteLevering: boolean; procedure ZetToeleveringStatus(Status: DnaCodeStatus; isDirecteLevering: boolean = false); procedure ZetAfrondActieStatus(actief: boolean); public end; var fmDnaCodeSchermVoorOnderdelen: TfmDnaCodeSchermVoorOnderdelen; implementation uses UiContext, Agent, CommonFunctions, ProScanMain, Datasnap.DBClient, Data.DB, OnvolledigeToeleveringScherm; {$R *.dfm} procedure TfmDnaCodeSchermVoorOnderdelen.FormCreate(Sender: TObject); begin inherited; fImagesScherm := TImagesScherm.Create(self); end; procedure TfmDnaCodeSchermVoorOnderdelen.FormShow(Sender: TObject); begin btnLinksOnder.Action := actPallet; btnCentraalOnder.Action := actTerug; btnRechtsOnder.Action := actAfronden; lblHuidigePalletData.Caption := UiContext.Pallet; lblToeleveringData.Caption := UiContext.Toelevering; lblAantalGescand.Caption := ''; lblTotaalAantal.Caption := ''; lblAantalOpPallet.Caption := IntToStr(GeefAantalOpPallet(UiContext.Pallet)); btnInfo.Visible := false; fImagesScherm.ilAlgemeen64.GetIcon(8, imgToelevering.Picture.Icon); fImagesScherm.ilAlgemeen64.GetIcon(9, imgPallet.Picture.Icon); fImagesScherm.ilAlgemeen64.GetIcon(10, imgLaatstGescand.Picture.Icon); fImagesScherm.ilAlgemeen32.GetIcon(5, imgWegwerpPallet.Picture.Icon); fImagesScherm.ilAlgemeen32.GetIcon(3, imgDirecteLevering.Picture.Icon); fImagesScherm.ilAlgemeen32.GetIcon(4, imgExport.Picture.Icon); fImagesScherm.ilAlgemeen32.GetIcon(6, imgBlumXs.Picture.Icon); if (not (UiContext.Toelevering = '')) then ToeleveringDataOphalen() else begin imgDirecteLevering.Visible := false; imgWegwerpPallet.Visible := false; imgExport.Visible := false; imgBlumXs.Visible := false; end; ZetIcoontjesBovenaan; inherited; end; procedure TfmDnaCodeSchermVoorOnderdelen.actTerugExecute(Sender: TObject); begin inherited; PostMessage(Self.Handle,WM_Close,0,0); (Self.Parent.Parent As TfmProScanHoofdscherm).NavigeerNaar(mrOnderdelen); end; procedure TfmDnaCodeSchermVoorOnderdelen.actPalletExecute(Sender: TObject); begin inherited; Self.ModalResult := mrDnaCodeVoorOnderdelen; if MeldDnaCodeVoorOnderdelenAf then begin UiContext.Toelevering := ''; UiContext.Pallet := ''; DrukProboxEtiketAf; end; PostMessage(Self.Handle,WM_Close,0,0); (Self.Parent.Parent As TfmProScanHoofdscherm).NavigeerNaar(Self.ModalResult); end; procedure TfmDnaCodeSchermVoorOnderdelen.actAfrondenExecute(Sender: TObject); var fWaarschuwingModalResult: TModalResult; fIsDirecteLevering: boolean; fOnvolledigeToeleveringScherm: TfmOnvolledigeToeleveringScherm; begin inherited; if UiContext.Toelevering = '' then exit; ZetAfrondActieStatus(false); if not MeldDnaCodeVoorOnderdelenAf then begin PostMessage(Self.Handle,WM_Close,0,0); (Self.Parent.Parent As TfmProScanHoofdscherm).NavigeerNaar(mrDnaCodeVoorOnderdelen); end; try fIsDirecteLevering := (UiContext.Modus = modusDefault) and BepaalDirecteLevering; if lblAantalGescand.Caption = lblTotaalAantal.Caption then begin if fIsDirecteLevering then begin ToonPopupScherm('Directe levering', 'OK','',15,-1,-1,clBlue); imgDirecteLevering.Visible := true; end; DrukProboxEtiketAf; ZetToeleveringStatus(DnaCodeStatus.InBuffer, fIsDirecteLevering); if Self.ModalResult = mrPallet then begin ToonPopupScherm('Toelevering succesvol afgerond','OK','',19,-1,-1,clGreen); end else begin ToonPopupScherm('Toelevering niet succesvol afgerond, etiket weggooien','OK','',2,-1,-1, clRed); end; UiContext.Toelevering := ''; UiContext.BatchId := ''; end else begin fOnvolledigeToeleveringScherm := TfmOnvolledigeToeleveringScherm.Create(self); try fOnvolledigeToeleveringScherm.UiContext := UiContext; fWaarschuwingModalResult := fOnvolledigeToeleveringScherm.ShowModal; if fWaarschuwingModalResult = mrNo then begin DrukProboxEtiketAf; ZetToeleveringStatus(DnaCodeStatus.InBuffer, fIsDirecteLevering); UiContext.Toelevering := ''; UiContext.BatchId := ''; Self.ModalResult := mrPallet; end else begin Self.ModalResult := mrDnaCode; end; finally fOnvolledigeToeleveringScherm.Free; end; end; finally ZetAfrondActieStatus(true); PostMessage(Self.Handle,WM_Close,0,0); (Self.Parent.Parent As TfmProScanHoofdscherm).NavigeerNaar(Self.ModalResult); end; end; function TfmDnaCodeSchermVoorOnderdelen.MeldDnaCodeVoorOnderdelenAf: boolean; var fZoekViaDnaCodeResponse: ZoekViaDnaCodeResponse; fDnaCode: DnaCode; fDnaCodeAfmeldenResponse: DnaCodeAfmeldenResponse; List: TStrings; Locatie: string; fAgent: TAgent; begin fAgent := TAgent.Create(UiContext); fDnaCodeAfmeldenResponse := fAgent.DnaCodeAfmelden('',UiContext.Toelevering,UiContext.Pallet,1,''); fAgent.Free; try if fDnaCodeAfmeldenResponse.Header.Status = '200' then begin UiContext.LaatsteDnaCodeGoedAfgemeld := true; result := true; end else begin ToonPopupScherm(fDnaCodeAfmeldenResponse.Header.Omschrijving, 'Probeer opnieuw'); result := false; end; finally fDnaCodeAfmeldenResponse.Free; end; end; function TfmDnaCodeSchermVoorOnderdelen.BepaalDirecteLevering: boolean; var fDirecteLeveringResponse: DirecteLeveringResponse; fAgent: TAgent; begin fAgent := TAgent.Create(UiContext); fDirecteLeveringResponse := fAgent.IsDirecteLevering(UiContext.Toelevering); fAgent.Free; try if fDirecteLeveringResponse.Header.Status = '200' then begin result := fDirecteLeveringResponse.IsDirecteLevering; end else begin ToonPopupScherm(fDirecteLeveringResponse.Header.Omschrijving, 'Probeer opnieuw'); result := false; end; finally fDirecteLeveringResponse.Free; end; end; procedure TfmDnaCodeSchermVoorOnderdelen.ZetToeleveringStatus(Status: DnaCodeStatus; isDirecteLevering: boolean = false); var Response: ToeleveringBijwerkenResponse; fAgent: TAgent; begin fAgent := TAgent.Create(UiContext); Response := fAgent.ToeleveringBijwerken(UiContext.Toelevering,Status,isDirecteLevering); fAgent.Free; try if Response.Header.Status <> '200' then begin Self.ModalResult := mrDnaCode; ToonPopupScherm(Response.Header.Omschrijving, 'Probeer opnieuw') end else begin Self.ModalResult := mrPallet; end; finally Response.Free; end; end; function TfmDnaCodeSchermVoorOnderdelen.BepaalAantalLadesOpHuidigePallet: integer; var fZoekViaPalletCodeResponse: ZoekViaPalletCodeResponse; fZoekAlleVhossLadesBijDnaCodeResponse: ZoekAlleVhossLadesBijDnaCodeResponse; fAgent: TAgent; begin result := 0; if UiContext.LaatsteDnaCode = '' then exit; if UiContext.Pallet = '' then begin result := 0; end else if StartsText('O1',UiContext.Pallet) then begin fAgent := TAgent.Create(UiContext); fZoekAlleVhossLadesBijDnaCodeResponse := fAgent.ZoekAlleVhossLadesBijDnaCode(UiContext.LaatsteDnaCode); fAgent.Free; try if fZoekAlleVhossLadesBijDnaCodeResponse.Header.Status = '200' then begin result := length(fZoekAlleVhossLadesBijDnaCodeResponse.DnaCodes); end else begin ToonPopupScherm(fZoekAlleVhossLadesBijDnaCodeResponse.Header.Omschrijving, 'Probeer opnieuw'); result := 0 end; finally fZoekAlleVhossLadesBijDnaCodeResponse.Free; end; end else begin fAgent := TAgent.Create(UiContext); fZoekViaPalletCodeResponse := fAgent.ZoekViaPalletCode(UiContext.Pallet); fAgent.Free; try if fZoekViaPalletCodeResponse.Header.Status = '200' then begin result := length(fZoekViaPalletCodeResponse.DnaCodes); end else begin ToonPopupScherm(fZoekViaPalletCodeResponse.Header.Omschrijving, 'Probeer opnieuw'); result := 0 end; finally fZoekViaPalletCodeResponse.Free; end; end; end; procedure TfmDnaCodeSchermVoorOnderdelen.btnInfoClick(Sender: TObject); begin inherited; UiContext.VanuitOnderdelen := true; if UiContext.Modus = modusVHOSS then begin UiContext.InfoLogSchermToonGescand := true; Self.ModalResult := mrInfoLog; end else begin if UiContext.Toelevering = '' then Self.ModalResult := mrDnaCode else begin UiContext.InfoLogSchermToonGescand := true; Self.ModalResult := mrInfoLog; end; end; PostMessage(Self.Handle,WM_Close,0,0); (Self.Parent.Parent As TfmProScanHoofdscherm).NavigeerNaar(Self.ModalResult); end; procedure TfmDnaCodeSchermVoorOnderdelen.ToeleveringDataOphalen; var Response: ZoekViaToeleveringResponse; fAgent: TAgent; begin fAgent := TAgent.Create(UiContext); Response := fAgent.ZoekViaToelevering(UiContext.Toelevering); fAgent.Free; try if Response.Header.Status <> '200' then begin ToonPopupScherm(Response.Header.Omschrijving, 'Probeer opnieuw') end else begin UiContext.Toelevering := Response.DnaCodes[0].Toelevering; lblAantalGescand.Caption := IntToStr(Response.AantalReedsGescand); lblTotaalAantal.Caption := IntToStr(Response.AantalInToelevering); ZetInfoIcoontjeZichtbaar; ZetIcoontjesBovenaan; // VerwerkMogelijkePopups(Response.DnaCodes, UiContext.Toelevering); Self.ModalResult := mrDnaCode; end; finally Response.Free; end; end; procedure TfmDnaCodeSchermVoorOnderdelen.ZetIcoontjesBovenaan; begin if UiContext.Pallet = '' then begin lblHuidigePalletData.Caption := ''; imgPallet.Visible := false; end else begin lblHuidigePalletData.Caption := UiContext.Pallet; imgPallet.Visible := true; end; if UiContext.Toelevering = '' then begin lblToeleveringData.Caption := ''; imgToelevering.Visible := false; end else begin lblToeleveringData.Caption := UiContext.Toelevering; imgToelevering.Visible := true; end; if UiContext.LaatsteDnaCode = '' then begin lblLaatstGescandData.Caption := ''; imgLaatstGescand.Visible := false; end else begin lblLaatstGescandData.Caption := Copy(UiContext.LaatsteDnaCode,5,3); imgLaatstGescand.Visible := true; end; end; procedure TfmDnaCodeSchermVoorOnderdelen.ZetInfoIcoontjeZichtbaar; begin if (UiContext.Modus = modusVHOSS) and (UiContext.Pallet <> '') then btnInfo.Visible := true; if (UiContext.Modus = modusDefault) and (UiContext.Toelevering <> '') then btnInfo.Visible := true; end; procedure TfmDnaCodeSchermVoorOnderdelen.DrukProboxEtiketAf; var fProboxAfdrukkenResponse: ProboxEtiketAfdrukkenResponse; fAgent: TAgent; begin fAgent := TAgent.Create(UiContext); fProboxAfdrukkenResponse := fAgent.ProboxEtiketAfdrukken(TStringList.Create()); fAgent.Free; try if fProboxAfdrukkenResponse.Header.Status <> '200' then begin Self.ModalResult := mrHome; ToonPopupScherm(fProboxAfdrukkenResponse.Header.Omschrijving, 'Bel planning'); Self.ModalResult := mrHome; end else begin UiContext.LaatstAfgedrukteDnaCodes.Clear; Self.ModalResult := mrPallet; end; finally fProboxAfdrukkenResponse.Free; end; end; function TfmDnaCodeSchermVoorOnderdelen.GeefAantalOpPallet(PalletCode: string): integer; var fAgent: TAgent; fZoekViaPalletCodeResponse: ZoekViaPalletCodeResponse; fAantal: integer; begin if (UiContext.MoetTbpCodeGenereren = true) then begin fAantal := 0; end else begin fAgent := TAgent.Create(UiContext); fZoekViaPalletCodeResponse := fAgent.ZoekViaPalletCode(PalletCode); fAgent.Free; fAantal := length(fZoekViaPalletCodeResponse.DnaCodes); fZoekViaPalletCodeResponse.Free; end; Result := fAantal; end; procedure TfmDnaCodeSchermVoorOnderdelen.ZetAfrondActieStatus(actief: boolean); begin if actief then begin pnlLinksOnder.Color := $001717CD; actPallet.OnExecute := actPalletExecute; pnlCentraalOnder.Color := $001717CD; pnlRechtsOnder.Color := $001717CD; actAfronden.OnExecute := actAfrondenExecute; end else begin pnlLinksOnder.Color := clGray; pnlCentraalOnder.Color := clGray; pnlRechtsOnder.Color := clGray; actAfronden.OnExecute := nil; actPallet.OnExecute := nil; end; Repaint; end; end.