Clomosy | Forum Ana Sayfa
Forum Anasayfa Forum Anasayfa > Genel Programlama > Genel İşlemler
  Aktif Konular Aktif Konular RSS - kod calismiyor ama357 satira hata gosteriyor
  SSS SSS  Forumu Ara   Etkinlikler   Kayıt Ol Kayıt Ol  Giriş Giriş

Clomosy Resmi Forum Sitesidir. Amacımız kullanıcılarımıza, iş ortaklarımıza, danışmanlara, yazılımcılara programlarımız hakkında destek ve bilgi vermektir.

kod calismiyor ama357 satira hata gosteriyor

 Yanıt Yaz Yanıt Yaz
Yazar
Mesaj
  Konu Arama Konu Arama  Topic Seçenekleri Topic Seçenekleri
Barthe_dev Açılır Kutu İzle
Yeni Üye
Yeni Üye


Kayıt Tarihi: 07 Temmuz 2026
Konum: konya
Durum: Aktif Değil
Puanlar: 27
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı Barthe_dev Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: kod calismiyor ama357 satira hata gosteriyor
    Gönderim Zamanı: 6 Saat 9 Dakika Önce Saat 16:56
var
  MyForm: TclForm;
  mainLayout, screenSwitcherLayout: TclLayout;
  mvtScreenLayout, prodScreenLayout: TclLayout;
  btnMvtScreen, btnProdScreen: TclProButton;
  
  // Header Panel
  headerPanel: TclProPanel;
  lblHeaderTitle, lblHeaderSubtitle: TclProLabel;
  statsLayout: TclLayout;
  pnlStat1, pnlStat2: TclProPanel;
  lblStatVal1, lblStatLbl1, lblStatVal2, lblStatLbl2: TclProLabel;
  
  // Mouvements list
  mvtScrollBox: TclVertScrollBox;
  mvtQuery: TclJsonQuery;
  mvtJson: String;
  
  // Production lots & Invoices list
  prodScrollBox: TclVertScrollBox;
  lotsQuery: TclJsonQuery;
  lotsJson: String;
  invoicesQuery: TclJsonQuery;
  invoicesJson: String;
  
  // Actions & Scanner
  mvtActionsPanel: TclProPanel;
  prodActionsPanel: TclProPanel;
  btnScanQr: TclProButton;
  lblScanResult: TclProLabel;
  
  // Bottom Tab Bar
  tabBarPanel: TclProPanel;
  btnTabMvt, btnTabProd, btnTabUsers, btnTabReports, btnTabSettings: TclProButton;
  
  // Detail Sheets / Overlay
  detailOverlay: TclProPanel;
  detailSheet: TclProPanel;
  lblDetailTitle, lblDetailSubtitle: TclProLabel;
  pnlDetailGrid: TclProPanel;
  lblGridVal1, lblGridLbl1, lblGridVal2, lblGridLbl2: TclProLabel;
  lblGridVal3, lblGridLbl3, lblGridVal4, lblGridLbl4: TclProLabel;
  btnDetailAction1, btnDetailAction2: TclProButton;
  btnCloseDetail: TclProButton;
  // Loop & temporary variables
  i, clickedIndex: Integer;
  tempPanel: TclProPanel;
  tempLayout,HeaderLayout: TclLayout;
  tempLabel, tempLabel2,label1,label2: TclProLabel;
  tempProgressBg, tempProgressFg: TclProPanel;
  tempTypeIcon: TclProPanel;
void ShowMvtScreen;
{
  mvtScreenLayout.Visible = True;
  prodScreenLayout.Visible = False;
  lblHeaderTitle.Text = 'Mouvements';
  lblHeaderSubtitle.Text = '& traçabilité';
  lblHeaderSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff');
  
  // Switch button styles
  clComponent.SetupComponent(btnMvtScreen, '{"BackgroundColor":"#0d1520", "TextColor":"#e2eaf5"}');
  clComponent.SetupComponent(btnProdScreen, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580"}');
}
void ShowProdScreen;
{
  mvtScreenLayout.Visible = False;
  prodScreenLayout.Visible = True;
  lblHeaderTitle.Text = 'Production';
  lblHeaderSubtitle.Text = '& lots';
  lblHeaderSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#60a5fa');
  
  // Switch button styles
  clComponent.SetupComponent(btnMvtScreen, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580"}');
  clComponent.SetupComponent(btnProdScreen, '{"BackgroundColor":"#0d1520", "TextColor":"#e2eaf5"}');
}
void OnMvtScreenClick;
{
  ShowMvtScreen;
}
void OnProdScreenClick;
{
  ShowProdScreen;
}
void CloseDetailOverlay;
{
  detailOverlay.Visible = False;
}
void OpenMvtDetail;
var
  idx: Integer;
  foundMvt: Boolean;
{
  idx = TclProPanel(MyForm.ClSender).ClTagInt;
  
  mvtQuery.First;
  foundMvt = False;
  i = 0;
  while (not mvtQuery.Eof)
  {
    if (i == idx)
    {
      foundMvt = True;
      Break;
    }
    i = i + 1;
    mvtQuery.Next;
  }
  
  if (foundMvt)
  {
    lblDetailTitle.Text = mvtQuery.FieldByName('id').AsString;
    lblDetailSubtitle.Text = mvtQuery.FieldByName('product').AsString + ' · ' + mvtQuery.FieldByName('bloc').AsString;
    
    lblGridLbl1.Text = 'QUANTITÉ';
    lblGridVal1.Text = mvtQuery.FieldByName('qty').AsString + ' ' + mvtQuery.FieldByName('unit').AsString;
    
    lblGridLbl2.Text = 'LOT';
    lblGridVal2.Text = mvtQuery.FieldByName('lot').AsString;
    
    lblGridLbl3.Text = 'DATE / HEURE';
    lblGridVal3.Text = mvtQuery.FieldByName('date').AsString + ' ' + mvtQuery.FieldByName('time').AsString;
    
    lblGridLbl4.Text = 'OPÉRATEUR';
    lblGridVal4.Text = mvtQuery.FieldByName('operator').AsString;
    
    btnDetailAction1.Caption = 'Voir le QR';
    btnDetailAction2.Caption = 'Annuler';
    
    detailOverlay.Visible = True;
  }
}
void OpenLotDetail;
var
  idx: Integer;
  foundLot: Boolean;
{
  idx = TclProPanel(MyForm.ClSender).ClTagInt;
  
  lotsQuery.First;
  foundLot = False;
  i = 0;
  while (not lotsQuery.Eof)
  {
    if (i == idx)
    {
      foundLot = True;
      Break;
    }
    i = i + 1;
    lotsQuery.Next;
  }
  
  if (foundLot)
  {
    lblDetailTitle.Text = lotsQuery.FieldByName('id').AsString;
    lblDetailSubtitle.Text = lotsQuery.FieldByName('product').AsString + ' · ' + lotsQuery.FieldByName('bloc').AsString;
    
    lblGridLbl1.Text = 'QUANTITÉ';
    lblGridVal1.Text = lotsQuery.FieldByName('qty').AsString + ' ' + lotsQuery.FieldByName('unit').AsString;
    
    lblGridLbl2.Text = 'PROGRESSION';
    lblGridVal2.Text = lotsQuery.FieldByName('progress').AsString + '%';
    
    lblGridLbl3.Text = 'DÉBUT';
    lblGridVal3.Text = lotsQuery.FieldByName('started').AsString;
    
    lblGridLbl4.Text = 'OPÉRATEUR';
    lblGridVal4.Text = lotsQuery.FieldByName('operator').AsString;
    
    btnDetailAction1.Caption = 'Mettre à jour';
    btnDetailAction2.Caption = 'Clôturer le lot';
    
    detailOverlay.Visible = True;
  }
}
void OpenInvoiceDetail;
var
  idx: Integer;
  foundInv: Boolean;
{
  idx = TclProPanel(MyForm.ClSender).ClTagInt;
  
  invoicesQuery.First;
  foundInv = False;
  i = 0;
  while (not invoicesQuery.Eof)
  {
    if (i == idx)
    {
      foundInv = True;
      Break;
    }
    i = i + 1;
    invoicesQuery.Next;
  }
  
  if (foundInv)
  {
    lblDetailTitle.Text = invoicesQuery.FieldByName('id').AsString;
    lblDetailSubtitle.Text = invoicesQuery.FieldByName('client').AsString;
    
    lblGridLbl1.Text = 'MONTANT';
    lblGridVal1.Text = invoicesQuery.FieldByName('amount').AsString + ' ' + invoicesQuery.FieldByName('currency').AsString;
    
    lblGridLbl2.Text = 'STATUT';
    lblGridVal2.Text = invoicesQuery.FieldByName('status').AsString;
    
    lblGridLbl3.Text = 'ÉMISE LE';
    lblGridVal3.Text = invoicesQuery.FieldByName('date').AsString;
    
    lblGridLbl4.Text = 'ÉCHÉANCE';
    lblGridVal4.Text = invoicesQuery.FieldByName('due').AsString;
    
    btnDetailAction1.Caption = 'Marquer payée';
    btnDetailAction2.Caption = 'Exporter PDF';
    
    detailOverlay.Visible = True;
  }
}
void RunScanner;
{
  MyForm.CallBarcodeReader(lblScanResult);
}
void TabClick;
var
  tabName: String;
{
  tabName = TclProButton(MyForm.ClSender).Caption;
  ShowMessage('Navigation vers : ' + tabName);
}
void ActionClick;
var
  actName: String;
{
  actName = TclProButton(MyForm.ClSender).Text;
  ShowMessage('Action déclenchée : ' + actName);
}
{
  MyForm = TclForm.Create(Self);
  MyForm.SetFormColor('#080d14', '#0d1520', clGVertical);
  
  // Set window state to full screen on Windows
  if (not Clomosy.PlatformIsMobile)
  {
    MyForm.clSetWindowState(fwsMaximized);
  }
  
  // --- Data Init ---
  mvtJson = '[{"id":"MV-081","date":"12/07","time":"14:32","type":"entrée","product":"Produit A","lot":"LOT001","bloc":"Bloc A","qty":50,"unit":"kg","operator":"Y. Kaya"},' +
             '{"id":"MV-082","date":"12/07","time":"11:15","type":"sortie","product":"Produit B","lot":"LOT002","bloc":"Dépôt","qty":-10,"unit":"pcs","operator":"M. Arslan"},' +
             '{"id":"MV-083","date":"11/07","time":"09:47","type":"entrée","product":"Produit C","lot":"LOT003","bloc":"Bloc B","qty":120,"unit":"unité","operator":"F. Demir"},' +
             '{"id":"MV-084","date":"11/07","time":"08:05","type":"transfert","product":"Produit D","lot":"LOT001","bloc":"Bloc C","qty":30,"unit":"pcs","operator":"A. Yıldız"}]';
             
  lotsJson = '[{"id":"LOT001","product":"Produit A","bloc":"Bloc A","qty":320,"unit":"kg","status":"production","started":"08/07","operator":"Y. Kaya","progress":72},' +
              '{"id":"LOT002","product":"Produit B","bloc":"Bloc B","qty":150,"unit":"pcs","status":"depot","started":"05/07","operator":"M. Arslan","progress":100},' +
              '{"id":"LOT003","product":"Produit C","bloc":"Bloc C","qty":480,"unit":"unité","status":"production","started":"10/07","operator":"F. Demir","progress":45}]';
              
  invoicesJson = '[{"id":"F001","client":"Client A","amount":"250 000","currency":"DA","date":"01/07","due":"15/07","status":"payée"},' +
                  '{"id":"F002","client":"Client B","amount":"120 000","currency":"DA","date":"03/07","due":"17/07","status":"retard"},' +
                  '{"id":"F003","client":"Client C","amount":"85 000","currency":"DA","date":"06/07","due":"20/07","status":"en_attente"}]';
                  
  mvtQuery = Clomosy.ClDataSetFromJSON(mvtJson);
  lotsQuery = Clomosy.ClDataSetFromJSON(lotsJson);
  invoicesQuery = Clomosy.ClDataSetFromJSON(invoicesJson);
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

  // --- Main Layout ---
  mainLayout = MyForm.AddNewLayout(MyForm, 'mainLayout');
  mainLayout.Align = alClient;
  mainLayout.Margins.Bottom = 60; // Leave space for bottom tab bar
  
  // [ ÉTAPE 1 : HEADER GESTION DES MEMBRES ]
  HeaderLayout = MyForm.AddNewLayout(mainLayout, 'HeaderLayout');
  HeaderLayout.Align = alTop;
  HeaderLayout.Height = 80;

  // Bouton Retour (Gauche)
  label1 = MyForm.AddNewProLabel(HeaderLayout, 'label1', 'GESTIONNAIRES DES UTILISATEURS');
  label1.Align = alTop;
  label1.Margins.Left = 14; 
  label1.Margins.Top = 16;
  label1.clProSettings.FontColor = clAlphaColor.clHexToColor('#446580');
  label1.clProSettings.FontSize = 12;
  label1.clProSettings.TextSettings.Font.Style = [fsBold];
  label1.SetclProSettings(label1.clProSettings);


  // Titre "MEMBRES" (Centre)
  label2 = MyForm.AddNewProLabel(HeaderLayout, 'label2', 'Utilisateurs & roles');
  label2.Align = alTop;
  label2.Margins.Left = 14; 
  label2.Height = 40;
  label2.clProSettings.FontColor = clAlphaColor.clHexToColor('#e8eef5');
  label2.clProSettings.FontSize = 30;
  label2.clProSettings.TextSettings.Font.Style = [fsBold];
  label2.SetclProSettings(label2.clProSettings);
  
  
  
  
  
  
  
  
  
  
  // --- Header Panel ---
  headerPanel = MyForm.AddNewProPanel(mainLayout, 'headerPanel');
  headerPanel.Align = alTop;
  headerPanel.Height = 110;
  headerPanel.Margins.Left = 10;
  headerPanel.Margins.Right = 10;
  headerPanel.Margins.Top = 10;
  headerPanel.Padding.Left = 15;
  headerPanel.Padding.Top = 15;
  
  lblHeaderTitle = MyForm.AddNewLabel(headerPanel, 'lblHeaderTitle', 'Mouvements');
  lblHeaderTitle.Align = alTop;
  lblHeaderTitle.clProSettings.FontSize = 22;
  lblHeaderTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
  lblHeaderTitle.SetclProSettings(lblHeaderTitle.clProSettings);
  
  lblHeaderSubtitle = MyForm.AddNewLabel(headerPanel, 'lblHeaderSubtitle', '& traçabilité');
  lblHeaderSubtitle.Align = alTop;
  lblHeaderSubtitle.clProSettings.FontSize  = 18;
  lblHeaderSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff');
  lblHeaderSubtitle.Margins.Top = 2;
  lblHeaderSubtitle.SetclProSettings(lblHeaderSubtitle.clProSettings);
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  // --- Screen Switcher Pill ---
  screenSwitcherLayout = MyForm.AddNewLayout(mainLayout, 'screenSwitcherLayout');
  screenSwitcherLayout.Align = alTop;
  screenSwitcherLayout.Height = 44;
  screenSwitcherLayout.Margins.Left = 10;
  screenSwitcherLayout.Margins.Right = 10;
  screenSwitcherLayout.Margins.Top = 8;
  
  btnMvtScreen = MyForm.AddNewProButton(screenSwitcherLayout, 'btnMvtScreen', 'Mouvements');
  btnMvtScreen.Align = alLeft;
  btnMvtScreen.Width = 170;
  clComponent.SetupComponent(btnMvtScreen, '{"BackgroundColor":"#0d1520", "TextColor":"#e2eaf5", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}');
  MyForm.AddNewEvent(btnMvtScreen, tbeOnClick, 'OnMvtScreenClick');
  
  btnProdScreen = MyForm.AddNewProButton(screenSwitcherLayout, 'btnProdScreen', 'Production');
  btnProdScreen.Align = alRight;
  btnProdScreen.Width = 170;
  clComponent.SetupComponent(btnProdScreen, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}');
  MyForm.AddNewEvent(btnProdScreen, tbeOnClick, 'OnProdScreenClick');
  // --- Mouvement Screen ---
  mvtScreenLayout = MyForm.AddNewLayout(mainLayout, 'mvtScreenLayout');
  mvtScreenLayout.Align = alClient;
  
  mvtScrollBox = MyForm.AddNewVertScrollBox(mvtScreenLayout, 'mvtScrollBox');
  mvtScrollBox.Align = alClient;
  mvtScrollBox.Margins.Top = 10;
  
  // Dynamically load Movements list
  mvtQuery.First;
  i = 0;
  while (not mvtQuery.Eof)
  {
    tempPanel = MyForm.AddNewProPanel(mvtScrollBox, 'mvtCard' + IntToStr(i));
    tempPanel.Align = alTop;
    tempPanel.Height = 70;
    tempPanel.Margins.Left = 10;
    tempPanel.Margins.Right = 10;
    tempPanel.Margins.Bottom = 8;
    tempPanel.ClTagInt = i;
    clComponent.SetupComponent(tempPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":12, "RoundWidth":12, "BorderColor":"#1a2d42", "BorderWidth":1}');
    MyForm.AddNewEvent(tempPanel, tbeOnClick, 'OpenMvtDetail');
    
    // Icon panel wrapper
    tempTypeIcon = MyForm.AddNewProPanel(tempPanel, 'mvtIcon' + IntToStr(i));
    tempTypeIcon.Align = alLeft;
    tempTypeIcon.Width = 40;
    tempTypeIcon.Margins.Left = 10;
    tempTypeIcon.Margins.Top = 10;
    tempTypeIcon.Margins.Bottom = 10;
    if (mvtQuery.FieldByName('type').AsString == 'entrée')
    {
      clComponent.SetupComponent(tempTypeIcon, '{"BackgroundColor":"#22c55e18", "BorderColor":"#22c55e30", "BorderWidth":1, "RoundHeight":8, "RoundWidth":8}');
    }
    else if (mvtQuery.FieldByName('type').AsString == 'sortie')
    {
      clComponent.SetupComponent(tempTypeIcon, '{"BackgroundColor":"#f9731618", "BorderColor":"#f9731630", "BorderWidth":1, "RoundHeight":8, "RoundWidth":8}');
    }
    else
    {
      clComponent.SetupComponent(tempTypeIcon, '{"BackgroundColor":"#00d4ff14", "BorderColor":"#00d4ff30", "BorderWidth":1, "RoundHeight":8, "RoundWidth":8}');
    }
    
    // Details block
    tempLayout = MyForm.AddNewLayout(tempPanel, 'mvtTextLayout' + IntToStr(i));
    tempLayout.Align = alClient;
    tempLayout.Margins.Left = 12;
    tempLayout.Margins.Top = 12;
    
    tempLabel = MyForm.AddNewLabel(tempLayout, 'mvtLblProd' + IntToStr(i), mvtQuery.FieldByName('product').AsString);
    tempLabel.Align = alTop;
    tempLabel.clProSettings.FontSize  = 13;
    tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
    //tempLabel.TextSettings.StyledSettings = ssFamily;
    
    tempLabel2 = MyForm.AddNewLabel(tempLayout, 'mvtLblSub' + IntToStr(i), mvtQuery.FieldByName('date').AsString + ' · ' + mvtQuery.FieldByName('time').AsString + ' · ' + mvtQuery.FieldByName('bloc').AsString);
    tempLabel2.Align = alTop;
    tempLabel2.clProSettings.FontSize  = 10;
    tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
    //tempLabel2.TextSettings.StyledSettings = ssFamily;
    tempLabel2.Margins.Top = 3;
    
    // Qty block
    tempLayout = MyForm.AddNewLayout(tempPanel, 'mvtQtyLayout' + IntToStr(i));
    tempLayout.Align = alRight;
    tempLayout.Width = 80;
    tempLayout.Margins.Right = 10;
    tempLayout.Margins.Top = 12;
    
    tempLabel = MyForm.AddNewLabel(tempLayout, 'mvtLblQty' + IntToStr(i), mvtQuery.FieldByName('qty').AsString);
    tempLabel.Align = alTop;
    tempLabel.clProSettings.FontSize  = 15;
    if (mvtQuery.FieldByName('qty').AsInteger > 0)
    {
      tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4ade80');
    }
    else
    {
      tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#fb923c');
    }
    //tempLabel.TextSettings.StyledSettings = ssFamily;
    
    tempLabel2 = MyForm.AddNewLabel(tempLayout, 'mvtLblUnit' + IntToStr(i), mvtQuery.FieldByName('unit').AsString);
    tempLabel2.Align = alTop;
    tempLabel2.clProSettings.FontSize  = 9;
    tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
    //tempLabel2.TextSettings.StyledSettings = ssFamily;
    tempLabel2.Margins.Top = 2;
    
    i = i + 1;
    mvtQuery.Next;
  }
  
  // Administrator actions for Mouvements Screen
  mvtActionsPanel = MyForm.AddNewProPanel(mvtScrollBox, 'mvtActionsPanel');
  mvtActionsPanel.Align = alTop;
  mvtActionsPanel.Height = 220;
  mvtActionsPanel.Margins.Top = 15;
  mvtActionsPanel.Margins.Left = 10;
  mvtActionsPanel.Margins.Right = 10;
  
  tempLabel = MyForm.AddNewLabel(mvtActionsPanel, 'lblAdminTitle1', 'ACTIONS ADMINISTRATEUR');
  tempLabel.Align = alTop;
  tempLabel.clProSettings.FontSize  = 10;
  tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //tempLabel.TextSettings.StyledSettings = ssFamily;
  tempLabel.Margins.Bottom = 8;
  
  btnScanQr = MyForm.AddNewProButton(mvtActionsPanel, 'btnScanQr', 'Scanner un QR code / lot');
  btnScanQr.Align = alTop;
  btnScanQr.Height = 44;
  btnScanQr.Margins.Bottom = 8;
  clComponent.SetupComponent(btnScanQr, '{"BackgroundColor":"#00d4ff18", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff30", "BorderWidth":1}');
  MyForm.AddNewEvent(btnScanQr, tbeOnClick, 'RunScanner');
  
  lblScanResult = MyForm.AddNewLabel(mvtActionsPanel, 'lblScanResult', '');
  lblScanResult.Visible = False;
  // --- Production Screen ---
  prodScreenLayout = MyForm.AddNewLayout(mainLayout, 'prodScreenLayout');
  prodScreenLayout.Align = alClient;
  prodScreenLayout.Visible = False; // Hide initially
  
  prodScrollBox = MyForm.AddNewVertScrollBox(prodScreenLayout, 'prodScrollBox');
  prodScrollBox.Align = alClient;
  prodScrollBox.Margins.Top = 10;
  
  // Header section for active Lots
  tempLabel = MyForm.AddNewLabel(prodScrollBox, 'lblLotsHeader', 'Suivi de production');
  tempLabel.Align = alTop;
  tempLabel.Margins.Left = 12;
  tempLabel.Margins.Bottom = 8;
  tempLabel.clProSettings.FontSize  = 11;
  tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //tempLabel.TextSettings.StyledSettings = ssFamily;
  
  // Dynamically load Lots list
  lotsQuery.First;
  i = 0;
  while (not lotsQuery.Eof)
  {
    tempPanel = MyForm.AddNewProPanel(prodScrollBox, 'lotCard' + IntToStr(i));
    tempPanel.Align = alTop;
    tempPanel.Height = 85;
    tempPanel.Margins.Left = 10;
    tempPanel.Margins.Right = 10;
    tempPanel.Margins.Bottom = 8;
    tempPanel.ClTagInt = i;
    clComponent.SetupComponent(tempPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":12, "RoundWidth":12, "BorderColor":"#1a2d42", "BorderWidth":1}');
    MyForm.AddNewEvent(tempPanel, tbeOnClick, 'OpenLotDetail');
    
    // Details block
    tempLayout = MyForm.AddNewLayout(tempPanel, 'lotTextLayout' + IntToStr(i));
    tempLayout.Align = alClient;
    tempLayout.Margins.Left = 15;
    tempLayout.Margins.Top = 12;
    
    tempLabel = MyForm.AddNewLabel(tempLayout, 'lotLblId' + IntToStr(i), lotsQuery.FieldByName('id').AsString);
    tempLabel.Align = alTop;
    tempLabel.clProSettings.FontSize  = 13;
    tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
    //tempLabel.TextSettings.StyledSettings = ssFamily;
    
    tempLabel2 = MyForm.AddNewLabel(tempLayout, 'lotLblProduct' + IntToStr(i), lotsQuery.FieldByName('product').AsString + ' · ' + lotsQuery.FieldByName('bloc').AsString);
    tempLabel2.Align = alTop;
    tempLabel2.clProSettings.FontSize  = 10;
    tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
    //tempLabel2.TextSettings.StyledSettings = ssFamily;
    tempLabel2.Margins.Top = 3;
    
    // Progress Bar rendering in Clomosy
    tempProgressBg = MyForm.AddNewProPanel(tempLayout, 'lotProgressBg' + IntToStr(i));
    tempProgressBg.Align = alTop;
    tempProgressBg.Height = 4;
    tempProgressBg.Margins.Top = 6;
    clComponent.SetupComponent(tempProgressBg, '{"BackgroundColor":"#1e3552", "RoundHeight":2, "RoundWidth":2}');
    
    tempProgressFg = MyForm.AddNewProPanel(tempProgressBg, 'lotProgressFg' + IntToStr(i));
    tempProgressFg.Align = alLeft;
    tempProgressFg.Width = Round(lotsQuery.FieldByName('progress').AsInteger * 1.5); // scaled width
    if (lotsQuery.FieldByName('status').AsString == 'production')
    {
      clComponent.SetupComponent(tempProgressFg, '{"BackgroundColor":"#60a5fa", "RoundHeight":2, "RoundWidth":2}');
    }
    else if (lotsQuery.FieldByName('status').AsString == 'depot')
    {
      clComponent.SetupComponent(tempProgressFg, '{"BackgroundColor":"#4ade80", "RoundHeight":2, "RoundWidth":2}');
    }
    else
    {
      clComponent.SetupComponent(tempProgressFg, '{"BackgroundColor":"#fbbf24", "RoundHeight":2, "RoundWidth":2}');
    }
    
    // Qty block
    tempLayout = MyForm.AddNewLayout(tempPanel, 'lotQtyLayout' + IntToStr(i));
    tempLayout.Align = alRight;
    tempLayout.Width = 80;
    tempLayout.Margins.Right = 10;
    tempLayout.Margins.Top = 12;
    
    tempLabel = MyForm.AddNewLabel(tempLayout, 'lotLblQty' + IntToStr(i), lotsQuery.FieldByName('qty').AsString);
    tempLabel.Align = alTop;
    tempLabel.clProSettings.FontSize  = 13;
    tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
    //tempLabel.TextSettings.StyledSettings = ssFamily;
    
    tempLabel2 = MyForm.AddNewLabel(tempLayout, 'lotLblUnit' + IntToStr(i), lotsQuery.FieldByName('unit').AsString);
    tempLabel2.Align = alTop;
    tempLabel2.clProSettings.FontSize  = 9;
    tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
    //tempLabel2.TextSettings.StyledSettings = ssFamily;
    tempLabel2.Margins.Top = 2;
    
    i = i + 1;
    lotsQuery.Next;
  }
  
  // Header section for Invoices
  tempLabel = MyForm.AddNewLabel(prodScrollBox, 'lblInvoicesHeader', 'Factures');
  tempLabel.Align = alTop;
  tempLabel.Margins.Left = 12;
  tempLabel.Margins.Top = 15;
  tempLabel.Margins.Bottom = 8;
  tempLabel.clProSettings.FontSize  = 11;
  tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //tempLabel.TextSettings.StyledSettings = ssFamily;
  
  // Dynamically load Invoices list
  invoicesQuery.First;
  i = 0;
  while (not invoicesQuery.Eof)
  {
    tempPanel = MyForm.AddNewProPanel(prodScrollBox, 'invCard' + IntToStr(i));
    tempPanel.Align = alTop;
    tempPanel.Height = 70;
    tempPanel.Margins.Left = 10;
    tempPanel.Margins.Right = 10;
    tempPanel.Margins.Bottom = 8;
    tempPanel.ClTagInt = i;
    clComponent.SetupComponent(tempPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":12, "RoundWidth":12, "BorderColor":"#1a2d42", "BorderWidth":1}');
    MyForm.AddNewEvent(tempPanel, tbeOnClick, 'OpenInvoiceDetail');
    
    // Details block
    tempLayout = MyForm.AddNewLayout(tempPanel, 'invTextLayout' + IntToStr(i));
    tempLayout.Align = alClient;
    tempLayout.Margins.Left = 15;
    tempLayout.Margins.Top = 12;
    
    tempLabel = MyForm.AddNewLabel(tempLayout, 'invLblId' + IntToStr(i), invoicesQuery.FieldByName('id').AsString + ' · ' + invoicesQuery.FieldByName('client').AsString);
    tempLabel.Align = alTop;
    tempLabel.clProSettings.FontSize  = 12;
    tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
    //tempLabel.TextSettings.StyledSettings = ssFamily;
    
    tempLabel2 = MyForm.AddNewLabel(tempLayout, 'invLblSub' + IntToStr(i), 'Émise le ' + invoicesQuery.FieldByName('date').AsString + ' · Échéance ' + invoicesQuery.FieldByName('due').AsString);
    tempLabel2.Align = alTop;
    tempLabel2.clProSettings.FontSize  = 10;
    tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
    //tempLabel2.TextSettings.StyledSettings = ssFamily;
    tempLabel2.Margins.Top = 3;
    
    // Amount block
    tempLayout = MyForm.AddNewLayout(tempPanel, 'invAmountLayout' + IntToStr(i));
    tempLayout.Align = alRight;
    tempLayout.Width = 100;
    tempLayout.Margins.Right = 10;
    tempLayout.Margins.Top = 12;
    
    tempLabel = MyForm.AddNewLabel(tempLayout, 'invLblAmount' + IntToStr(i), invoicesQuery.FieldByName('amount').AsString + ' ' + invoicesQuery.FieldByName('currency').AsString);
    tempLabel.Align = alTop;
    tempLabel.clProSettings.FontSize  = 13;
    tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
    //tempLabel.TextSettings.StyledSettings = ssFamily;
    
    tempLabel2 = MyForm.AddNewLabel(tempLayout, 'invLblStatus' + IntToStr(i), invoicesQuery.FieldByName('status').AsString);
    tempLabel2.Align = alTop;
    tempLabel2.clProSettings.FontSize  = 9;
    if (invoicesQuery.FieldByName('status').AsString == 'payée')
    {
      tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4ade80');
    }
    else if (invoicesQuery.FieldByName('status').AsString == 'retard')
    {
      tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#fb923c');
    }
    else
    {
      tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#fbbf24');
    }
    //tempLabel2.TextSettings.StyledSettings = ssFamily;
    tempLabel2.Margins.Top = 2;
    
    i = i + 1;
    invoicesQuery.Next;
  }
  
  // Administrator actions for Production Screen
  prodActionsPanel = MyForm.AddNewProPanel(prodScrollBox, 'prodActionsPanel');
  prodActionsPanel.Align = alTop;
  prodActionsPanel.Height = 140;
  prodActionsPanel.Margins.Top = 15;
  prodActionsPanel.Margins.Left = 10;
  prodActionsPanel.Margins.Right = 10;
  
  tempLabel = MyForm.AddNewLabel(prodActionsPanel, 'lblAdminTitle2', 'ACTIONS ADMINISTRATEUR');
  tempLabel.Align = alTop;
  tempLabel.clProSettings.FontSize  = 10;
  tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //tempLabel.TextSettings.StyledSettings = ssFamily;
  tempLabel.Margins.Bottom = 8;
  
  btnScanQr = MyForm.AddNewProButton(prodActionsPanel, 'btnCreateLot', 'Créer un nouveau lot');
  btnScanQr.Align = alTop;
  btnScanQr.Height = 44;
  btnScanQr.Margins.Bottom = 8;
  btnScanQr.Text = 'Créer un nouveau lot';
  clComponent.SetupComponent(btnScanQr, '{"BackgroundColor":"#00d4ff18", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff30", "BorderWidth":1}');
  MyForm.AddNewEvent(btnScanQr, tbeOnClick, 'ActionClick');
  // --- Bottom Tab Bar Panel ---
  tabBarPanel = MyForm.AddNewProPanel(MyForm, 'tabBarPanel');
  tabBarPanel.Align = alBottom;
  tabBarPanel.Height = 60;
  clComponent.SetupComponent(tabBarPanel, '{"BackgroundColor":"#07101c", "BorderColor":"#1a2d42", "BorderWidth":1}');
  
  btnTabMvt = MyForm.AddNewProButton(tabBarPanel, 'btnTabMvt', 'Stock');
  btnTabMvt.Align = alLeft;
  btnTabMvt.Width = 75;
  btnTabMvt.Caption = 'Stock';
  clComponent.SetupComponent(btnTabMvt, '{"BackgroundColor":"#07101c", "TextColor":"#00d4ff", "RoundHeight":0, "RoundWidth":0}');
  MyForm.AddNewEvent(btnTabMvt, tbeOnClick, 'TabClick');
  
  btnTabProd = MyForm.AddNewProButton(tabBarPanel, 'btnTabProd', 'Rapports');
  btnTabProd.Align = alLeft;
  btnTabProd.Width = 75;
  btnTabProd.Caption = 'Rapports';
  clComponent.SetupComponent(btnTabProd, '{"BackgroundColor":"#07101c", "TextColor":"#4a6580", "RoundHeight":0, "RoundWidth":0}');
  MyForm.AddNewEvent(btnTabProd, tbeOnClick, 'TabClick');
  // --- Detail Overlay Sheet (Modals) ---
  detailOverlay = MyForm.AddNewProPanel(MyForm, 'detailOverlay');
  detailOverlay.Align = alClient;
  detailOverlay.Visible = False;
  clComponent.SetupComponent(detailOverlay, '{"BackgroundColor":"#040810d0"}');
  
  // Dismiss overlay clicking the background
  MyForm.AddNewEvent(detailOverlay, tbeOnClick, 'CloseDetailOverlay');
  
  detailSheet = MyForm.AddNewProPanel(detailOverlay, 'detailSheet');
  detailSheet.Align = alBottom;
  detailSheet.Height = 280;
  clComponent.SetupComponent(detailSheet, '{"BackgroundColor":"#0c1828", "RoundHeight":20, "RoundWidth":20, "BorderColor":"#1a2d42", "BorderWidth":1}');
  
  // Sheet Header
  lblDetailTitle = MyForm.AddNewLabel(detailSheet, 'lblDetailTitle', 'MV-081');
  lblDetailTitle.Align = alTop;
  lblDetailTitle.Margins.Left = 20;
  lblDetailTitle.Margins.Top = 20;
  lblDetailTitle.clProSettings.FontSize  = 18;
  lblDetailTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
  //lblDetailTitle.TextSettings.StyledSettings = ssFamily;
  
  lblDetailSubtitle = MyForm.AddNewLabel(detailSheet, 'lblDetailSubtitle', 'Produit A · Bloc A');
  lblDetailSubtitle.Align = alTop;
  lblDetailSubtitle.Margins.Left = 20;
  lblDetailSubtitle.Margins.Top = 4;
  lblDetailSubtitle.clProSettings.FontSize  = 12;
  lblDetailSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //lblDetailSubtitle.TextSettings.StyledSettings = ssFamily;
  
  // Close Button
  btnCloseDetail = MyForm.AddNewProButton(detailSheet, 'btnCloseDetail', 'X');
  btnCloseDetail.Align = alNone;
  btnCloseDetail.Width = 30;
  btnCloseDetail.Height = 30;
  btnCloseDetail.Position.X = 320;
  btnCloseDetail.Position.Y = 16;
  clComponent.SetupComponent(btnCloseDetail, '{"BackgroundColor":"#0d1520", "TextColor":"#4a6580", "RoundHeight":6, "RoundWidth":6, "BorderColor":"#1a2d42", "BorderWidth":1}');
  MyForm.AddNewEvent(btnCloseDetail, tbeOnClick, 'CloseDetailOverlay');
  
  // Details Grid Layout
  pnlDetailGrid = MyForm.AddNewProPanel(detailSheet, 'pnlDetailGrid');
  pnlDetailGrid.Align = alTop;
  pnlDetailGrid.Height = 110;
  pnlDetailGrid.Margins.Top = 15;
  pnlDetailGrid.Margins.Left = 20;
  pnlDetailGrid.Margins.Right = 20;
  clComponent.SetupComponent(pnlDetailGrid, '{"BackgroundColor":"#0c1828"}');
  
  // Col 1 Row 1
  lblGridVal1 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridVal1', '50 kg');
  lblGridVal1.Align = alNone;
  lblGridVal1.Position.X = 10;
  lblGridVal1.Position.Y = 10;
  lblGridVal1.clProSettings.FontSize  = 13;
  lblGridVal1.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
  //lblGridVal1.TextSettings.StyledSettings = ssFamily;
  
  lblGridLbl1 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridLbl1', 'QUANTITÉ');
  lblGridLbl1.Align = alNone;
  lblGridLbl1.Position.X = 10;
  lblGridLbl1.Position.Y = 28;
  lblGridLbl1.clProSettings.FontSize  = 9;
  lblGridLbl1.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //lblGridLbl1.TextSettings.StyledSettings = ssFamily;
  
  // Col 2 Row 1
  lblGridVal2 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridVal2', 'LOT001');
  lblGridVal2.Align = alNone;
  lblGridVal2.Position.X = 170;
  lblGridVal2.Position.Y = 10;
  lblGridVal2.clProSettings.FontSize  = 13;
  lblGridVal2.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
  //lblGridVal2.TextSettings.StyledSettings = ssFamily;
  
  lblGridLbl2 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridLbl2', 'LOT');
  lblGridLbl2.Align = alNone;
  lblGridLbl2.Position.X = 170;
  lblGridLbl2.Position.Y = 28;
  lblGridLbl2.clProSettings.FontSize  = 9;
  lblGridLbl2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  ///lblGridLbl2.TextSettings.StyledSettings = ssFamily;
  
  // Col 1 Row 2
  lblGridVal3 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridVal3', '12/07 14:32');
  lblGridVal3.Align = alNone;
  lblGridVal3.Position.X = 10;
  lblGridVal3.Position.Y = 60;
  lblGridVal3.clProSettings.FontSize  = 13;
  lblGridVal3.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
  //lblGridVal3.TextSettings.StyledSettings = ssFamily;
  
  lblGridLbl3 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridLbl3', 'DATE / HEURE');
  lblGridLbl3.Align = alNone;
  lblGridLbl3.Position.X = 10;
  lblGridLbl3.Position.Y = 78;
  lblGridLbl3.clProSettings.FontSize  = 9;
  lblGridLbl3.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //lblGridLbl3.TextSettings.StyledSettings = ssFamily;
  
  // Col 2 Row 2
  lblGridVal4 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridVal4', 'Y. Kaya');
  lblGridVal4.Align = alNone;
  lblGridVal4.Position.X = 170;
  lblGridVal4.Position.Y = 60;
  lblGridVal4.clProSettings.FontSize  = 13;
  lblGridVal4.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
  //lblGridVal4.TextSettings.StyledSettings = ssFamily;
  
  lblGridLbl4 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridLbl4', 'OPÉRATEUR');
  lblGridLbl4.Align = alNone;
  lblGridLbl4.Position.X = 170;
  lblGridLbl4.Position.Y = 78;
  lblGridLbl4.clProSettings.FontSize  = 9;
  lblGridLbl4.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //lblGridLbl4.TextSettings.StyledSettings = ssFamily;
  
  // Detail Actions
  btnDetailAction1 = MyForm.AddNewProButton(detailSheet, 'btnDetailAction1', 'Voir le QR');
  btnDetailAction1.Align = alNone;
  btnDetailAction1.Width = 160;
  btnDetailAction1.Height = 44;
  btnDetailAction1.Position.X = 20;
  btnDetailAction1.Position.Y = 195;
  clComponent.SetupComponent(btnDetailAction1, '{"BackgroundColor":"#00d4ff18", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff30", "BorderWidth":1}');
  MyForm.AddNewEvent(btnDetailAction1, tbeOnClick, 'ActionClick');
  
  btnDetailAction2 = MyForm.AddNewProButton(detailSheet, 'btnDetailAction2', 'Annuler');
  btnDetailAction2.Align = alNone;
  btnDetailAction2.Width = 160;
  btnDetailAction2.Height = 44;
  btnDetailAction2.Position.X = 195;
  btnDetailAction2.Position.Y = 195;
  clComponent.SetupComponent(btnDetailAction2, '{"BackgroundColor":"#f9731618", "TextColor":"#fb923c", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#f9731630", "BorderWidth":1}');
  MyForm.AddNewEvent(btnDetailAction2, tbeOnClick, 'ActionClick');
  
  ShowMvtScreen;
  MyForm.Run;
}

https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon="{"version":"2024.11.0","token":"439455f3e46c40b98dbd42a2f1a954d8","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}" crossorigin="anonymous">
Yukarı Dön
ibrahimBsr Açılır Kutu İzle
Yeni Üye
Yeni Üye
Simge

Kayıt Tarihi: 23 Haziran 2026
Durum: Aktif Değil
Puanlar: 35
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı ibrahimBsr Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 5 Saat 56 Dakika Önce Saat 17:09
Merhaba Barthez hatanı çözdüm sen başlıklarını TCLProLabel olarak kaydetmişsin ama kullanırken AddNewLabel olarak kullanmışsın bundan kaynaklı hata alıyordun kodun doğrusunu atıyorum:
var
  MyForm: TclForm;
  mainLayout, screenSwitcherLayout: TclLayout;
  mvtScreenLayout, prodScreenLayout: TclLayout;
  btnMvtScreen, btnProdScreen: TclProButton;
  
  // Header Panel
  headerPanel: TclProPanel;
  lblHeaderTitle, lblHeaderSubtitle: TclProLabel;
  statsLayout: TclLayout;
  pnlStat1, pnlStat2: TclProPanel;
  lblStatVal1, lblStatLbl1, lblStatVal2, lblStatLbl2: TclProLabel;
  
  // Mouvements list
  mvtScrollBox: TclVertScrollBox;
  mvtQuery: TclJsonQuery;
  mvtJson: String;
  
  // Production lots & Invoices list
  prodScrollBox: TclVertScrollBox;
  lotsQuery: TclJsonQuery;
  lotsJson: String;
  invoicesQuery: TclJsonQuery;
  invoicesJson: String;
  
  // Actions & Scanner
  mvtActionsPanel: TclProPanel;
  prodActionsPanel: TclProPanel;
  btnScanQr: TclProButton;
  lblScanResult: TclProLabel;
  
  // Bottom Tab Bar
  tabBarPanel: TclProPanel;
  btnTabMvt, btnTabProd, btnTabUsers, btnTabReports, btnTabSettings: TclProButton;
  
  // Detail Sheets / Overlay
  detailOverlay: TclProPanel;
  detailSheet: TclProPanel;
  lblDetailTitle, lblDetailSubtitle: TclProLabel;
  pnlDetailGrid: TclProPanel;
  lblGridVal1, lblGridLbl1, lblGridVal2, lblGridLbl2: TclProLabel;
  lblGridVal3, lblGridLbl3, lblGridVal4, lblGridLbl4: TclProLabel;
  btnDetailAction1, btnDetailAction2: TclProButton;
  btnCloseDetail: TclProButton;
  // Loop & temporary variables
  i, clickedIndex: Integer;
  tempPanel: TclProPanel;
  tempLayout,HeaderLayout: TclLayout;
  tempLabel, tempLabel2,label1,label2: TclProLabel;
  tempProgressBg, tempProgressFg: TclProPanel;
  tempTypeIcon: TclProPanel;
void ShowMvtScreen;
{
  mvtScreenLayout.Visible = True;
  prodScreenLayout.Visible = False;
  lblHeaderTitle.Text = 'Mouvements';
  lblHeaderSubtitle.Text = '& traçabilité';
  lblHeaderSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff');
  
  // Switch button styles
  clComponent.SetupComponent(btnMvtScreen, '{"BackgroundColor":"#0d1520", "TextColor":"#e2eaf5"}');
  clComponent.SetupComponent(btnProdScreen, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580"}');
}
void ShowProdScreen;
{
  mvtScreenLayout.Visible = False;
  prodScreenLayout.Visible = True;
  lblHeaderTitle.Text = 'Production';
  lblHeaderSubtitle.Text = '& lots';
  lblHeaderSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#60a5fa');
  
  // Switch button styles
  clComponent.SetupComponent(btnMvtScreen, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580"}');
  clComponent.SetupComponent(btnProdScreen, '{"BackgroundColor":"#0d1520", "TextColor":"#e2eaf5"}');
}
void OnMvtScreenClick;
{
  ShowMvtScreen;
}
void OnProdScreenClick;
{
  ShowProdScreen;
}
void CloseDetailOverlay;
{
  detailOverlay.Visible = False;
}
void OpenMvtDetail;
var
  idx: Integer;
  foundMvt: Boolean;
{
  idx = TclProPanel(MyForm.ClSender).ClTagInt;
  
  mvtQuery.First;
  foundMvt = False;
  i = 0;
  while (not mvtQuery.Eof)
  {
    if (i == idx)
    {
      foundMvt = True;
      Break;
    }
    i = i + 1;
    mvtQuery.Next;
  }
  
  if (foundMvt)
  {
    lblDetailTitle.Text = mvtQuery.FieldByName('id').AsString;
    lblDetailSubtitle.Text = mvtQuery.FieldByName('product').AsString + ' · ' + mvtQuery.FieldByName('bloc').AsString;
    
    lblGridLbl1.Text = 'QUANTITÉ';
    lblGridVal1.Text = mvtQuery.FieldByName('qty').AsString + ' ' + mvtQuery.FieldByName('unit').AsString;
    
    lblGridLbl2.Text = 'LOT';
    lblGridVal2.Text = mvtQuery.FieldByName('lot').AsString;
    
    lblGridLbl3.Text = 'DATE / HEURE';
    lblGridVal3.Text = mvtQuery.FieldByName('date').AsString + ' ' + mvtQuery.FieldByName('time').AsString;
    
    lblGridLbl4.Text = 'OPÉRATEUR';
    lblGridVal4.Text = mvtQuery.FieldByName('operator').AsString;
    
    btnDetailAction1.Caption = 'Voir le QR';
    btnDetailAction2.Caption = 'Annuler';
    
    detailOverlay.Visible = True;
  }
}
void OpenLotDetail;
var
  idx: Integer;
  foundLot: Boolean;
{
  idx = TclProPanel(MyForm.ClSender).ClTagInt;
  
  lotsQuery.First;
  foundLot = False;
  i = 0;
  while (not lotsQuery.Eof)
  {
    if (i == idx)
    {
      foundLot = True;
      Break;
    }
    i = i + 1;
    lotsQuery.Next;
  }
  
  if (foundLot)
  {
    lblDetailTitle.Text = lotsQuery.FieldByName('id').AsString;
    lblDetailSubtitle.Text = lotsQuery.FieldByName('product').AsString + ' · ' + lotsQuery.FieldByName('bloc').AsString;
    
    lblGridLbl1.Text = 'QUANTITÉ';
    lblGridVal1.Text = lotsQuery.FieldByName('qty').AsString + ' ' + lotsQuery.FieldByName('unit').AsString;
    
    lblGridLbl2.Text = 'PROGRESSION';
    lblGridVal2.Text = lotsQuery.FieldByName('progress').AsString + '%';
    
    lblGridLbl3.Text = 'DÉBUT';
    lblGridVal3.Text = lotsQuery.FieldByName('started').AsString;
    
    lblGridLbl4.Text = 'OPÉRATEUR';
    lblGridVal4.Text = lotsQuery.FieldByName('operator').AsString;
    
    btnDetailAction1.Caption = 'Mettre à jour';
    btnDetailAction2.Caption = 'Clôturer le lot';
    
    detailOverlay.Visible = True;
  }
}
void OpenInvoiceDetail;
var
  idx: Integer;
  foundInv: Boolean;
{
  idx = TclProPanel(MyForm.ClSender).ClTagInt;
  
  invoicesQuery.First;
  foundInv = False;
  i = 0;
  while (not invoicesQuery.Eof)
  {
    if (i == idx)
    {
      foundInv = True;
      Break;
    }
    i = i + 1;
    invoicesQuery.Next;
  }
  
  if (foundInv)
  {
    lblDetailTitle.Text = invoicesQuery.FieldByName('id').AsString;
    lblDetailSubtitle.Text = invoicesQuery.FieldByName('client').AsString;
    
    lblGridLbl1.Text = 'MONTANT';
    lblGridVal1.Text = invoicesQuery.FieldByName('amount').AsString + ' ' + invoicesQuery.FieldByName('currency').AsString;
    
    lblGridLbl2.Text = 'STATUT';
    lblGridVal2.Text = invoicesQuery.FieldByName('status').AsString;
    
    lblGridLbl3.Text = 'ÉMISE LE';
    lblGridVal3.Text = invoicesQuery.FieldByName('date').AsString;
    
    lblGridLbl4.Text = 'ÉCHÉANCE';
    lblGridVal4.Text = invoicesQuery.FieldByName('due').AsString;
    
    btnDetailAction1.Caption = 'Marquer payée';
    btnDetailAction2.Caption = 'Exporter PDF';
    
    detailOverlay.Visible = True;
  }
}
void RunScanner;
{
  MyForm.CallBarcodeReader(lblScanResult);
}
void TabClick;
var
  tabName: String;
{
  tabName = TclProButton(MyForm.ClSender).Caption;
  ShowMessage('Navigation vers : ' + tabName);
}
void ActionClick;
var
  actName: String;
{
  actName = TclProButton(MyForm.ClSender).Text;
  ShowMessage('Action déclenchée : ' + actName);
}
{
  MyForm = TclForm.Create(Self);
  MyForm.SetFormColor('#080d14', '#0d1520', clGVertical);
  
  // Set window state to full screen on Windows
  if (not Clomosy.PlatformIsMobile)
  {
    MyForm.clSetWindowState(fwsMaximized);
  }
  
  // --- Data Init ---
  mvtJson = '[{"id":"MV-081","date":"12/07","time":"14:32","type":"entrée","product":"Produit A","lot":"LOT001","bloc":"Bloc A","qty":50,"unit":"kg","operator":"Y. Kaya"},' +
             '{"id":"MV-082","date":"12/07","time":"11:15","type":"sortie","product":"Produit B","lot":"LOT002","bloc":"Dépôt","qty":-10,"unit":"pcs","operator":"M. Arslan"},' +
             '{"id":"MV-083","date":"11/07","time":"09:47","type":"entrée","product":"Produit C","lot":"LOT003","bloc":"Bloc B","qty":120,"unit":"unité","operator":"F. Demir"},' +
             '{"id":"MV-084","date":"11/07","time":"08:05","type":"transfert","product":"Produit D","lot":"LOT001","bloc":"Bloc C","qty":30,"unit":"pcs","operator":"A. Yıldız"}]';
             
  lotsJson = '[{"id":"LOT001","product":"Produit A","bloc":"Bloc A","qty":320,"unit":"kg","status":"production","started":"08/07","operator":"Y. Kaya","progress":72},' +
              '{"id":"LOT002","product":"Produit B","bloc":"Bloc B","qty":150,"unit":"pcs","status":"depot","started":"05/07","operator":"M. Arslan","progress":100},' +
              '{"id":"LOT003","product":"Produit C","bloc":"Bloc C","qty":480,"unit":"unité","status":"production","started":"10/07","operator":"F. Demir","progress":45}]';
              
  invoicesJson = '[{"id":"F001","client":"Client A","amount":"250 000","currency":"DA","date":"01/07","due":"15/07","status":"payée"},' +
                  '{"id":"F002","client":"Client B","amount":"120 000","currency":"DA","date":"03/07","due":"17/07","status":"retard"},' +
                  '{"id":"F003","client":"Client C","amount":"85 000","currency":"DA","date":"06/07","due":"20/07","status":"en_attente"}]';
                  
  mvtQuery = Clomosy.ClDataSetFromJSON(mvtJson);
  lotsQuery = Clomosy.ClDataSetFromJSON(lotsJson);
  invoicesQuery = Clomosy.ClDataSetFromJSON(invoicesJson);
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

  // --- Main Layout ---
  mainLayout = MyForm.AddNewLayout(MyForm, 'mainLayout');
  mainLayout.Align = alClient;
  mainLayout.Margins.Bottom = 60; // Leave space for bottom tab bar
  
  // [ ÉTAPE 1 : HEADER GESTION DES MEMBRES ]
  HeaderLayout = MyForm.AddNewLayout(mainLayout, 'HeaderLayout');
  HeaderLayout.Align = alTop;
  HeaderLayout.Height = 80;

  // Bouton Retour (Gauche)
  label1 = MyForm.AddNewProLabel(HeaderLayout, 'label1', 'GESTIONNAIRES DES UTILISATEURS');
  label1.Align = alTop;
  label1.Margins.Left = 14; 
  label1.Margins.Top = 16;
  label1.clProSettings.FontColor = clAlphaColor.clHexToColor('#446580');
  label1.clProSettings.FontSize = 12;
  label1.clProSettings.TextSettings.Font.Style = [fsBold];
  label1.SetclProSettings(label1.clProSettings);


  // Titre "MEMBRES" (Centre)
  label2 = MyForm.AddNewProLabel(HeaderLayout, 'label2', 'Utilisateurs & roles');
  label2.Align = alTop;
  label2.Margins.Left = 14; 
  label2.Height = 40;
  label2.clProSettings.FontColor = clAlphaColor.clHexToColor('#e8eef5');
  label2.clProSettings.FontSize = 30;
  label2.clProSettings.TextSettings.Font.Style = [fsBold];
  label2.SetclProSettings(label2.clProSettings);
  
  
  
  
  
  
  
  
  
  
  // --- Header Panel ---
  headerPanel = MyForm.AddNewProPanel(mainLayout, 'headerPanel');
  headerPanel.Align = alTop;
  headerPanel.Height = 110;
  headerPanel.Margins.Left = 10;
  headerPanel.Margins.Right = 10;
  headerPanel.Margins.Top = 10;
  headerPanel.Padding.Left = 15;
  headerPanel.Padding.Top = 15;
  
  lblHeaderTitle = MyForm.AddNewProLabel(headerPanel, 'lblHeaderTitle', 'Mouvements');
  lblHeaderTitle.Align = alTop;
  lblHeaderTitle.clProSettings.FontSize = 22;
  lblHeaderTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
  lblHeaderTitle.SetclProSettings(lblHeaderTitle.clProSettings);
  
  lblHeaderSubtitle = MyForm.AddNewProLabel(headerPanel, 'lblHeaderSubtitle', '& traçabilité');
  lblHeaderSubtitle.Align = alTop;
  lblHeaderSubtitle.clProSettings.FontSize  = 18;
  lblHeaderSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff');
  lblHeaderSubtitle.Margins.Top = 2;
  lblHeaderSubtitle.SetclProSettings(lblHeaderSubtitle.clProSettings);
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  // --- Screen Switcher Pill ---
  screenSwitcherLayout = MyForm.AddNewLayout(mainLayout, 'screenSwitcherLayout');
  screenSwitcherLayout.Align = alTop;
  screenSwitcherLayout.Height = 44;
  screenSwitcherLayout.Margins.Left = 10;
  screenSwitcherLayout.Margins.Right = 10;
  screenSwitcherLayout.Margins.Top = 8;
  
  btnMvtScreen = MyForm.AddNewProButton(screenSwitcherLayout, 'btnMvtScreen', 'Mouvements');
  btnMvtScreen.Align = alLeft;
  btnMvtScreen.Width = 170;
  clComponent.SetupComponent(btnMvtScreen, '{"BackgroundColor":"#0d1520", "TextColor":"#e2eaf5", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}');
  MyForm.AddNewEvent(btnMvtScreen, tbeOnClick, 'OnMvtScreenClick');
  
  btnProdScreen = MyForm.AddNewProButton(screenSwitcherLayout, 'btnProdScreen', 'Production');
  btnProdScreen.Align = alRight;
  btnProdScreen.Width = 170;
  clComponent.SetupComponent(btnProdScreen, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}');
  MyForm.AddNewEvent(btnProdScreen, tbeOnClick, 'OnProdScreenClick');
  // --- Mouvement Screen ---
  mvtScreenLayout = MyForm.AddNewLayout(mainLayout, 'mvtScreenLayout');
  mvtScreenLayout.Align = alClient;
  
  mvtScrollBox = MyForm.AddNewVertScrollBox(mvtScreenLayout, 'mvtScrollBox');
  mvtScrollBox.Align = alClient;
  mvtScrollBox.Margins.Top = 10;
  
  // Dynamically load Movements list
  mvtQuery.First;
  i = 0;
  while (not mvtQuery.Eof)
  {
    tempPanel = MyForm.AddNewProPanel(mvtScrollBox, 'mvtCard' + IntToStr(i));
    tempPanel.Align = alTop;
    tempPanel.Height = 70;
    tempPanel.Margins.Left = 10;
    tempPanel.Margins.Right = 10;
    tempPanel.Margins.Bottom = 8;
    tempPanel.ClTagInt = i;
    clComponent.SetupComponent(tempPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":12, "RoundWidth":12, "BorderColor":"#1a2d42", "BorderWidth":1}');
    MyForm.AddNewEvent(tempPanel, tbeOnClick, 'OpenMvtDetail');
    
    // Icon panel wrapper
    tempTypeIcon = MyForm.AddNewProPanel(tempPanel, 'mvtIcon' + IntToStr(i));
    tempTypeIcon.Align = alLeft;
    tempTypeIcon.Width = 40;
    tempTypeIcon.Margins.Left = 10;
    tempTypeIcon.Margins.Top = 10;
    tempTypeIcon.Margins.Bottom = 10;
    if (mvtQuery.FieldByName('type').AsString == 'entrée')
    {
      clComponent.SetupComponent(tempTypeIcon, '{"BackgroundColor":"#22c55e18", "BorderColor":"#22c55e30", "BorderWidth":1, "RoundHeight":8, "RoundWidth":8}');
    }
    else if (mvtQuery.FieldByName('type').AsString == 'sortie')
    {
      clComponent.SetupComponent(tempTypeIcon, '{"BackgroundColor":"#f9731618", "BorderColor":"#f9731630", "BorderWidth":1, "RoundHeight":8, "RoundWidth":8}');
    }
    else
    {
      clComponent.SetupComponent(tempTypeIcon, '{"BackgroundColor":"#00d4ff14", "BorderColor":"#00d4ff30", "BorderWidth":1, "RoundHeight":8, "RoundWidth":8}');
    }
    
    // Details block
    tempLayout = MyForm.AddNewLayout(tempPanel, 'mvtTextLayout' + IntToStr(i));
    tempLayout.Align = alClient;
    tempLayout.Margins.Left = 12;
    tempLayout.Margins.Top = 12;
    
    tempLabel = MyForm.AddNewProLabel(tempLayout, 'mvtLblProd' + IntToStr(i), mvtQuery.FieldByName('product').AsString);
    tempLabel.Align = alTop;
    tempLabel.clProSettings.FontSize  = 13;
    tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
    //tempLabel.TextSettings.StyledSettings = ssFamily;
    
    tempLabel2 = MyForm.AddNewProLabel(tempLayout, 'mvtLblSub' + IntToStr(i), mvtQuery.FieldByName('date').AsString + ' · ' + mvtQuery.FieldByName('time').AsString + ' · ' + mvtQuery.FieldByName('bloc').AsString);
    tempLabel2.Align = alTop;
    tempLabel2.clProSettings.FontSize  = 10;
    tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
    //tempLabel2.TextSettings.StyledSettings = ssFamily;
    tempLabel2.Margins.Top = 3;
    
    // Qty block
    tempLayout = MyForm.AddNewLayout(tempPanel, 'mvtQtyLayout' + IntToStr(i));
    tempLayout.Align = alRight;
    tempLayout.Width = 80;
    tempLayout.Margins.Right = 10;
    tempLayout.Margins.Top = 12;
    
    tempLabel = MyForm.AddNewProLabel(tempLayout, 'mvtLblQty' + IntToStr(i), mvtQuery.FieldByName('qty').AsString);
    tempLabel.Align = alTop;
    tempLabel.clProSettings.FontSize  = 15;
    if (mvtQuery.FieldByName('qty').AsInteger > 0)
    {
      tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4ade80');
    }
    else
    {
      tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#fb923c');
    }
    //tempLabel.TextSettings.StyledSettings = ssFamily;
    
    tempLabel2 = MyForm.AddNewProLabel(tempLayout, 'mvtLblUnit' + IntToStr(i), mvtQuery.FieldByName('unit').AsString);
    tempLabel2.Align = alTop;
    tempLabel2.clProSettings.FontSize  = 9;
    tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
    //tempLabel2.TextSettings.StyledSettings = ssFamily;
    tempLabel2.Margins.Top = 2;
    
    i = i + 1;
    mvtQuery.Next;
  }
  
  // Administrator actions for Mouvements Screen
  mvtActionsPanel = MyForm.AddNewProPanel(mvtScrollBox, 'mvtActionsPanel');
  mvtActionsPanel.Align = alTop;
  mvtActionsPanel.Height = 220;
  mvtActionsPanel.Margins.Top = 15;
  mvtActionsPanel.Margins.Left = 10;
  mvtActionsPanel.Margins.Right = 10;
  
  tempLabel = MyForm.AddNewProLabel(mvtActionsPanel, 'lblAdminTitle1', 'ACTIONS ADMINISTRATEUR');
  tempLabel.Align = alTop;
  tempLabel.clProSettings.FontSize  = 10;
  tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //tempLabel.TextSettings.StyledSettings = ssFamily;
  tempLabel.Margins.Bottom = 8;
  
  btnScanQr = MyForm.AddNewProButton(mvtActionsPanel, 'btnScanQr', 'Scanner un QR code / lot');
  btnScanQr.Align = alTop;
  btnScanQr.Height = 44;
  btnScanQr.Margins.Bottom = 8;
  clComponent.SetupComponent(btnScanQr, '{"BackgroundColor":"#00d4ff18", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff30", "BorderWidth":1}');
  MyForm.AddNewEvent(btnScanQr, tbeOnClick, 'RunScanner');
  
  lblScanResult = MyForm.AddNewProLabel(mvtActionsPanel, 'lblScanResult', '');
  lblScanResult.Visible = False;
  // --- Production Screen ---
  prodScreenLayout = MyForm.AddNewLayout(mainLayout, 'prodScreenLayout');
  prodScreenLayout.Align = alClient;
  prodScreenLayout.Visible = False; // Hide initially
  
  prodScrollBox = MyForm.AddNewVertScrollBox(prodScreenLayout, 'prodScrollBox');
  prodScrollBox.Align = alClient;
  prodScrollBox.Margins.Top = 10;
  
  // Header section for active Lots
  tempLabel = MyForm.AddNewProLabel(prodScrollBox, 'lblLotsHeader', 'Suivi de production');
  tempLabel.Align = alTop;
  tempLabel.Margins.Left = 12;
  tempLabel.Margins.Bottom = 8;
  tempLabel.clProSettings.FontSize  = 11;
  tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //tempLabel.TextSettings.StyledSettings = ssFamily;
  
  // Dynamically load Lots list
  lotsQuery.First;
  i = 0;
  while (not lotsQuery.Eof)
  {
    tempPanel = MyForm.AddNewProPanel(prodScrollBox, 'lotCard' + IntToStr(i));
    tempPanel.Align = alTop;
    tempPanel.Height = 85;
    tempPanel.Margins.Left = 10;
    tempPanel.Margins.Right = 10;
    tempPanel.Margins.Bottom = 8;
    tempPanel.ClTagInt = i;
    clComponent.SetupComponent(tempPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":12, "RoundWidth":12, "BorderColor":"#1a2d42", "BorderWidth":1}');
    MyForm.AddNewEvent(tempPanel, tbeOnClick, 'OpenLotDetail');
    
    // Details block
    tempLayout = MyForm.AddNewLayout(tempPanel, 'lotTextLayout' + IntToStr(i));
    tempLayout.Align = alClient;
    tempLayout.Margins.Left = 15;
    tempLayout.Margins.Top = 12;
    
    tempLabel = MyForm.AddNewProLabel(tempLayout, 'lotLblId' + IntToStr(i), lotsQuery.FieldByName('id').AsString);
    tempLabel.Align = alTop;
    tempLabel.clProSettings.FontSize  = 13;
    tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
    //tempLabel.TextSettings.StyledSettings = ssFamily;
    
    tempLabel2 = MyForm.AddNewProLabel(tempLayout, 'lotLblProduct' + IntToStr(i), lotsQuery.FieldByName('product').AsString + ' · ' + lotsQuery.FieldByName('bloc').AsString);
    tempLabel2.Align = alTop;
    tempLabel2.clProSettings.FontSize  = 10;
    tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
    //tempLabel2.TextSettings.StyledSettings = ssFamily;
    tempLabel2.Margins.Top = 3;
    
    // Progress Bar rendering in Clomosy
    tempProgressBg = MyForm.AddNewProPanel(tempLayout, 'lotProgressBg' + IntToStr(i));
    tempProgressBg.Align = alTop;
    tempProgressBg.Height = 4;
    tempProgressBg.Margins.Top = 6;
    clComponent.SetupComponent(tempProgressBg, '{"BackgroundColor":"#1e3552", "RoundHeight":2, "RoundWidth":2}');
    
    tempProgressFg = MyForm.AddNewProPanel(tempProgressBg, 'lotProgressFg' + IntToStr(i));
    tempProgressFg.Align = alLeft;
    tempProgressFg.Width = Round(lotsQuery.FieldByName('progress').AsInteger * 1.5); // scaled width
    if (lotsQuery.FieldByName('status').AsString == 'production')
    {
      clComponent.SetupComponent(tempProgressFg, '{"BackgroundColor":"#60a5fa", "RoundHeight":2, "RoundWidth":2}');
    }
    else if (lotsQuery.FieldByName('status').AsString == 'depot')
    {
      clComponent.SetupComponent(tempProgressFg, '{"BackgroundColor":"#4ade80", "RoundHeight":2, "RoundWidth":2}');
    }
    else
    {
      clComponent.SetupComponent(tempProgressFg, '{"BackgroundColor":"#fbbf24", "RoundHeight":2, "RoundWidth":2}');
    }
    
    // Qty block
    tempLayout = MyForm.AddNewLayout(tempPanel, 'lotQtyLayout' + IntToStr(i));
    tempLayout.Align = alRight;
    tempLayout.Width = 80;
    tempLayout.Margins.Right = 10;
    tempLayout.Margins.Top = 12;
    
    tempLabel = MyForm.AddNewProLabel(tempLayout, 'lotLblQty' + IntToStr(i), lotsQuery.FieldByName('qty').AsString);
    tempLabel.Align = alTop;
    tempLabel.clProSettings.FontSize  = 13;
    tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
    //tempLabel.TextSettings.StyledSettings = ssFamily;
    
    tempLabel2 = MyForm.AddNewProLabel(tempLayout, 'lotLblUnit' + IntToStr(i), lotsQuery.FieldByName('unit').AsString);
    tempLabel2.Align = alTop;
    tempLabel2.clProSettings.FontSize  = 9;
    tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
    //tempLabel2.TextSettings.StyledSettings = ssFamily;
    tempLabel2.Margins.Top = 2;
    
    i = i + 1;
    lotsQuery.Next;
  }
  
  // Header section for Invoices
  tempLabel = MyForm.AddNewProLabel(prodScrollBox, 'lblInvoicesHeader', 'Factures');
  tempLabel.Align = alTop;
  tempLabel.Margins.Left = 12;
  tempLabel.Margins.Top = 15;
  tempLabel.Margins.Bottom = 8;
  tempLabel.clProSettings.FontSize  = 11;
  tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //tempLabel.TextSettings.StyledSettings = ssFamily;
  
  // Dynamically load Invoices list
  invoicesQuery.First;
  i = 0;
  while (not invoicesQuery.Eof)
  {
    tempPanel = MyForm.AddNewProPanel(prodScrollBox, 'invCard' + IntToStr(i));
    tempPanel.Align = alTop;
    tempPanel.Height = 70;
    tempPanel.Margins.Left = 10;
    tempPanel.Margins.Right = 10;
    tempPanel.Margins.Bottom = 8;
    tempPanel.ClTagInt = i;
    clComponent.SetupComponent(tempPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":12, "RoundWidth":12, "BorderColor":"#1a2d42", "BorderWidth":1}');
    MyForm.AddNewEvent(tempPanel, tbeOnClick, 'OpenInvoiceDetail');
    
    // Details block
    tempLayout = MyForm.AddNewLayout(tempPanel, 'invTextLayout' + IntToStr(i));
    tempLayout.Align = alClient;
    tempLayout.Margins.Left = 15;
    tempLayout.Margins.Top = 12;
    
    tempLabel = MyForm.AddNewProLabel(tempLayout, 'invLblId' + IntToStr(i), invoicesQuery.FieldByName('id').AsString + ' · ' + invoicesQuery.FieldByName('client').AsString);
    tempLabel.Align = alTop;
    tempLabel.clProSettings.FontSize  = 12;
    tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
    //tempLabel.TextSettings.StyledSettings = ssFamily;
    
    tempLabel2 = MyForm.AddNewProLabel(tempLayout, 'invLblSub' + IntToStr(i), 'Émise le ' + invoicesQuery.FieldByName('date').AsString + ' · Échéance ' + invoicesQuery.FieldByName('due').AsString);
    tempLabel2.Align = alTop;
    tempLabel2.clProSettings.FontSize  = 10;
    tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
    //tempLabel2.TextSettings.StyledSettings = ssFamily;
    tempLabel2.Margins.Top = 3;
    
    // Amount block
    tempLayout = MyForm.AddNewLayout(tempPanel, 'invAmountLayout' + IntToStr(i));
    tempLayout.Align = alRight;
    tempLayout.Width = 100;
    tempLayout.Margins.Right = 10;
    tempLayout.Margins.Top = 12;
    
    tempLabel = MyForm.AddNewProLabel(tempLayout, 'invLblAmount' + IntToStr(i), invoicesQuery.FieldByName('amount').AsString + ' ' + invoicesQuery.FieldByName('currency').AsString);
    tempLabel.Align = alTop;
    tempLabel.clProSettings.FontSize  = 13;
    tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
    //tempLabel.TextSettings.StyledSettings = ssFamily;
    
    tempLabel2 = MyForm.AddNewProLabel(tempLayout, 'invLblStatus' + IntToStr(i), invoicesQuery.FieldByName('status').AsString);
    tempLabel2.Align = alTop;
    tempLabel2.clProSettings.FontSize  = 9;
    if (invoicesQuery.FieldByName('status').AsString == 'payée')
    {
      tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4ade80');
    }
    else if (invoicesQuery.FieldByName('status').AsString == 'retard')
    {
      tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#fb923c');
    }
    else
    {
      tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#fbbf24');
    }
    //tempLabel2.TextSettings.StyledSettings = ssFamily;
    tempLabel2.Margins.Top = 2;
    
    i = i + 1;
    invoicesQuery.Next;
  }
  
  // Administrator actions for Production Screen
  prodActionsPanel = MyForm.AddNewProPanel(prodScrollBox, 'prodActionsPanel');
  prodActionsPanel.Align = alTop;
  prodActionsPanel.Height = 140;
  prodActionsPanel.Margins.Top = 15;
  prodActionsPanel.Margins.Left = 10;
  prodActionsPanel.Margins.Right = 10;
  
  tempLabel = MyForm.AddNewProLabel(prodActionsPanel, 'lblAdminTitle2', 'ACTIONS ADMINISTRATEUR');
  tempLabel.Align = alTop;
  tempLabel.clProSettings.FontSize  = 10;
  tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //tempLabel.TextSettings.StyledSettings = ssFamily;
  tempLabel.Margins.Bottom = 8;
  
  btnScanQr = MyForm.AddNewProButton(prodActionsPanel, 'btnCreateLot', 'Créer un nouveau lot');
  btnScanQr.Align = alTop;
  btnScanQr.Height = 44;
  btnScanQr.Margins.Bottom = 8;
  btnScanQr.Text = 'Créer un nouveau lot';
  clComponent.SetupComponent(btnScanQr, '{"BackgroundColor":"#00d4ff18", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff30", "BorderWidth":1}');
  MyForm.AddNewEvent(btnScanQr, tbeOnClick, 'ActionClick');
  // --- Bottom Tab Bar Panel ---
  tabBarPanel = MyForm.AddNewProPanel(MyForm, 'tabBarPanel');
  tabBarPanel.Align = alBottom;
  tabBarPanel.Height = 60;
  clComponent.SetupComponent(tabBarPanel, '{"BackgroundColor":"#07101c", "BorderColor":"#1a2d42", "BorderWidth":1}');
  
  btnTabMvt = MyForm.AddNewProButton(tabBarPanel, 'btnTabMvt', 'Stock');
  btnTabMvt.Align = alLeft;
  btnTabMvt.Width = 75;
  btnTabMvt.Caption = 'Stock';
  clComponent.SetupComponent(btnTabMvt, '{"BackgroundColor":"#07101c", "TextColor":"#00d4ff", "RoundHeight":0, "RoundWidth":0}');
  MyForm.AddNewEvent(btnTabMvt, tbeOnClick, 'TabClick');
  
  btnTabProd = MyForm.AddNewProButton(tabBarPanel, 'btnTabProd', 'Rapports');
  btnTabProd.Align = alLeft;
  btnTabProd.Width = 75;
  btnTabProd.Caption = 'Rapports';
  clComponent.SetupComponent(btnTabProd, '{"BackgroundColor":"#07101c", "TextColor":"#4a6580", "RoundHeight":0, "RoundWidth":0}');
  MyForm.AddNewEvent(btnTabProd, tbeOnClick, 'TabClick');
  // --- Detail Overlay Sheet (Modals) ---
  detailOverlay = MyForm.AddNewProPanel(MyForm, 'detailOverlay');
  detailOverlay.Align = alClient;
  detailOverlay.Visible = False;
  clComponent.SetupComponent(detailOverlay, '{"BackgroundColor":"#040810d0"}');
  
  // Dismiss overlay clicking the background
  MyForm.AddNewEvent(detailOverlay, tbeOnClick, 'CloseDetailOverlay');
  
  detailSheet = MyForm.AddNewProPanel(detailOverlay, 'detailSheet');
  detailSheet.Align = alBottom;
  detailSheet.Height = 280;
  clComponent.SetupComponent(detailSheet, '{"BackgroundColor":"#0c1828", "RoundHeight":20, "RoundWidth":20, "BorderColor":"#1a2d42", "BorderWidth":1}');
  
  // Sheet Header
  lblDetailTitle = MyForm.AddNewProLabel(detailSheet, 'lblDetailTitle', 'MV-081');
  lblDetailTitle.Align = alTop;
  lblDetailTitle.Margins.Left = 20;
  lblDetailTitle.Margins.Top = 20;
  lblDetailTitle.clProSettings.FontSize  = 18;
  lblDetailTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
  //lblDetailTitle.TextSettings.StyledSettings = ssFamily;
  
  lblDetailSubtitle = MyForm.AddNewProLabel(detailSheet, 'lblDetailSubtitle', 'Produit A · Bloc A');
  lblDetailSubtitle.Align = alTop;
  lblDetailSubtitle.Margins.Left = 20;
  lblDetailSubtitle.Margins.Top = 4;
  lblDetailSubtitle.clProSettings.FontSize  = 12;
  lblDetailSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //lblDetailSubtitle.TextSettings.StyledSettings = ssFamily;
  
  // Close Button
  btnCloseDetail = MyForm.AddNewProButton(detailSheet, 'btnCloseDetail', 'X');
  btnCloseDetail.Align = alNone;
  btnCloseDetail.Width = 30;
  btnCloseDetail.Height = 30;
  btnCloseDetail.Position.X = 320;
  btnCloseDetail.Position.Y = 16;
  clComponent.SetupComponent(btnCloseDetail, '{"BackgroundColor":"#0d1520", "TextColor":"#4a6580", "RoundHeight":6, "RoundWidth":6, "BorderColor":"#1a2d42", "BorderWidth":1}');
  MyForm.AddNewEvent(btnCloseDetail, tbeOnClick, 'CloseDetailOverlay');
  
  // Details Grid Layout
  pnlDetailGrid = MyForm.AddNewProPanel(detailSheet, 'pnlDetailGrid');
  pnlDetailGrid.Align = alTop;
  pnlDetailGrid.Height = 110;
  pnlDetailGrid.Margins.Top = 15;
  pnlDetailGrid.Margins.Left = 20;
  pnlDetailGrid.Margins.Right = 20;
  clComponent.SetupComponent(pnlDetailGrid, '{"BackgroundColor":"#0c1828"}');
  
  // Col 1 Row 1
  lblGridVal1 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridVal1', '50 kg');
  lblGridVal1.Align = alNone;
  lblGridVal1.Position.X = 10;
  lblGridVal1.Position.Y = 10;
  lblGridVal1.clProSettings.FontSize  = 13;
  lblGridVal1.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
  //lblGridVal1.TextSettings.StyledSettings = ssFamily;
  
  lblGridLbl1 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridLbl1', 'QUANTITÉ');
  lblGridLbl1.Align = alNone;
  lblGridLbl1.Position.X = 10;
  lblGridLbl1.Position.Y = 28;
  lblGridLbl1.clProSettings.FontSize  = 9;
  lblGridLbl1.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //lblGridLbl1.TextSettings.StyledSettings = ssFamily;
  
  // Col 2 Row 1
  lblGridVal2 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridVal2', 'LOT001');
  lblGridVal2.Align = alNone;
  lblGridVal2.Position.X = 170;
  lblGridVal2.Position.Y = 10;
  lblGridVal2.clProSettings.FontSize  = 13;
  lblGridVal2.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
  //lblGridVal2.TextSettings.StyledSettings = ssFamily;
  
  lblGridLbl2 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridLbl2', 'LOT');
  lblGridLbl2.Align = alNone;
  lblGridLbl2.Position.X = 170;
  lblGridLbl2.Position.Y = 28;
  lblGridLbl2.clProSettings.FontSize  = 9;
  lblGridLbl2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  ///lblGridLbl2.TextSettings.StyledSettings = ssFamily;
  
  // Col 1 Row 2
  lblGridVal3 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridVal3', '12/07 14:32');
  lblGridVal3.Align = alNone;
  lblGridVal3.Position.X = 10;
  lblGridVal3.Position.Y = 60;
  lblGridVal3.clProSettings.FontSize  = 13;
  lblGridVal3.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
  //lblGridVal3.TextSettings.StyledSettings = ssFamily;
  
  lblGridLbl3 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridLbl3', 'DATE / HEURE');
  lblGridLbl3.Align = alNone;
  lblGridLbl3.Position.X = 10;
  lblGridLbl3.Position.Y = 78;
  lblGridLbl3.clProSettings.FontSize  = 9;
  lblGridLbl3.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //lblGridLbl3.TextSettings.StyledSettings = ssFamily;
  
  // Col 2 Row 2
  lblGridVal4 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridVal4', 'Y. Kaya');
  lblGridVal4.Align = alNone;
  lblGridVal4.Position.X = 170;
  lblGridVal4.Position.Y = 60;
  lblGridVal4.clProSettings.FontSize  = 13;
  lblGridVal4.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');
  //lblGridVal4.TextSettings.StyledSettings = ssFamily;
  
  lblGridLbl4 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridLbl4', 'OPÉRATEUR');
  lblGridLbl4.Align = alNone;
  lblGridLbl4.Position.X = 170;
  lblGridLbl4.Position.Y = 78;
  lblGridLbl4.clProSettings.FontSize  = 9;
  lblGridLbl4.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');
  //lblGridLbl4.TextSettings.StyledSettings = ssFamily;
  
  // Detail Actions
  btnDetailAction1 = MyForm.AddNewProButton(detailSheet, 'btnDetailAction1', 'Voir le QR');
  btnDetailAction1.Align = alNone;
  btnDetailAction1.Width = 160;
  btnDetailAction1.Height = 44;
  btnDetailAction1.Position.X = 20;
  btnDetailAction1.Position.Y = 195;
  clComponent.SetupComponent(btnDetailAction1, '{"BackgroundColor":"#00d4ff18", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff30", "BorderWidth":1}');
  MyForm.AddNewEvent(btnDetailAction1, tbeOnClick, 'ActionClick');
  
  btnDetailAction2 = MyForm.AddNewProButton(detailSheet, 'btnDetailAction2', 'Annuler');
  btnDetailAction2.Align = alNone;
  btnDetailAction2.Width = 160;
  btnDetailAction2.Height = 44;
  btnDetailAction2.Position.X = 195;
  btnDetailAction2.Position.Y = 195;
  clComponent.SetupComponent(btnDetailAction2, '{"BackgroundColor":"#f9731618", "TextColor":"#fb923c", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#f9731630", "BorderWidth":1}');
  MyForm.AddNewEvent(btnDetailAction2, tbeOnClick, 'ActionClick');
  
  ShowMvtScreen;
  MyForm.Run;
}
https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon="{"version":"2024.11.0","token":"439455f3e46c40b98dbd42a2f1a954d8","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}" crossorigin="anonymous">
Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Kutu İzle

Forum Software by Web Wiz Forums® version 12.07
Copyright ©2001-2024 Web Wiz Ltd.

Bu Sayfa 0,047 Saniyede Yüklendi.