<?xml version="1.0" encoding="iso-8859-9" ?>
<?xml-stylesheet type="text/xsl" href="RSS_xslt_style.asp" version="1.0" ?>
<rss version="2.0" xmlns:WebWizForums="https://syndication.webwiz.net/rss_namespace/">
 <channel>
  <title>Clomosy | Forum : satir 105 veri tabaninda veriler dizi olarak almak</title>
  <link>https://forum.clomosy.com.tr/</link>
  <description><![CDATA[XML içerik linki; Clomosy | Forum : Genel &#304;&#351;lemler : satir 105 veri tabaninda veriler dizi olarak almak]]></description>
  <copyright>Copyright (c) 2006-2013 Web Wiz Forums - All Rights Reserved.</copyright>
  <pubDate>Thu, 23 Jul 2026 13:56:22 +0000</pubDate>
  <lastBuildDate>Thu, 23 Jul 2026 13:08:05 +0000</lastBuildDate>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Web Wiz Forums 12.07</generator>
  <ttl>30</ttl>
  <WebWizForums:feedURL>https://forum.clomosy.com.tr/RSS_post_feed.asp?TID=1629</WebWizForums:feedURL>
  <image>
   <title><![CDATA[Clomosy | Forum]]></title>
   <url>https://forum.clomosy.com.tr/forum_images/logo.png</url>
   <link>https://forum.clomosy.com.tr/</link>
  </image>
  <item>
   <title><![CDATA[satir 105 veri tabaninda veriler dizi olarak almak : Merhaba Barthez,var SecretaryForm:...]]></title>
   <link>https://forum.clomosy.com.tr/forum_posts.asp?TID=1629&amp;PID=3771#3771</link>
   <description>
    <![CDATA[<strong>Yazar:</strong> <a href="https://forum.clomosy.com.tr/member_profile.asp?PF=257">Emr.Erkmn</a><br /><strong>Konu:</strong> 1629<br /><strong>Gönderim Zamaný:</strong> 23&nbsp;Temmuz&nbsp;2026 Saat 13:08<br /><br />Merhaba Barthez,<br><br><div>var</div><div>&nbsp; SecretaryForm: TclForm;</div><div>&nbsp; mainLayout, headerLayout, switcherLayout: TclLayout;</div><div>&nbsp; scrollBody, pendingScrollBox, historyScrollBox, stockScrollBox: TclVertScrollBox;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Header</div><div>&nbsp; lblKicker, lblTitle: TclProLabel;</div><div>&nbsp; btnSwitchInvoice, btnSwitchStock: TclProButton;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Formulaire Facture</div><div>&nbsp; formInvoicePanel: TclProPanel;</div><div>&nbsp; lblFormTitle: TclProLabel;</div><div>&nbsp; edtClient, edtAddress, edtProductRef, edtQty, edtUnitPrice: TclProEdit;</div><div>&nbsp; btnSubmitInvoice, btnCancelEdit: TclProButton;</div><div>&nbsp; editingInvoiceId: Integer;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Liste Factures en attente</div><div>&nbsp; pendingPanel: TclProPanel;</div><div>&nbsp; lblPendingTitle: TclProLabel;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Liste Historique du jour (Validées / Annulées)</div><div>&nbsp; historyPanel: TclProPanel;</div><div>&nbsp; lblHistoryTitle: TclProLabel;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Vue Stock</div><div>&nbsp; stockPanel: TclProPanel;</div><div>&nbsp; lblStockTitle: TclProLabel;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // TabBar</div><div>&nbsp; tabBarPanel: TclProPanel;</div><div>&nbsp; btnTabInvoices, btnTabStockView, btnTabReports: TclProButton;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Navigation &amp; HTTP</div><div>&nbsp; Unitnavigate: TclUnit;</div><div>&nbsp; restApi: TclRest;</div><div>&nbsp; responseStr, pendingJson, historyJson: String;&nbsp;</div><div>&nbsp; rootObj: TclJsonObject;</div><div>&nbsp; pendingArr, historyArr: TclJsonQuery;&nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Temporaires</div><div>&nbsp; i: Integer;</div><div>&nbsp; tempCard, tempStatusIcon: TclProPanel;</div><div>&nbsp; tempLayout, tempActionsLayout: TclLayout;</div><div>&nbsp; tempLabel, tempLabel2: TclProLabel;</div><div>&nbsp; btnActionVal, btnActionEdit, btnActionDel: TclProButton;</div><div><br></div><div>// ============================================================</div><div>// BASCULE DE VUE (FACTURES vs STOCK)</div><div>// ============================================================</div><div>void ShowInvoiceSection;</div><div>{</div><div>&nbsp; formInvoicePanel.Visible = True;</div><div>&nbsp; pendingPanel.Visible = True;</div><div>&nbsp; historyPanel.Visible = True;</div><div>&nbsp; stockPanel.Visible = False;</div><div>&nbsp;&nbsp;</div><div>&nbsp; clComponent.SetupComponent(btnSwitchInvoice, '{"BackgroundColor":"#0d1520", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff40", "BorderWidth":1}');</div><div>&nbsp; clComponent.SetupComponent(btnSwitchStock, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div>&nbsp; clComponent.SetupComponent(btnTabInvoices, '{"BackgroundColor":"#07101c", "TextColor":"#00d4ff", "RoundHeight":0, "RoundWidth":0}');</div><div>&nbsp; clComponent.SetupComponent(btnTabStockView, '{"BackgroundColor":"#07101c", "TextColor":"#4a6580", "RoundHeight":0, "RoundWidth":0}');</div><div>}</div><div><br></div><div>void ShowStockSection;</div><div>{</div><div>&nbsp; formInvoicePanel.Visible = False;</div><div>&nbsp; pendingPanel.Visible = False;</div><div>&nbsp; historyPanel.Visible = False;</div><div>&nbsp; stockPanel.Visible = True;</div><div>&nbsp;&nbsp;</div><div>&nbsp; clComponent.SetupComponent(btnSwitchInvoice, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div>&nbsp; clComponent.SetupComponent(btnSwitchStock, '{"BackgroundColor":"#0d1520", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff40", "BorderWidth":1}');</div><div>&nbsp; clComponent.SetupComponent(btnTabInvoices, '{"BackgroundColor":"#07101c", "TextColor":"#4a6580", "RoundHeight":0, "RoundWidth":0}');</div><div>&nbsp; clComponent.SetupComponent(btnTabStockView, '{"BackgroundColor":"#07101c", "TextColor":"#00d4ff", "RoundHeight":0, "RoundWidth":0}');</div><div>}</div><div><br></div><div>// ============================================================</div><div>// CHARGEMENT ET RAFRAÎCHISSEMENT DYNAMIQUE DES FACTURES</div><div>// ============================================================</div><div>void LoadInvoicesData;</div><div>{</div><div>&nbsp; restApi = TclRest.Create;</div><div>&nbsp; try</div><div>&nbsp; &nbsp; restApi.BaseURL = '<a href="http://192.168.25.6/clomosyProject/Api/invoices.php?acti&#111;n=get_invoices" target="_blank" rel="nofollow">http://192.168.25.6/clomosyProject/Api/invoices.php?action=get_invoices</a>';</div><div>&nbsp; &nbsp; restApi.Method = rmGET;</div><div>&nbsp; &nbsp; restApi.Accept = 'application/json';</div><div>&nbsp; &nbsp; restApi.ConnectTimeOut = 10000;</div><div>&nbsp; &nbsp; restApi.Execute;</div><div><br></div><div>&nbsp; &nbsp; responseStr = restApi.Response;</div><div><br></div><div>&nbsp; &nbsp; if ((responseStr &lt;&gt; '') &amp;&amp; (Copy(responseStr, 1, 1) == '{'))&nbsp;</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; rootObj = TCLJSON.ParseToJSONObject(responseStr);</div><div><br></div><div>&nbsp; &nbsp; &nbsp; // HasKey kullanarak 'success' anahtarýnýn varlýðýný kontrol ediyoruz</div><div>&nbsp; &nbsp; &nbsp; if ((rootObj &lt;&gt; nil) &amp;&amp; (rootObj.HasKey('success')))&nbsp;</div><div>&nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (rootObj.GetValue('success').AsBoolean)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // --- 1. FACTURES EN ATTENTE ---</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pendingArr = nil;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // HasKey ile 'pending' anahtarýnýn varlýðýný güvenle kontrol ediyoruz</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (rootObj.HasKey('pending'))</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pendingJson = rootObj.GetValue('pending').ToString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((pendingJson &lt;&gt; '') &amp;&amp; (pendingJson &lt;&gt; '&#091;&#093;') &amp;&amp; (pendingJson &lt;&gt; 'null'))</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pendingArr = Clomosy.ClDataSetFromJSON(pendingJson);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (pendingArr &lt;&gt; nil)&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pendingArr.First;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while (not pendingArr.Eof)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempCard = SecretaryForm.AddNewProPanel(pendingScrollBox, 'pCard_ID_' + pendingArr.FieldByName('id').AsString);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempCard.Align = alTop;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempCard.Height = 75;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempCard.Margins.Bottom = 8;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clComponent.SetupComponent(tempCard, '{"BackgroundColor":"#080d14", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLayout = SecretaryForm.AddNewLayout(tempCard, 'pTxt_ID_' + pendingArr.FieldByName('id').AsString);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLayout.Align = alClient;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLayout.Margins.Left = 10;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLayout.Margins.Top = 8;</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel = SecretaryForm.AddNewProLabel(tempLayout, 'pLblTitle_ID_' + pendingArr.FieldByName('id').AsString, pendingArr.FieldByName('invoice_number').AsString + ' · ' + pendingArr.FieldByName('client_name').AsString);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.Align = alTop;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.clProSettings.FontSize = 12;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.SetclProSettings(tempLabel.clProSettings);</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2 = SecretaryForm.AddNewProLabel(tempLayout, 'pLblSub_ID_' + pendingArr.FieldByName('id').AsString, pendingArr.FieldByName('product_ref').AsString + ' (' + pendingArr.FieldByName('quantity').AsString + ' pcs) - Total: ' + pendingArr.FieldByName('total_amount').AsString + ' DA');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.Align = alTop;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.clProSettings.FontSize = 10;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.Margins.Top = 4;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.SetclProSettings(tempLabel2.clProSettings);</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempActionsLayout = SecretaryForm.AddNewLayout(tempCard, 'pAct_ID_' + pendingArr.FieldByName('id').AsString);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempActionsLayout.Align = alRight;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempActionsLayout.Width = 110;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempActionsLayout.Margins.Right = 6;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempActionsLayout.Margins.Top = 12;</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionVal = SecretaryForm.AddNewProButton(tempActionsLayout, 'btnVal_' + pendingArr.FieldByName('id').AsString, '&#10003;');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionVal.Align = alLeft; btnActionVal.Width = 32; btnActionVal.Height = 32;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionVal.Hint = pendingArr.FieldByName('id').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clComponent.SetupComponent(btnActionVal, '{"BackgroundColor":"#22c55e20", "TextColor":"#22c55e", "RoundHeight":6, "RoundWidth":6, "BorderColor":"#22c55e50", "BorderWidth":1}');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SecretaryForm.AddNewEvent(btnActionVal, tbeOnClick, 'OnValidateInvoice');</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionEdit = SecretaryForm.AddNewProButton(tempActionsLayout, 'btnEdit_' + pendingArr.FieldByName('id').AsString, '&#9999;&#65039;');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionEdit.Align = alLeft; btnActionEdit.Width = 32; btnActionEdit.Height = 32; btnActionEdit.Margins.Left = 4;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionEdit.Hint = pendingArr.FieldByName('id').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clComponent.SetupComponent(btnActionEdit, '{"BackgroundColor":"#00d4ff20", "TextColor":"#00d4ff", "RoundHeight":6, "RoundWidth":6, "BorderColor":"#00d4ff50", "BorderWidth":1}');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SecretaryForm.AddNewEvent(btnActionEdit, tbeOnClick, 'OnEditInvoice');</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionDel = SecretaryForm.AddNewProButton(tempActionsLayout, 'btnDel_' + pendingArr.FieldByName('id').AsString, '&#128465;&#65039;');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionDel.Align = alLeft; btnActionDel.Width = 32; btnActionDel.Height = 32; btnActionDel.Margins.Left = 4;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionDel.Hint = pendingArr.FieldByName('id').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clComponent.SetupComponent(btnActionDel, '{"BackgroundColor":"#f8717120", "TextColor":"#f87171", "RoundHeight":6, "RoundWidth":6, "BorderColor":"#f8717150", "BorderWidth":1}');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SecretaryForm.AddNewEvent(btnActionDel, tbeOnClick, 'OnCancelInvoice');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pendingArr.Next;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // --- 2. HISTORIQUE DU JOUR ---</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; historyArr = nil;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // HasKey ile 'history' anahtarýnýn varlýðýný güvenle kontrol ediyoruz</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (rootObj.HasKey('history'))</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; historyJson = rootObj.GetValue('history').ToString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((historyJson &lt;&gt; '') &amp;&amp; (historyJson &lt;&gt; '&#091;&#093;') &amp;&amp; (historyJson &lt;&gt; 'null'))</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; historyArr = Clomosy.ClDataSetFromJSON(historyJson);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (historyArr &lt;&gt; nil)&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; historyArr.First;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while (not historyArr.Eof)&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempCard = SecretaryForm.AddNewProPanel(historyScrollBox, 'hCard_ID_' + historyArr.FieldByName('id').AsString);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempCard.Align = alTop; tempCard.Height = 58; tempCard.Margins.Bottom = 6;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clComponent.SetupComponent(tempCard, '{"BackgroundColor":"#080d14", "RoundHeight":8, "RoundWidth":8, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLayout = SecretaryForm.AddNewLayout(tempCard, 'hTxt_ID_' + historyArr.FieldByName('id').AsString);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLayout.Align = alClient; tempLayout.Margins.Left = 10; tempLayout.Margins.Top = 6;</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel = SecretaryForm.AddNewProLabel(tempLayout, 'hLblTitle_ID_' + historyArr.FieldByName('id').AsString, historyArr.FieldByName('invoice_number').AsString + ' · ' + historyArr.FieldByName('client_name').AsString);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 11;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.SetclProSettings(tempLabel.clProSettings);</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2 = SecretaryForm.AddNewProLabel(tempLayout, 'hLblSub_ID_' + historyArr.FieldByName('id').AsString, historyArr.FieldByName('total_amount').AsString + ' DA · Status: ' + historyArr.FieldByName('status').AsString);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.Align = alTop; tempLabel2.clProSettings.FontSize = 9;</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (historyArr.FieldByName('status').AsString == 'validee')&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4ade80')</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#f87171');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.Margins.Top = 2; tempLabel2.SetclProSettings(tempLabel2.clProSettings);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; historyArr.Next;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; }</div><div>&nbsp; finally</div><div>&nbsp; &nbsp; restApi.Free;</div><div>&nbsp; }</div><div>}</div><div><br></div><div>// ============================================================</div><div>// CRÉATION OU MODIFICATION D'UNE FACTURE</div><div>// ============================================================</div><div>void SubmitInvoice;</div><div>var</div><div>&nbsp; payloadJson: String;</div><div>{</div><div>&nbsp; if ((edtClient.Text == '') || (edtProductRef.Text == '') || (edtQty.Text == '') || (edtUnitPrice.Text == ''))&nbsp;</div><div>&nbsp; {</div><div>&nbsp; &nbsp; ShowMessage('&#9888;&#65039; Veuillez remplir tous les champs obligatoires.');</div><div>&nbsp; &nbsp; Exit;</div><div>&nbsp; }</div><div><br></div><div>&nbsp; payloadJson = '{"id":' + IntToStr(editingInvoiceId) + ',' +</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'"client":"' + edtClient.Text + '",' +</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'"address":"' + edtAddress.Text + '",' +</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'"product_ref":"' + edtProductRef.Text + '",' +</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'"qty":' + edtQty.Text + ',' +</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'"unit_price":' + edtUnitPrice.Text + '}';</div><div><br></div><div>&nbsp; restApi = TclRest.Create;</div><div>&nbsp; try</div><div>&nbsp; &nbsp; restApi.BaseURL = '<a href="http://192.168.25.6/clomosyProject/Api/invoices.php?acti&#111;n=save_invoice" target="_blank" rel="nofollow">http://192.168.25.6/clomosyProject/Api/invoices.php?action=save_invoice</a>';</div><div>&nbsp; &nbsp; restApi.Method = rmPOST;</div><div>&nbsp; &nbsp; restApi.Accept = 'application/json';</div><div>&nbsp; &nbsp; restApi.AddBody(payloadJson, 'application/json');</div><div>&nbsp; &nbsp; restApi.Execute;</div><div><br></div><div>&nbsp; &nbsp; responseStr = restApi.Response;</div><div>&nbsp; &nbsp; ShowMessage('&#128236; Réponse du serveur :' + #13#10 + responseStr);</div><div>&nbsp; finally</div><div>&nbsp; &nbsp; restApi.Free;</div><div>&nbsp; }</div><div>}</div><div><br></div><div>// ============================================================</div><div>// ÉDITION, CANCELLATION ET VALIDATION</div><div>// ============================================================</div><div>void OnEditInvoice;</div><div>var</div><div>&nbsp; btnSenderEdit: TclProButton;</div><div>&nbsp; invIdStr: String;</div><div>{</div><div>&nbsp; btnSenderEdit = TclProButton(SecretaryForm.ClSender);</div><div>&nbsp; invIdStr = btnSenderEdit.Hint;</div><div><br></div><div>&nbsp; if (pendingArr &lt;&gt; nil)&nbsp;</div><div>&nbsp; {</div><div>&nbsp; &nbsp; pendingArr.First;</div><div>&nbsp; &nbsp; while (not pendingArr.Eof)&nbsp;</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; if (pendingArr.FieldByName('id').AsString == invIdStr)&nbsp;</div><div>&nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; editingInvoiceId = pendingArr.FieldByName('id').AsInteger;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; edtClient.Text = pendingArr.FieldByName('client_name').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; edtAddress.Text = pendingArr.FieldByName('delivery_address').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; edtProductRef.Text = pendingArr.FieldByName('product_ref').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; edtQty.Text = pendingArr.FieldByName('quantity').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; edtUnitPrice.Text = pendingArr.FieldByName('unit_price').AsString;</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; btnSubmitInvoice.Caption = 'Mettre à jour';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; btnCancelEdit.Visible = True;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; ShowMessage('&#128161; Données chargées. Modifiez puis cliquez sur Mettre à jour.');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; Exit;</div><div>&nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; pendingArr.Next;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; }</div><div>}</div><div><br></div><div>void CancelEdit;</div><div>{</div><div>&nbsp; edtClient.Text = ''; edtAddress.Text = ''; edtProductRef.Text = ''; edtQty.Text = ''; edtUnitPrice.Text = '';</div><div>&nbsp; editingInvoiceId = 0;</div><div>&nbsp; btnSubmitInvoice.Caption = 'Émettre la Facture';</div><div>&nbsp; btnCancelEdit.Visible = False;</div><div>}</div><div><br></div><div>void OnValidateInvoice;</div><div>var</div><div>&nbsp; btnSenderVal: TclProButton;</div><div>&nbsp; invIdStr: String;</div><div>{</div><div>&nbsp; btnSenderVal = TclProButton(SecretaryForm.ClSender);</div><div>&nbsp; invIdStr = btnSenderVal.Hint;</div><div><br></div><div>&nbsp; restApi = TclRest.Create;</div><div>&nbsp; try</div><div>&nbsp; &nbsp; restApi.BaseURL = '<a href="http://192.168.25.6/clomosyProject/Api/invoices.php?acti&#111;n=validate_invoice" target="_blank" rel="nofollow">http://192.168.25.6/clomosyProject/Api/invoices.php?action=validate_invoice</a>';</div><div>&nbsp; &nbsp; restApi.Method = rmPOST;</div><div>&nbsp; &nbsp; restApi.Accept = 'application/json';</div><div>&nbsp; &nbsp; restApi.AddBody('{"id":' + invIdStr + '}', 'application/json');</div><div>&nbsp; &nbsp; restApi.Execute;</div><div><br></div><div>&nbsp; &nbsp; responseStr = restApi.Response;</div><div>&nbsp; &nbsp; if (responseStr &lt;&gt; '')&nbsp;</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; ShowMessage('&#128196; Reçu / PDF de Facturation généré avec succès !');</div><div>&nbsp; &nbsp; &nbsp; LoadInvoicesData;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; finally</div><div>&nbsp; &nbsp; restApi.Free;</div><div>&nbsp; }</div><div>}</div><div><br></div><div>void OnCancelInvoice;</div><div>var</div><div>&nbsp; btnSenderCancel: TclProButton;</div><div>&nbsp; invIdStr: String;</div><div>{</div><div>&nbsp; btnSenderCancel = TclProButton(SecretaryForm.ClSender);</div><div>&nbsp; invIdStr = btnSenderCancel.Hint;</div><div><br></div><div>&nbsp; restApi = TclRest.Create;</div><div>&nbsp; try</div><div>&nbsp; &nbsp; restApi.BaseURL = '<a href="http://192.168.25.6/clomosyProject/Api/invoices.php?acti&#111;n=cancel_invoice" target="_blank" rel="nofollow">http://192.168.25.6/clomosyProject/Api/invoices.php?action=cancel_invoice</a>';</div><div>&nbsp; &nbsp; restApi.Method = rmPOST;</div><div>&nbsp; &nbsp; restApi.Accept = 'application/json';</div><div>&nbsp; &nbsp; restApi.AddBody('{"id":' + invIdStr + '}', 'application/json');</div><div>&nbsp; &nbsp; restApi.Execute;</div><div><br></div><div>&nbsp; &nbsp; LoadInvoicesData;</div><div>&nbsp; finally</div><div>&nbsp; &nbsp; restApi.Free;</div><div>&nbsp; }</div><div>}</div><div><br></div><div>void GoReportView;</div><div>{</div><div>&nbsp; Unitnavigate.UnitName = 'Gestion_stock_report';</div><div>&nbsp; Unitnavigate.CallerForm = SecretaryForm;</div><div>&nbsp; Unitnavigate.Run;</div><div>}</div><div><br></div><div>// ============================================================</div><div>// INITIALISATION DU FORMULAIRE</div><div>// ============================================================</div><div>{</div><div>&nbsp; SecretaryForm = TclForm.Create(Self);</div><div>&nbsp; SecretaryForm.SetFormColor('#080d14', '#0d1520', clGVertical);</div><div><br></div><div>&nbsp; Unitnavigate = TclUnit.Create;</div><div>&nbsp; editingInvoiceId = 0;</div><div><br></div><div>&nbsp; if (not Clomosy.PlatformIsMobile) {</div><div>&nbsp; &nbsp; SecretaryForm.clSetWindowState(fwsMaximized);</div><div>&nbsp; }</div><div><br></div><div>&nbsp; // TAB BAR INFÉRIEURE</div><div>&nbsp; tabBarPanel = SecretaryForm.AddNewProPanel(SecretaryForm, 'tabBarPanel');</div><div>&nbsp; tabBarPanel.Align = alBottom;&nbsp;</div><div>&nbsp; tabBarPanel.Height = 58;</div><div>&nbsp; clComponent.SetupComponent(tabBarPanel, '{"BackgroundColor":"#07101c", "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div><br></div><div>&nbsp; btnTabInvoices = SecretaryForm.AddNewProButton(tabBarPanel, 'btnTabInvoices', 'Factures');</div><div>&nbsp; btnTabInvoices.Align = alLeft;&nbsp;</div><div>&nbsp; btnTabInvoices.Width = 120;</div><div>&nbsp; clComponent.SetupComponent(btnTabInvoices, '{"BackgroundColor":"#07101c", "TextColor":"#00d4ff", "RoundHeight":0, "RoundWidth":0}');</div><div>&nbsp; SecretaryForm.AddNewEvent(btnTabInvoices, tbeOnClick, 'ShowInvoiceSection');</div><div><br></div><div>&nbsp; btnTabStockView = SecretaryForm.AddNewProButton(tabBarPanel, 'btnTabStockView', 'Stock');</div><div>&nbsp; btnTabStockView.Align = alLeft;&nbsp;</div><div>&nbsp; btnTabStockView.Width = 120;</div><div>&nbsp; clComponent.SetupComponent(btnTabStockView, '{"BackgroundColor":"#07101c", "TextColor":"#4a6580", "RoundHeight":0, "RoundWidth":0}');</div><div>&nbsp; SecretaryForm.AddNewEvent(btnTabStockView, tbeOnClick, 'ShowStockSection');</div><div><br></div><div>&nbsp; btnTabReports = SecretaryForm.AddNewProButton(tabBarPanel, 'btnTabReports', 'Rapport KPI');</div><div>&nbsp; btnTabReports.Align = alClient;</div><div>&nbsp; clComponent.SetupComponent(btnTabReports, '{"BackgroundColor":"#07101c", "TextColor":"#4a6580", "RoundHeight":0, "RoundWidth":0}');</div><div>&nbsp; SecretaryForm.AddNewEvent(btnTabReports, tbeOnClick, 'GoReportView');</div><div><br></div><div>&nbsp; // LAYOUT PRINCIPAL</div><div>&nbsp; mainLayout = SecretaryForm.AddNewLayout(SecretaryForm, 'mainLayout');</div><div>&nbsp; mainLayout.Align = alClient;</div><div><br></div><div>&nbsp; // HEADER</div><div>&nbsp; headerLayout = SecretaryForm.AddNewLayout(mainLayout, 'headerLayout');</div><div>&nbsp; headerLayout.Align = alTop;&nbsp;</div><div>&nbsp; headerLayout.Height = 60;&nbsp;</div><div>&nbsp; headerLayout.Margins.Left = 16;&nbsp;</div><div>&nbsp; headerLayout.Margins.Right = 16;</div><div>&nbsp; headerLayout.Margins.Top = 10;</div><div><br></div><div>&nbsp; lblKicker = SecretaryForm.AddNewProLabel(headerLayout, 'lblKicker', 'ESPACE SECRÉTARIAT &amp; COMMANDE');</div><div>&nbsp; lblKicker.Align = alTop;&nbsp;</div><div>&nbsp; lblKicker.Height = 14;</div><div>&nbsp; lblKicker.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff');</div><div>&nbsp; lblKicker.clProSettings.FontSize = 10;</div><div>&nbsp; lblKicker.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; lblKicker.SetclProSettings(lblKicker.clProSettings);</div><div><br></div><div>&nbsp; lblTitle = SecretaryForm.AddNewProLabel(headerLayout, 'lblTitle', 'Facturation &amp; Commandes');</div><div>&nbsp; lblTitle.Align = alTop;&nbsp;</div><div>&nbsp; lblTitle.Height = 32;</div><div>&nbsp; lblTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');</div><div>&nbsp; lblTitle.clProSettings.FontSize = 22;</div><div>&nbsp; lblTitle.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; lblTitle.SetclProSettings(lblTitle.clProSettings);</div><div><br></div><div>&nbsp; // SWITCHER DE SECTION</div><div>&nbsp; switcherLayout = SecretaryForm.AddNewLayout(mainLayout, 'switcherLayout');</div><div>&nbsp; switcherLayout.Align = alTop;&nbsp;</div><div>&nbsp; switcherLayout.Height = 40;&nbsp;</div><div>&nbsp; switcherLayout.Margins.Left = 16;&nbsp;</div><div>&nbsp; switcherLayout.Margins.Right = 16;&nbsp;</div><div>&nbsp; switcherLayout.Margins.Bottom = 10;</div><div><br></div><div>&nbsp; btnSwitchInvoice = SecretaryForm.AddNewProButton(switcherLayout, 'btnSwitchInvoice', '&#128196; Créer Factures');</div><div>&nbsp; btnSwitchInvoice.Align = alLeft;&nbsp;</div><div>&nbsp; btnSwitchInvoice.Width = 160;</div><div>&nbsp; clComponent.SetupComponent(btnSwitchInvoice, '{"BackgroundColor":"#0d1520", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff40", "BorderWidth":1}');</div><div>&nbsp; SecretaryForm.AddNewEvent(btnSwitchInvoice, tbeOnClick, 'ShowInvoiceSection');</div><div><br></div><div>&nbsp; btnSwitchStock = SecretaryForm.AddNewProButton(switcherLayout, 'btnSwitchStock', '&#128230; Vérifier Stock');</div><div>&nbsp; btnSwitchStock.Align = alRight;&nbsp;</div><div>&nbsp; btnSwitchStock.Width = 160;</div><div>&nbsp; clComponent.SetupComponent(btnSwitchStock, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div>&nbsp; SecretaryForm.AddNewEvent(btnSwitchStock, tbeOnClick, 'ShowStockSection');</div><div><br></div><div>&nbsp; scrollBody = SecretaryForm.AddNewVertScrollBox(mainLayout, 'scrollBody');</div><div>&nbsp; scrollBody.Align = alClient;&nbsp;</div><div>&nbsp; scrollBody.Margins.Left = 16;&nbsp;</div><div>&nbsp; scrollBody.Margins.Right = 16;</div><div><br></div><div>&nbsp; // 1. FORMULAIRE DE CRÉATION</div><div>&nbsp; formInvoicePanel = SecretaryForm.AddNewProPanel(scrollBody, 'formInvoicePanel');</div><div>&nbsp; formInvoicePanel.Align = alTop;&nbsp;</div><div>&nbsp; formInvoicePanel.Height = 345;&nbsp;</div><div>&nbsp; formInvoicePanel.Margins.Bottom = 16;</div><div>&nbsp; clComponent.SetupComponent(formInvoicePanel, '{"BackgroundColor":"#0d1520", "RoundHeight":16, "RoundWidth":16, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div><br></div><div>&nbsp; lblFormTitle = SecretaryForm.AddNewProLabel(formInvoicePanel, 'lblFormTitle', '&#128196; ÉMETTRE UNE FACTURE');</div><div>&nbsp; lblFormTitle.Align = alTop;&nbsp;</div><div>&nbsp; lblFormTitle.Height = 28;&nbsp;</div><div>&nbsp; lblFormTitle.Margins.Left = 14;&nbsp;</div><div>&nbsp; lblFormTitle.Margins.Top = 8;</div><div>&nbsp; lblFormTitle.clProSettings.FontSize = 11;&nbsp;</div><div>&nbsp; lblFormTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff');</div><div>&nbsp; lblFormTitle.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; lblFormTitle.SetclProSettings(lblFormTitle.clProSettings);</div><div><br></div><div>&nbsp; edtClient = SecretaryForm.AddNewProEdit(formInvoicePanel, 'edtClient', 'Nom du client...');</div><div>&nbsp; edtClient.Align = alTop;&nbsp;</div><div>&nbsp; edtClient.Height = 38;&nbsp;</div><div>&nbsp; edtClient.Margins.Left = 14;&nbsp;</div><div>&nbsp; edtClient.Margins.Right = 14;&nbsp;</div><div>&nbsp; edtClient.Margins.Top = 4;</div><div>&nbsp; clComponent.SetupComponent(edtClient, '{"BackgroundColor":"#080d14", "TextColor":"#e2eaf5", "RoundHeight":8, "RoundWidth":8, "BorderColor":"#1e3552", "BorderWidth":1}');</div><div><br></div><div>&nbsp; edtAddress = SecretaryForm.AddNewProEdit(formInvoicePanel, 'edtAddress', 'Adresse de livraison...');</div><div>&nbsp; edtAddress.Align = alTop;&nbsp;</div><div>&nbsp; edtAddress.Height = 38;&nbsp;</div><div>&nbsp; edtAddress.Margins.Left = 14;&nbsp;</div><div>&nbsp; edtAddress.Margins.Right = 14;&nbsp;</div><div>&nbsp; edtAddress.Margins.Top = 6;</div><div>&nbsp; clComponent.SetupComponent(edtAddress, '{"BackgroundColor":"#080d14", "TextColor":"#e2eaf5", "RoundHeight":8, "RoundWidth":8, "BorderColor":"#1e3552", "BorderWidth":1}');</div><div><br></div><div>&nbsp; edtProductRef = SecretaryForm.AddNewProEdit(formInvoicePanel, 'edtProductRef', 'Référence produit...');</div><div>&nbsp; edtProductRef.Align = alTop;&nbsp;</div><div>&nbsp; edtProductRef.Height = 38;&nbsp;</div><div>&nbsp; edtProductRef.Margins.Left = 14;&nbsp;</div><div>&nbsp; edtProductRef.Margins.Right = 14;&nbsp;</div><div>&nbsp; edtProductRef.Margins.Top = 6;</div><div>&nbsp; clComponent.SetupComponent(edtProductRef, '{"BackgroundColor":"#080d14", "TextColor":"#e2eaf5", "RoundHeight":8, "RoundWidth":8, "BorderColor":"#1e3552", "BorderWidth":1}');</div><div><br></div><div>&nbsp; tempLayout = SecretaryForm.AddNewLayout(formInvoicePanel, 'rowQtyPrice');</div><div>&nbsp; tempLayout.Align = alTop;&nbsp;</div><div>&nbsp; tempLayout.Height = 38;&nbsp;</div><div>&nbsp; tempLayout.Margins.Left = 14;&nbsp;</div><div>&nbsp; tempLayout.Margins.Right = 14;&nbsp;</div><div>&nbsp; tempLayout.Margins.Top = 6;</div><div><br></div><div>&nbsp; edtQty = SecretaryForm.AddNewProEdit(tempLayout, 'edtQty', 'Qté');</div><div>&nbsp; edtQty.Align = alLeft;&nbsp;</div><div>&nbsp; edtQty.Width = 140;</div><div>&nbsp; clComponent.SetupComponent(edtQty, '{"BackgroundColor":"#080d14", "TextColor":"#e2eaf5", "RoundHeight":8, "RoundWidth":8, "BorderColor":"#1e3552", "BorderWidth":1}');</div><div><br></div><div>&nbsp; edtUnitPrice = SecretaryForm.AddNewProEdit(tempLayout, 'edtUnitPrice', 'Prix Unitaire (DA)');</div><div>&nbsp; edtUnitPrice.Align = alRight;&nbsp;</div><div>&nbsp; edtUnitPrice.Width = 150;</div><div>&nbsp; clComponent.SetupComponent(edtUnitPrice, '{"BackgroundColor":"#080d14", "TextColor":"#e2eaf5", "RoundHeight":8, "RoundWidth":8, "BorderColor":"#1e3552", "BorderWidth":1}');</div><div><br></div><div>&nbsp; btnSubmitInvoice = SecretaryForm.AddNewProButton(formInvoicePanel, 'btnSubmitInvoice', 'Émettre la Facture');</div><div>&nbsp; btnSubmitInvoice.Align = alTop;&nbsp;</div><div>&nbsp; btnSubmitInvoice.Height = 40;&nbsp;</div><div>&nbsp; btnSubmitInvoice.Margins.Left = 14;&nbsp;</div><div>&nbsp; btnSubmitInvoice.Margins.Right = 14;&nbsp;</div><div>&nbsp; btnSubmitInvoice.Margins.Top = 10;</div><div>&nbsp; clComponent.SetupComponent(btnSubmitInvoice, '{"BackgroundColor":"#00d4ff18", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff40", "BorderWidth":1}');</div><div>&nbsp; SecretaryForm.AddNewEvent(btnSubmitInvoice, tbeOnClick, 'SubmitInvoice');</div><div><br></div><div>&nbsp; btnCancelEdit = SecretaryForm.AddNewProButton(formInvoicePanel, 'btnCancelEdit', 'Annuler Modification');</div><div>&nbsp; btnCancelEdit.Align = alTop;&nbsp;</div><div>&nbsp; btnCancelEdit.Height = 30;&nbsp;</div><div>&nbsp; btnCancelEdit.Margins.Left = 14;&nbsp;</div><div>&nbsp; btnCancelEdit.Margins.Right = 14;&nbsp;</div><div>&nbsp; btnCancelEdit.Margins.Top = 6;</div><div>&nbsp; btnCancelEdit.Visible = False;</div><div>&nbsp; clComponent.SetupComponent(btnCancelEdit, '{"BackgroundColor":"#f8717118", "TextColor":"#f87171", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#f8717140", "BorderWidth":1}');</div><div>&nbsp; SecretaryForm.AddNewEvent(btnCancelEdit, tbeOnClick, 'CancelEdit');</div><div><br></div><div>&nbsp; // 2. FACTURES EN ATTENTE</div><div>&nbsp; pendingPanel = SecretaryForm.AddNewProPanel(scrollBody, 'pendingPanel');</div><div>&nbsp; pendingPanel.Align = alTop;&nbsp;</div><div>&nbsp; pendingPanel.Height = 240;&nbsp;</div><div>&nbsp; pendingPanel.Margins.Bottom = 14;</div><div>&nbsp; clComponent.SetupComponent(pendingPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":16, "RoundWidth":16, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div><br></div><div>&nbsp; lblPendingTitle = SecretaryForm.AddNewProLabel(pendingPanel, 'lblPendingTitle', '&#9203; FACTURES EN ATTENTE DE VALIDATION');</div><div>&nbsp; lblPendingTitle.Align = alTop;&nbsp;</div><div>&nbsp; lblPendingTitle.Height = 28;&nbsp;</div><div>&nbsp; lblPendingTitle.Margins.Left = 14;&nbsp;</div><div>&nbsp; lblPendingTitle.Margins.Top = 8;</div><div>&nbsp; lblPendingTitle.clProSettings.FontSize = 11;&nbsp;</div><div>&nbsp; lblPendingTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');</div><div>&nbsp; lblPendingTitle.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; lblPendingTitle.SetclProSettings(lblPendingTitle.clProSettings);</div><div><br></div><div>&nbsp; pendingScrollBox = SecretaryForm.AddNewVertScrollBox(pendingPanel, 'pendingScrollBox');</div><div>&nbsp; pendingScrollBox.Align = alClient;&nbsp;</div><div>&nbsp; pendingScrollBox.Margins.Left = 8;&nbsp;</div><div>&nbsp; pendingScrollBox.Margins.Right = 8;</div><div><br></div><div>&nbsp; // 3. HISTORIQUE DU JOUR</div><div>&nbsp; historyPanel = SecretaryForm.AddNewProPanel(scrollBody, 'historyPanel');</div><div>&nbsp; historyPanel.Align = alTop;&nbsp;</div><div>&nbsp; historyPanel.Height = 220;&nbsp;</div><div>&nbsp; historyPanel.Margins.Bottom = 16;</div><div>&nbsp; clComponent.SetupComponent(historyPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":16, "RoundWidth":16, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div><br></div><div>&nbsp; lblHistoryTitle = SecretaryForm.AddNewProLabel(historyPanel, 'lblHistoryTitle', '&#128203; HISTORIQUE DU JOUR (VALIDÉES &amp; ANNULÉES)');</div><div>&nbsp; lblHistoryTitle.Align = alTop;&nbsp;</div><div>&nbsp; lblHistoryTitle.Height = 28;&nbsp;</div><div>&nbsp; lblHistoryTitle.Margins.Left = 14;&nbsp;</div><div>&nbsp; lblHistoryTitle.Margins.Top = 8;</div><div>&nbsp; lblHistoryTitle.clProSettings.FontSize = 11;&nbsp;</div><div>&nbsp; lblHistoryTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#4ade80');</div><div>&nbsp; lblHistoryTitle.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; lblHistoryTitle.SetclProSettings(lblHistoryTitle.clProSettings);</div><div><br></div><div>&nbsp; historyScrollBox = SecretaryForm.AddNewVertScrollBox(historyPanel, 'historyScrollBox');</div><div>&nbsp; historyScrollBox.Align = alClient;&nbsp;</div><div>&nbsp; historyScrollBox.Margins.Left = 8;&nbsp;</div><div>&nbsp; historyScrollBox.Margins.Right = 8;</div><div><br></div><div>&nbsp; // 4. CONSULTATION STOCK</div><div>&nbsp; stockPanel = SecretaryForm.AddNewProPanel(scrollBody, 'stockPanel');</div><div>&nbsp; stockPanel.Align = alTop;&nbsp;</div><div>&nbsp; stockPanel.Height = 300;&nbsp;</div><div>&nbsp; stockPanel.Visible = False;</div><div>&nbsp; clComponent.SetupComponent(stockPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":16, "RoundWidth":16, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div><br></div><div>&nbsp; lblStockTitle = SecretaryForm.AddNewProLabel(stockPanel, 'lblStockTitle', '&#128230; VÉRIFICATION DU STOCK');</div><div>&nbsp; lblStockTitle.Align = alTop;&nbsp;</div><div>&nbsp; lblStockTitle.Height = 28;&nbsp;</div><div>&nbsp; lblStockTitle.Margins.Left = 14;&nbsp;</div><div>&nbsp; lblStockTitle.Margins.Top = 8;</div><div>&nbsp; lblStockTitle.clProSettings.FontSize = 11;&nbsp;</div><div>&nbsp; lblStockTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff');</div><div>&nbsp; lblStockTitle.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; lblStockTitle.SetclProSettings(lblStockTitle.clProSettings);</div><div><br></div><div>&nbsp; tempLabel = SecretaryForm.AddNewProLabel(stockPanel, 'lblStockPlaceholder', 'Le module de consultation des stocks est en cours de déploiement...');</div><div>&nbsp; tempLabel.Align = alClient;&nbsp;</div><div>&nbsp; tempLabel.Margins.Left = 14;&nbsp;</div><div>&nbsp; tempLabel.Margins.Right = 14;&nbsp;</div><div>&nbsp; tempLabel.Margins.Top = 24;</div><div>&nbsp; tempLabel.clProSettings.FontSize = 12;&nbsp;</div><div>&nbsp; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');</div><div>&nbsp; tempLabel.clProSettings.TextSettings.Font.Style = &#091;fsItalic&#093;;</div><div>&nbsp; tempLabel.SetclProSettings(tempLabel.clProSettings);</div><div><br></div><div>&nbsp; // CHARGEMENT INITIAL DES DONNÉES</div><div>&nbsp; LoadInvoicesData;</div><div><br></div><div>&nbsp; SecretaryForm.Run;</div><div>}<br><br><br>dener misin</div><a href="https://static.cloudflareinsights.com/beac&#111;n.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" target="_blank" rel="nofollow">https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496"</a> integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon="{&quot;version&quot;:&quot;2024.11.0&quot;,&quot;token&quot;:&quot;439455f3e46c40b98dbd42a2f1a954d8&quot;,&quot;r&quot;:1}" crossorigin="anonymous">]]>
   </description>
   <pubDate>Thu, 23 Jul 2026 13:08:05 +0000</pubDate>
   <guid isPermaLink="true">https://forum.clomosy.com.tr/forum_posts.asp?TID=1629&amp;PID=3771#3771</guid>
  </item> 
  <item>
   <title><![CDATA[satir 105 veri tabaninda veriler dizi olarak almak : var SecretaryForm: TclForm; mainLayout,...]]></title>
   <link>https://forum.clomosy.com.tr/forum_posts.asp?TID=1629&amp;PID=3770#3770</link>
   <description>
    <![CDATA[<strong>Yazar:</strong> <a href="https://forum.clomosy.com.tr/member_profile.asp?PF=476">Barthe_dev</a><br /><strong>Konu:</strong> 1629<br /><strong>Gönderim Zamaný:</strong> 23&nbsp;Temmuz&nbsp;2026 Saat 11:08<br /><br /><div>var</div><div>&nbsp; SecretaryForm: TclForm;</div><div>&nbsp; mainLayout, headerLayout, switcherLayout: TclLayout;</div><div>&nbsp; scrollBody, pendingScrollBox, historyScrollBox, stockScrollBox: TclVertScrollBox;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Header</div><div>&nbsp; lblKicker, lblTitle: TclProLabel;</div><div>&nbsp; btnSwitchInvoice, btnSwitchStock: TclProButton;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Formulaire Facture</div><div>&nbsp; formInvoicePanel: TclProPanel;</div><div>&nbsp; lblFormTitle: TclProLabel;</div><div>&nbsp; edtClient, edtAddress, edtProductRef, edtQty, edtUnitPrice: TclProEdit;</div><div>&nbsp; btnSubmitInvoice, btnCancelEdit: TclProButton;</div><div>&nbsp; editingInvoiceId: Integer;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Liste Factures en attente</div><div>&nbsp; pendingPanel: TclProPanel;</div><div>&nbsp; lblPendingTitle: TclProLabel;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Liste Historique du jour (Validées / Annulées)</div><div>&nbsp; historyPanel: TclProPanel;</div><div>&nbsp; lblHistoryTitle: TclProLabel;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Vue Stock</div><div>&nbsp; stockPanel: TclProPanel;</div><div>&nbsp; lblStockTitle: TclProLabel;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // TabBar</div><div>&nbsp; tabBarPanel: TclProPanel;</div><div>&nbsp; btnTabInvoices, btnTabStockView, btnTabReports: TclProButton;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Navigation &amp; HTTP</div><div>&nbsp; Unitnavigate: TclUnit;</div><div>&nbsp; restApi: TclRest;</div><div>&nbsp; responseStr: String;</div><div>&nbsp; rootObj: TclJsonObject;</div><div>&nbsp; pendingArr, historyArr: TclJsonArray;</div><div>&nbsp; itemObj: TclJsonObject;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Temporaires</div><div>&nbsp; i: Integer;</div><div>&nbsp; tempCard, tempStatusIcon: TclProPanel;</div><div>&nbsp; tempLayout, tempActionsLayout: TclLayout;</div><div>&nbsp; tempLabel, tempLabel2: TclProLabel;</div><div>&nbsp; btnActionVal, btnActionEdit, btnActionDel: TclProButton;</div><div><br></div><div>// ============================================================</div><div>// BASCULE DE VUE (FACTURES vs STOCK)</div><div>// ============================================================</div><div>void ShowInvoiceSection;</div><div>{</div><div>&nbsp; formInvoicePanel.Visible = True;</div><div>&nbsp; pendingPanel.Visible = True;</div><div>&nbsp; historyPanel.Visible = True;</div><div>&nbsp; stockPanel.Visible = False;</div><div>&nbsp;&nbsp;</div><div>&nbsp; clComponent.SetupComponent(btnSwitchInvoice, '{"BackgroundColor":"#0d1520", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff40", "BorderWidth":1}');</div><div>&nbsp; clComponent.SetupComponent(btnSwitchStock, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div>&nbsp; clComponent.SetupComponent(btnTabInvoices, '{"BackgroundColor":"#07101c", "TextColor":"#00d4ff", "RoundHeight":0, "RoundWidth":0}');</div><div>&nbsp; clComponent.SetupComponent(btnTabStockView, '{"BackgroundColor":"#07101c", "TextColor":"#4a6580", "RoundHeight":0, "RoundWidth":0}');</div><div>}</div><div><br></div><div>void ShowStockSection;</div><div>{</div><div>&nbsp; formInvoicePanel.Visible = False;</div><div>&nbsp; pendingPanel.Visible = False;</div><div>&nbsp; historyPanel.Visible = False;</div><div>&nbsp; stockPanel.Visible = True;</div><div>&nbsp;&nbsp;</div><div>&nbsp; clComponent.SetupComponent(btnSwitchInvoice, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div>&nbsp; clComponent.SetupComponent(btnSwitchStock, '{"BackgroundColor":"#0d1520", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff40", "BorderWidth":1}');</div><div>&nbsp; clComponent.SetupComponent(btnTabInvoices, '{"BackgroundColor":"#07101c", "TextColor":"#4a6580", "RoundHeight":0, "RoundWidth":0}');</div><div>&nbsp; clComponent.SetupComponent(btnTabStockView, '{"BackgroundColor":"#07101c", "TextColor":"#00d4ff", "RoundHeight":0, "RoundWidth":0}');</div><div>}</div><div><br></div><div>// ============================================================</div><div>// CHARGEMENT ET RAFRAÎCHISSEMENT DYNAMIQUE DES FACTURES</div><div>// ============================================================</div><div>void LoadInvoicesData;</div><div>var</div><div>&nbsp; iPending, iHist: Integer;</div><div>{</div><div>&nbsp; restApi = TclRest.Create;</div><div>&nbsp; try</div><div>&nbsp; &nbsp; restApi.BaseURL = '<a href="http://192.168.25.6/clomosyProject/Api/invoices.php?acti&#111;n=get_invoices" target="_blank" rel="nofollow">http://192.168.25.6/clomosyProject/Api/invoices.php?action=get_invoices</a>';</div><div>&nbsp; &nbsp; restApi.Method = rmGET;</div><div>&nbsp; &nbsp; restApi.Accept = 'application/json';</div><div>&nbsp; &nbsp; restApi.ConnectTimeOut = 10000;</div><div>&nbsp; &nbsp; restApi.Execute;</div><div><br></div><div>&nbsp; &nbsp; responseStr = restApi.Response;</div><div><br></div><div>&nbsp; &nbsp; if ((responseStr &lt;&gt; '') &amp;&amp; (Copy(responseStr, 1, 1) == '{'))&nbsp;</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; rootObj = TCLJSON.ParseToJSONObject(responseStr);</div><div><br></div><div>&nbsp; &nbsp; &nbsp; if ((rootObj &lt;&gt; nil) &amp;&amp; (rootObj.GetValue('success') &lt;&gt; nil))&nbsp;</div><div>&nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (rootObj.GetValue('success').AsBoolean )</div><div>&nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // --- 1. FACTURES EN ATTENTE ---</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (rootObj.GetValue('pending') &lt;&gt; nil)&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pendingArr = TclJsonArray(rootObj.GetValue('pending'));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (pendingArr &lt;&gt; nil)&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (iPending = 0 to pendingArr.Count - 1)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; itemObj = pendingArr.GetItem(iPending);</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (itemObj &lt;&gt; nil)&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &#128161; Utilisation de l'ID unique BDD pour éviter les exceptions et le .Free</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempCard = SecretaryForm.AddNewProPanel(pendingScrollBox, 'pCard_ID_' + IntToStr(itemObj.GetValue('id').AsInteger));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempCard.Align = alTop;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempCard.Height = 75;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempCard.Margins.Bottom = 8;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clComponent.SetupComponent(tempCard, '{"BackgroundColor":"#080d14", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLayout = SecretaryForm.AddNewLayout(tempCard, 'pTxt_ID_' + IntToStr(itemObj.GetValue('id').AsInteger));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLayout.Align = alClient;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLayout.Margins.Left = 10;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLayout.Margins.Top = 8;</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel = SecretaryForm.AddNewProLabel(tempLayout, 'pLblTitle_ID_' + IntToStr(itemObj.GetValue('id').AsInteger), itemObj.GetValue('invoice_number').AsString + ' · ' + itemObj.GetValue('client_name').AsString);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.Align = alTop;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.clProSettings.FontSize = 12;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.SetclProSettings(tempLabel.clProSettings);</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2 = SecretaryForm.AddNewProLabel(tempLayout, 'pLblSub_ID_' + IntToStr(itemObj.GetValue('id').AsInteger), itemObj.GetValue('product_ref').AsString + ' (' + IntToStr(itemObj.GetValue('quantity').AsInteger) + ' pcs) - Total: ' + FloatToStr(itemObj.GetValue('total_amount').AsFloat) + ' DA');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.Align = alTop;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.clProSettings.FontSize = 10;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.Margins.Top = 4;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.SetclProSettings(tempLabel2.clProSettings);</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempActionsLayout = SecretaryForm.AddNewLayout(tempCard, 'pAct_ID_' + IntToStr(itemObj.GetValue('id').AsInteger));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempActionsLayout.Align = alRight;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempActionsLayout.Width = 110;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempActionsLayout.Margins.Right = 6;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempActionsLayout.Margins.Top = 12;</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionVal = SecretaryForm.AddNewProButton(tempActionsLayout, 'btnVal_' + IntToStr(itemObj.GetValue('id').AsInteger), '&#10003;');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionVal.Align = alLeft; btnActionVal.Width = 32; btnActionVal.Height = 32;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionVal.Hint = IntToStr(itemObj.GetValue('id').AsInteger);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clComponent.SetupComponent(btnActionVal, '{"BackgroundColor":"#22c55e20", "TextColor":"#22c55e", "RoundHeight":6, "RoundWidth":6, "BorderColor":"#22c55e50", "BorderWidth":1}');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SecretaryForm.AddNewEvent(btnActionVal, tbeOnClick, 'OnValidateInvoice');</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionEdit = SecretaryForm.AddNewProButton(tempActionsLayout, 'btnEdit_' + IntToStr(itemObj.GetValue('id').AsInteger), '&#9999;&#65039;');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionEdit.Align = alLeft; btnActionEdit.Width = 32; btnActionEdit.Height = 32; btnActionEdit.Margins.Left = 4;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionEdit.Hint = IntToStr(itemObj.GetValue('id').AsInteger);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clComponent.SetupComponent(btnActionEdit, '{"BackgroundColor":"#00d4ff20", "TextColor":"#00d4ff", "RoundHeight":6, "RoundWidth":6, "BorderColor":"#00d4ff50", "BorderWidth":1}');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SecretaryForm.AddNewEvent(btnActionEdit, tbeOnClick, 'OnEditInvoice');</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionDel = SecretaryForm.AddNewProButton(tempActionsLayout, 'btnDel_' + IntToStr(itemObj.GetValue('id').AsInteger), '&#128465;&#65039;');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionDel.Align = alLeft; btnActionDel.Width = 32; btnActionDel.Height = 32; btnActionDel.Margins.Left = 4;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnActionDel.Hint = IntToStr(itemObj.GetValue('id').AsInteger);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clComponent.SetupComponent(btnActionDel, '{"BackgroundColor":"#f8717120", "TextColor":"#f87171", "RoundHeight":6, "RoundWidth":6, "BorderColor":"#f8717150", "BorderWidth":1}');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SecretaryForm.AddNewEvent(btnActionDel, tbeOnClick, 'OnCancelInvoice');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // --- 2. HISTORIQUE DU JOUR ---</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (rootObj.GetValue('history') &lt;&gt; nil)&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; historyArr = TclJsonArray(rootObj.GetValue('history'));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (historyArr &lt;&gt; nil)&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (iHist = 0 to historyArr.Count - 1)&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; itemObj = historyArr.GetItem(iHist);</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (itemObj &lt;&gt; nil)&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempCard = SecretaryForm.AddNewProPanel(historyScrollBox, 'hCard_ID_' + IntToStr(itemObj.GetValue('id').AsInteger));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempCard.Align = alTop; tempCard.Height = 58; tempCard.Margins.Bottom = 6;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clComponent.SetupComponent(tempCard, '{"BackgroundColor":"#080d14", "RoundHeight":8, "RoundWidth":8, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLayout = SecretaryForm.AddNewLayout(tempCard, 'hTxt_ID_' + IntToStr(itemObj.GetValue('id').AsInteger));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLayout.Align = alClient; tempLayout.Margins.Left = 10; tempLayout.Margins.Top = 6;</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel = SecretaryForm.AddNewProLabel(tempLayout, 'hLblTitle_ID_' + IntToStr(itemObj.GetValue('id').AsInteger), itemObj.GetValue('invoice_number').AsString + ' · ' + itemObj.GetValue('client_name').AsString);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 11;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel.SetclProSettings(tempLabel.clProSettings);</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2 = SecretaryForm.AddNewProLabel(tempLayout, 'hLblSub_ID_' + IntToStr(itemObj.GetValue('id').AsInteger), FloatToStr(itemObj.GetValue('total_amount').AsFloat) + ' DA · Status: ' + itemObj.GetValue('status').AsString);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.Align = alTop; tempLabel2.clProSettings.FontSize = 9;</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (itemObj.GetValue('status').AsString == 'validee')&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4ade80')</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#f87171');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempLabel2.Margins.Top = 2; tempLabel2.SetclProSettings(tempLabel2.clProSettings);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; }</div><div>&nbsp; finally{</div><div>&nbsp; &nbsp; restApi.Free;</div><div>&nbsp; }</div><div>&nbsp; }</div><div>}</div><div><br></div><div>// ============================================================</div><div>// CRÉATION OU MODIFICATION D'UNE FACTURE</div><div>// ============================================================</div><div>void SubmitInvoice;</div><div>var</div><div>&nbsp; payloadJson, cleanClient, cleanAddress, cleanRef: String;</div><div>{</div><div>&nbsp; if ((edtClient.Text == '') || (edtProductRef.Text == '') || (edtQty.Text == '') || (edtUnitPrice.Text == ''))&nbsp;</div><div>&nbsp; {</div><div>&nbsp; &nbsp; ShowMessage('&#9888;&#65039; Veuillez remplir tous les champs obligatoires.');</div><div>&nbsp; &nbsp; Exit;</div><div>&nbsp; }</div><div><br></div><div>&nbsp; /*// Nettoyage basique pour éviter de casser la structure du JSON</div><div>&nbsp; cleanClient = StringReplace(edtClient.Text, '"', '\"', &#091;rfReplaceAll&#093;);</div><div>&nbsp; cleanAddress = StringReplace(edtAddress.Text, '"', '\"', &#091;rfReplaceAll&#093;);</div><div>&nbsp; cleanRef = StringReplace(edtProductRef.Text, '"', '\"', &#091;rfReplaceAll&#093;);*/</div><div><br></div><div>&nbsp; // 1. Construction du JSON strict</div><div>&nbsp; payloadJson = '{"id":' + IntToStr(editingInvoiceId) + ',' +</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'"client":"' + edtClient.Text + '",' +</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'"address":"' + edtAddress.Text + '",' +</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'"product_ref":"' + edtProductRef.Text + '",' +</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'"qty":' + edtQty.Text + ',' +</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'"unit_price":' + edtUnitPrice.Text + '}';</div><div><br></div><div>&nbsp; restApi = TclRest.Create;</div><div>&nbsp; try</div><div>&nbsp; &nbsp; // 2. Vérification stricte de l'URL avec le paramètre ?action=save_invoice</div><div>&nbsp; &nbsp; restApi.BaseURL = '<a href="http://192.168.25.6/clomosyProject/Api/invoices.php?acti&#111;n=save_invoice" target="_blank" rel="nofollow">http://192.168.25.6/clomosyProject/Api/invoices.php?action=save_invoice</a>';</div><div>&nbsp; &nbsp; restApi.Method = rmPOST;</div><div>&nbsp; &nbsp; restApi.Accept = 'application/json';</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; // 3. &#128680; POINT CLÉ : Utiliser AddBody avec le MimeType application/json !</div><div>&nbsp; &nbsp; // Ne PAS utiliser "restApi.Body = payloadJson;"</div><div>&nbsp; &nbsp; restApi.AddBody(payloadJson, 'application/json');</div><div>&nbsp; &nbsp; restApi.Execute;</div><div><br></div><div>&nbsp; &nbsp; responseStr = restApi.Response;</div><div><br></div><div>&nbsp; &nbsp; // Affiche le diagnostic retourné par le PHP</div><div>&nbsp; &nbsp; ShowMessage('&#128236; Réponse du serveur :' + #13#10 + responseStr);</div><div><br></div><div>&nbsp; finally{</div><div>&nbsp; &nbsp; restApi.Free;</div><div>&nbsp; }</div><div>}</div><div>}</div><div>// ============================================================</div><div>// ÉDITION, CANCELLATION ET VALIDATION</div><div>// ============================================================</div><div>void OnEditInvoice;</div><div>var</div><div>&nbsp; btnSenderEdit: TclProButton;</div><div>&nbsp; invIdStr: String;</div><div>&nbsp; j: Integer;</div><div>&nbsp; foundItem: TclJsonObject;</div><div>{</div><div>&nbsp; btnSenderEdit = TclProButton(SecretaryForm.ClSender);</div><div>&nbsp; invIdStr = btnSenderEdit.Hint;</div><div><br></div><div>&nbsp; if (pendingArr &lt;&gt; nil)&nbsp;</div><div>&nbsp; {</div><div>&nbsp; &nbsp; for (j = 0 to pendingArr.Count - 1)&nbsp;</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; foundItem = pendingArr.GetItem(j);</div><div>&nbsp; &nbsp; &nbsp; if (IntToStr(foundItem.GetValue('id').AsInteger) == invIdStr)&nbsp;</div><div>&nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; editingInvoiceId = foundItem.GetValue('id').AsInteger;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; edtClient.Text = foundItem.GetValue('client_name').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (foundItem.GetValue('delivery_address') &lt;&gt; nil) {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; edtAddress.Text = foundItem.GetValue('delivery_address').AsString</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; else{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; edtAddress.Text = '';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; edtProductRef.Text = foundItem.GetValue('product_ref').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; edtQty.Text = IntToStr(foundItem.GetValue('quantity').AsInteger);</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (foundItem.GetValue('unit_price') &lt;&gt; nil){</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; edtUnitPrice.Text = FloatToStr(foundItem.GetValue('unit_price').AsFloat)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; else{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; edtUnitPrice.Text = '0';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; btnSubmitInvoice.Caption = 'Mettre à jour';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; btnCancelEdit.Visible = True;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; ShowMessage('&#128161; Données chargées. Modifiez puis cliquez sur Mettre à jour.');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; Exit;</div><div>&nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; }</div><div>&nbsp; }</div><div>}</div><div><br></div><div>void CancelEdit;</div><div>{</div><div>&nbsp; edtClient.Text = ''; edtAddress.Text = ''; edtProductRef.Text = ''; edtQty.Text = ''; edtUnitPrice.Text = '';</div><div>&nbsp; editingInvoiceId = 0;</div><div>&nbsp; btnSubmitInvoice.Caption = 'Émettre la Facture';</div><div>&nbsp; btnCancelEdit.Visible = False;</div><div>}</div><div><br></div><div>void OnValidateInvoice;</div><div>var</div><div>&nbsp; btnSenderVal: TclProButton;</div><div>&nbsp; invIdStr: String;</div><div>{</div><div>&nbsp; btnSenderVal = TclProButton(SecretaryForm.ClSender);</div><div>&nbsp; invIdStr = btnSenderVal.Hint;</div><div><br></div><div>&nbsp; restApi = TclRest.Create;</div><div>&nbsp; try</div><div>&nbsp; &nbsp; restApi.BaseURL = '<a href="http://192.168.25.6/clomosyProject/Api/invoices.php?acti&#111;n=validate_invoice" target="_blank" rel="nofollow">http://192.168.25.6/clomosyProject/Api/invoices.php?action=validate_invoice</a>';</div><div>&nbsp; &nbsp; restApi.Method = rmPOST;</div><div>&nbsp; &nbsp; restApi.Accept = 'application/json';</div><div>&nbsp; &nbsp; restApi.Body = '{"id":' + invIdStr + '}';</div><div>&nbsp; &nbsp; restApi.Execute;</div><div><br></div><div>&nbsp; &nbsp; responseStr = restApi.Response;</div><div>&nbsp; &nbsp; if (responseStr &lt;&gt; '')&nbsp;</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; ShowMessage('&#128196; Reçu / PDF de Facturation généré avec succès !');</div><div>&nbsp; &nbsp; &nbsp; LoadInvoicesData;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; finally{</div><div>&nbsp; &nbsp; restApi.Free;</div><div>&nbsp; }</div><div>&nbsp; }</div><div>}</div><div><br></div><div>void OnCancelInvoice;</div><div>var</div><div>&nbsp; btnSenderCancel: TclProButton;</div><div>&nbsp; invIdStr: String;</div><div>{</div><div>&nbsp; btnSenderCancel = TclProButton(SecretaryForm.ClSender);</div><div>&nbsp; invIdStr = btnSenderCancel.Hint;</div><div><br></div><div>&nbsp; restApi = TclRest.Create;</div><div>&nbsp; try</div><div>&nbsp; &nbsp; restApi.BaseURL = '<a href="http://192.168.25.6/clomosyProject/Api/invoices.php?acti&#111;n=cancel_invoice" target="_blank" rel="nofollow">http://192.168.25.6/clomosyProject/Api/invoices.php?action=cancel_invoice</a>';</div><div>&nbsp; &nbsp; restApi.Method = rmPOST;</div><div>&nbsp; &nbsp; restApi.Accept = 'application/json';</div><div>&nbsp; &nbsp; restApi.Body = '{"id":' + invIdStr + '}';</div><div>&nbsp; &nbsp; restApi.Execute;</div><div><br></div><div>&nbsp; &nbsp; LoadInvoicesData;</div><div>&nbsp; finally{</div><div>&nbsp; &nbsp; restApi.Free;</div><div>&nbsp; }</div><div>&nbsp; }</div><div>}</div><div><br></div><div>void GoReportView;</div><div>{</div><div>&nbsp; Unitnavigate.UnitName = 'Gestion_stock_report';</div><div>&nbsp; Unitnavigate.CallerForm = SecretaryForm;</div><div>&nbsp; Unitnavigate.Run;</div><div>}</div><div><br></div><div>// ============================================================</div><div>// INITIALISATION DU FORMULAIRE</div><div>// ============================================================</div><div>{</div><div>&nbsp; SecretaryForm = TclForm.Create(Self);</div><div>&nbsp; SecretaryForm.SetFormColor('#080d14', '#0d1520', clGVertical);</div><div><br></div><div>&nbsp; Unitnavigate = TclUnit.Create;</div><div>&nbsp; editingInvoiceId = 0;</div><div><br></div><div>&nbsp; if (not Clomosy.PlatformIsMobile) {</div><div>&nbsp; &nbsp; SecretaryForm.clSetWindowState(fwsMaximized);</div><div><br></div><div>&nbsp; // TAB BAR INFÉRIEURE</div><div>&nbsp; tabBarPanel = SecretaryForm.AddNewProPanel(SecretaryForm, 'tabBarPanel');</div><div>&nbsp; tabBarPanel.Align = alBottom;&nbsp;</div><div>&nbsp; tabBarPanel.Height = 58;</div><div>&nbsp; clComponent.SetupComponent(tabBarPanel, '{"BackgroundColor":"#07101c", "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div><br></div><div>&nbsp; btnTabInvoices = SecretaryForm.AddNewProButton(tabBarPanel, 'btnTabInvoices', 'Factures');</div><div>&nbsp; btnTabInvoices.Align = alLeft;&nbsp;</div><div>&nbsp; btnTabInvoices.Width = 120;</div><div>&nbsp; clComponent.SetupComponent(btnTabInvoices, '{"BackgroundColor":"#07101c", "TextColor":"#00d4ff", "RoundHeight":0, "RoundWidth":0}');</div><div>&nbsp; SecretaryForm.AddNewEvent(btnTabInvoices, tbeOnClick, 'ShowInvoiceSection');</div><div><br></div><div>&nbsp; btnTabStockView = SecretaryForm.AddNewProButton(tabBarPanel, 'btnTabStockView', 'Stock');</div><div>&nbsp; btnTabStockView.Align = alLeft;&nbsp;</div><div>&nbsp; btnTabStockView.Width = 120;</div><div>&nbsp; clComponent.SetupComponent(btnTabStockView, '{"BackgroundColor":"#07101c", "TextColor":"#4a6580", "RoundHeight":0, "RoundWidth":0}');</div><div>&nbsp; SecretaryForm.AddNewEvent(btnTabStockView, tbeOnClick, 'ShowStockSection');</div><div><br></div><div>&nbsp; btnTabReports = SecretaryForm.AddNewProButton(tabBarPanel, 'btnTabReports', 'Rapport KPI');</div><div>&nbsp; btnTabReports.Align = alClient;</div><div>&nbsp; clComponent.SetupComponent(btnTabReports, '{"BackgroundColor":"#07101c", "TextColor":"#4a6580", "RoundHeight":0, "RoundWidth":0}');</div><div>&nbsp; SecretaryForm.AddNewEvent(btnTabReports, tbeOnClick, 'GoReportView');</div><div><br></div><div>&nbsp; // LAYOUT PRINCIPAL</div><div>&nbsp; mainLayout = SecretaryForm.AddNewLayout(SecretaryForm, 'mainLayout');</div><div>&nbsp; mainLayout.Align = alClient;</div><div><br></div><div>&nbsp; // HEADER</div><div>&nbsp; headerLayout = SecretaryForm.AddNewLayout(mainLayout, 'headerLayout');</div><div>&nbsp; headerLayout.Align = alTop;&nbsp;</div><div>&nbsp; headerLayout.Height = 60;&nbsp;</div><div>&nbsp; headerLayout.Margins.Left = 16;&nbsp;</div><div>&nbsp; headerLayout.Margins.Right = 16;</div><div>&nbsp; headerLayout.Margins.Top = 10;</div><div><br></div><div>&nbsp; lblKicker = SecretaryForm.AddNewProLabel(headerLayout, 'lblKicker', 'ESPACE SECRÉTARIAT &amp; COMMANDE');</div><div>&nbsp; lblKicker.Align = alTop;&nbsp;</div><div>&nbsp; lblKicker.Height = 14;</div><div>&nbsp; lblKicker.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff');</div><div>&nbsp; lblKicker.clProSettings.FontSize = 10;</div><div>&nbsp; lblKicker.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; lblKicker.SetclProSettings(lblKicker.clProSettings);</div><div><br></div><div>&nbsp; lblTitle = SecretaryForm.AddNewProLabel(headerLayout, 'lblTitle', 'Facturation &amp; Commandes');</div><div>&nbsp; lblTitle.Align = alTop;&nbsp;</div><div>&nbsp; lblTitle.Height = 32;</div><div>&nbsp; lblTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');</div><div>&nbsp; lblTitle.clProSettings.FontSize = 22;</div><div>&nbsp; lblTitle.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; lblTitle.SetclProSettings(lblTitle.clProSettings);</div><div><br></div><div>&nbsp; // SWITCHER DE SECTION</div><div>&nbsp; switcherLayout = SecretaryForm.AddNewLayout(mainLayout, 'switcherLayout');</div><div>&nbsp; switcherLayout.Align = alTop;&nbsp;</div><div>&nbsp; switcherLayout.Height = 40;&nbsp;</div><div>&nbsp; switcherLayout.Margins.Left = 16;&nbsp;</div><div>&nbsp; switcherLayout.Margins.Right = 16;&nbsp;</div><div>&nbsp; switcherLayout.Margins.Bottom = 10;</div><div><br></div><div>&nbsp; btnSwitchInvoice = SecretaryForm.AddNewProButton(switcherLayout, 'btnSwitchInvoice', '&#128196; Créer Factures');</div><div>&nbsp; btnSwitchInvoice.Align = alLeft;&nbsp;</div><div>&nbsp; btnSwitchInvoice.Width = 160;</div><div>&nbsp; clComponent.SetupComponent(btnSwitchInvoice, '{"BackgroundColor":"#0d1520", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff40", "BorderWidth":1}');</div><div>&nbsp; SecretaryForm.AddNewEvent(btnSwitchInvoice, tbeOnClick, 'ShowInvoiceSection');</div><div><br></div><div>&nbsp; btnSwitchStock = SecretaryForm.AddNewProButton(switcherLayout, 'btnSwitchStock', '&#128230; Vérifier Stock');</div><div>&nbsp; btnSwitchStock.Align = alRight;&nbsp;</div><div>&nbsp; btnSwitchStock.Width = 160;</div><div>&nbsp; clComponent.SetupComponent(btnSwitchStock, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div>&nbsp; SecretaryForm.AddNewEvent(btnSwitchStock, tbeOnClick, 'ShowStockSection');</div><div><br></div><div>&nbsp; scrollBody = SecretaryForm.AddNewVertScrollBox(mainLayout, 'scrollBody');</div><div>&nbsp; scrollBody.Align = alClient;&nbsp;</div><div>&nbsp; scrollBody.Margins.Left = 16;&nbsp;</div><div>&nbsp; scrollBody.Margins.Right = 16;</div><div><br></div><div>&nbsp; // 1. FORMULAIRE DE CRÉATION</div><div>&nbsp; formInvoicePanel = SecretaryForm.AddNewProPanel(scrollBody, 'formInvoicePanel');</div><div>&nbsp; formInvoicePanel.Align = alTop;&nbsp;</div><div>&nbsp; formInvoicePanel.Height = 345;&nbsp;</div><div>&nbsp; formInvoicePanel.Margins.Bottom = 16;</div><div>&nbsp; clComponent.SetupComponent(formInvoicePanel, '{"BackgroundColor":"#0d1520", "RoundHeight":16, "RoundWidth":16, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div><br></div><div>&nbsp; lblFormTitle = SecretaryForm.AddNewProLabel(formInvoicePanel, 'lblFormTitle', '&#128196; ÉMETTRE UNE FACTURE');</div><div>&nbsp; lblFormTitle.Align = alTop;&nbsp;</div><div>&nbsp; lblFormTitle.Height = 28;&nbsp;</div><div>&nbsp; lblFormTitle.Margins.Left = 14;&nbsp;</div><div>&nbsp; lblFormTitle.Margins.Top = 8;</div><div>&nbsp; lblFormTitle.clProSettings.FontSize = 11;&nbsp;</div><div>&nbsp; lblFormTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff');</div><div>&nbsp; lblFormTitle.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; lblFormTitle.SetclProSettings(lblFormTitle.clProSettings);</div><div><br></div><div>&nbsp; edtClient = SecretaryForm.AddNewProEdit(formInvoicePanel, 'edtClient', 'Nom du client...');</div><div>&nbsp; edtClient.Align = alTop;&nbsp;</div><div>&nbsp; edtClient.Height = 38;&nbsp;</div><div>&nbsp; edtClient.Margins.Left = 14;&nbsp;</div><div>&nbsp; edtClient.Margins.Right = 14;&nbsp;</div><div>&nbsp; edtClient.Margins.Top = 4;</div><div>&nbsp; clComponent.SetupComponent(edtClient, '{"BackgroundColor":"#080d14", "TextColor":"#e2eaf5", "RoundHeight":8, "RoundWidth":8, "BorderColor":"#1e3552", "BorderWidth":1}');</div><div><br></div><div>&nbsp; edtAddress = SecretaryForm.AddNewProEdit(formInvoicePanel, 'edtAddress', 'Adresse de livraison...');</div><div>&nbsp; edtAddress.Align = alTop;&nbsp;</div><div>&nbsp; edtAddress.Height = 38;&nbsp;</div><div>&nbsp; edtAddress.Margins.Left = 14;&nbsp;</div><div>&nbsp; edtAddress.Margins.Right = 14;&nbsp;</div><div>&nbsp; edtAddress.Margins.Top = 6;</div><div>&nbsp; clComponent.SetupComponent(edtAddress, '{"BackgroundColor":"#080d14", "TextColor":"#e2eaf5", "RoundHeight":8, "RoundWidth":8, "BorderColor":"#1e3552", "BorderWidth":1}');</div><div><br></div><div>&nbsp; edtProductRef = SecretaryForm.AddNewProEdit(formInvoicePanel, 'edtProductRef', 'Référence produit...');</div><div>&nbsp; edtProductRef.Align = alTop;&nbsp;</div><div>&nbsp; edtProductRef.Height = 38;&nbsp;</div><div>&nbsp; edtProductRef.Margins.Left = 14;&nbsp;</div><div>&nbsp; edtProductRef.Margins.Right = 14;&nbsp;</div><div>&nbsp; edtProductRef.Margins.Top = 6;</div><div>&nbsp; clComponent.SetupComponent(edtProductRef, '{"BackgroundColor":"#080d14", "TextColor":"#e2eaf5", "RoundHeight":8, "RoundWidth":8, "BorderColor":"#1e3552", "BorderWidth":1}');</div><div><br></div><div>&nbsp; tempLayout = SecretaryForm.AddNewLayout(formInvoicePanel, 'rowQtyPrice');</div><div>&nbsp; tempLayout.Align = alTop;&nbsp;</div><div>&nbsp; tempLayout.Height = 38;&nbsp;</div><div>&nbsp; tempLayout.Margins.Left = 14;&nbsp;</div><div>&nbsp; tempLayout.Margins.Right = 14;&nbsp;</div><div>&nbsp; tempLayout.Margins.Top = 6;</div><div><br></div><div>&nbsp; edtQty = SecretaryForm.AddNewProEdit(tempLayout, 'edtQty', 'Qté');</div><div>&nbsp; edtQty.Align = alLeft;&nbsp;</div><div>&nbsp; edtQty.Width = 140;</div><div>&nbsp; clComponent.SetupComponent(edtQty, '{"BackgroundColor":"#080d14", "TextColor":"#e2eaf5", "RoundHeight":8, "RoundWidth":8, "BorderColor":"#1e3552", "BorderWidth":1}');</div><div><br></div><div>&nbsp; edtUnitPrice = SecretaryForm.AddNewProEdit(tempLayout, 'edtUnitPrice', 'Prix Unitaire (DA)');</div><div>&nbsp; edtUnitPrice.Align = alRight;&nbsp;</div><div>&nbsp; edtUnitPrice.Width = 150;</div><div>&nbsp; clComponent.SetupComponent(edtUnitPrice, '{"BackgroundColor":"#080d14", "TextColor":"#e2eaf5", "RoundHeight":8, "RoundWidth":8, "BorderColor":"#1e3552", "BorderWidth":1}');</div><div><br></div><div>&nbsp; btnSubmitInvoice = SecretaryForm.AddNewProButton(formInvoicePanel, 'btnSubmitInvoice', 'Émettre la Facture');</div><div>&nbsp; btnSubmitInvoice.Align = alTop;&nbsp;</div><div>&nbsp; btnSubmitInvoice.Height = 40;&nbsp;</div><div>&nbsp; btnSubmitInvoice.Margins.Left = 14;&nbsp;</div><div>&nbsp; btnSubmitInvoice.Margins.Right = 14;&nbsp;</div><div>&nbsp; btnSubmitInvoice.Margins.Top = 10;</div><div>&nbsp; clComponent.SetupComponent(btnSubmitInvoice, '{"BackgroundColor":"#00d4ff18", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff40", "BorderWidth":1}');</div><div>&nbsp; SecretaryForm.AddNewEvent(btnSubmitInvoice, tbeOnClick, 'SubmitInvoice');</div><div><br></div><div>&nbsp; btnCancelEdit = SecretaryForm.AddNewProButton(formInvoicePanel, 'btnCancelEdit', 'Annuler Modification');</div><div>&nbsp; btnCancelEdit.Align = alTop;&nbsp;</div><div>&nbsp; btnCancelEdit.Height = 30;&nbsp;</div><div>&nbsp; btnCancelEdit.Margins.Left = 14;&nbsp;</div><div>&nbsp; btnCancelEdit.Margins.Right = 14;&nbsp;</div><div>&nbsp; btnCancelEdit.Margins.Top = 6;</div><div>&nbsp; btnCancelEdit.Visible = False;</div><div>&nbsp; clComponent.SetupComponent(btnCancelEdit, '{"BackgroundColor":"#f8717118", "TextColor":"#f87171", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#f8717140", "BorderWidth":1}');</div><div>&nbsp; SecretaryForm.AddNewEvent(btnCancelEdit, tbeOnClick, 'CancelEdit');</div><div><br></div><div>&nbsp; // 2. FACTURES EN ATTENTE</div><div>&nbsp; pendingPanel = SecretaryForm.AddNewProPanel(scrollBody, 'pendingPanel');</div><div>&nbsp; pendingPanel.Align = alTop;&nbsp;</div><div>&nbsp; pendingPanel.Height = 240;&nbsp;</div><div>&nbsp; pendingPanel.Margins.Bottom = 14;</div><div>&nbsp; clComponent.SetupComponent(pendingPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":16, "RoundWidth":16, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div><br></div><div>&nbsp; lblPendingTitle = SecretaryForm.AddNewProLabel(pendingPanel, 'lblPendingTitle', '&#9203; FACTURES EN ATTENTE DE VALIDATION');</div><div>&nbsp; lblPendingTitle.Align = alTop;&nbsp;</div><div>&nbsp; lblPendingTitle.Height = 28;&nbsp;</div><div>&nbsp; lblPendingTitle.Margins.Left = 14;&nbsp;</div><div>&nbsp; lblPendingTitle.Margins.Top = 8;</div><div>&nbsp; lblPendingTitle.clProSettings.FontSize = 11;&nbsp;</div><div>&nbsp; lblPendingTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5');</div><div>&nbsp; lblPendingTitle.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; lblPendingTitle.SetclProSettings(lblPendingTitle.clProSettings);</div><div><br></div><div>&nbsp; pendingScrollBox = SecretaryForm.AddNewVertScrollBox(pendingPanel, 'pendingScrollBox');</div><div>&nbsp; pendingScrollBox.Align = alClient;&nbsp;</div><div>&nbsp; pendingScrollBox.Margins.Left = 8;&nbsp;</div><div>&nbsp; pendingScrollBox.Margins.Right = 8;</div><div><br></div><div>&nbsp; // 3. HISTORIQUE DU JOUR</div><div>&nbsp; historyPanel = SecretaryForm.AddNewProPanel(scrollBody, 'historyPanel');</div><div>&nbsp; historyPanel.Align = alTop;&nbsp;</div><div>&nbsp; historyPanel.Height = 220;&nbsp;</div><div>&nbsp; historyPanel.Margins.Bottom = 16;</div><div>&nbsp; clComponent.SetupComponent(historyPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":16, "RoundWidth":16, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div><br></div><div>&nbsp; lblHistoryTitle = SecretaryForm.AddNewProLabel(historyPanel, 'lblHistoryTitle', '&#128203; HISTORIQUE DU JOUR (VALIDÉES &amp; ANNULÉES)');</div><div>&nbsp; lblHistoryTitle.Align = alTop;&nbsp;</div><div>&nbsp; lblHistoryTitle.Height = 28;&nbsp;</div><div>&nbsp; lblHistoryTitle.Margins.Left = 14;&nbsp;</div><div>&nbsp; lblHistoryTitle.Margins.Top = 8;</div><div>&nbsp; lblHistoryTitle.clProSettings.FontSize = 11;&nbsp;</div><div>&nbsp; lblHistoryTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#4ade80');</div><div>&nbsp; lblHistoryTitle.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; lblHistoryTitle.SetclProSettings(lblHistoryTitle.clProSettings);</div><div><br></div><div>&nbsp; historyScrollBox = SecretaryForm.AddNewVertScrollBox(historyPanel, 'historyScrollBox');</div><div>&nbsp; historyScrollBox.Align = alClient;&nbsp;</div><div>&nbsp; historyScrollBox.Margins.Left = 8;&nbsp;</div><div>&nbsp; historyScrollBox.Margins.Right = 8;</div><div><br></div><div>&nbsp; // 4. CONSULTATION STOCK</div><div>&nbsp; stockPanel = SecretaryForm.AddNewProPanel(scrollBody, 'stockPanel');</div><div>&nbsp; stockPanel.Align = alTop;&nbsp;</div><div>&nbsp; stockPanel.Height = 300;&nbsp;</div><div>&nbsp; stockPanel.Visible = False;</div><div>&nbsp; clComponent.SetupComponent(stockPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":16, "RoundWidth":16, "BorderColor":"#1a2d42", "BorderWidth":1}');</div><div><br></div><div>&nbsp; lblStockTitle = SecretaryForm.AddNewProLabel(stockPanel, 'lblStockTitle', '&#128230; VÉRIFICATION DU STOCK');</div><div>&nbsp; lblStockTitle.Align = alTop;&nbsp;</div><div>&nbsp; lblStockTitle.Height = 28;&nbsp;</div><div>&nbsp; lblStockTitle.Margins.Left = 14;&nbsp;</div><div>&nbsp; lblStockTitle.Margins.Top = 8;</div><div>&nbsp; lblStockTitle.clProSettings.FontSize = 11;&nbsp;</div><div>&nbsp; lblStockTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff');</div><div>&nbsp; lblStockTitle.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; lblStockTitle.SetclProSettings(lblStockTitle.clProSettings);</div><div><br></div><div>&nbsp; tempLabel = SecretaryForm.AddNewProLabel(stockPanel, 'lblStockPlaceholder', 'Le module de consultation des stocks est en cours de déploiement...');</div><div>&nbsp; tempLabel.Align = alClient;&nbsp;</div><div>&nbsp; tempLabel.Margins.Left = 14;&nbsp;</div><div>&nbsp; tempLabel.Margins.Right = 14;&nbsp;</div><div>&nbsp; tempLabel.Margins.Top = 24;</div><div>&nbsp; tempLabel.clProSettings.FontSize = 12;&nbsp;</div><div>&nbsp; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580');</div><div>&nbsp; tempLabel.clProSettings.TextSettings.Font.Style = &#091;fsItalic&#093;;</div><div>&nbsp; tempLabel.SetclProSettings(tempLabel.clProSettings);</div><div><br></div><div>&nbsp; // CHARGEMENT INITIAL DES DONNÉES</div><div>&nbsp; LoadInvoicesData;</div><div><br></div><div>&nbsp; SecretaryForm.Run;</div><div><br></div><div>}</div><div>}</div><a href="https://static.cloudflareinsights.com/beac&#111;n.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" target="_blank" rel="nofollow">https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496"</a> integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon="{&quot;version&quot;:&quot;2024.11.0&quot;,&quot;token&quot;:&quot;439455f3e46c40b98dbd42a2f1a954d8&quot;,&quot;r&quot;:1}" crossorigin="anonymous">]]>
   </description>
   <pubDate>Thu, 23 Jul 2026 11:08:59 +0000</pubDate>
   <guid isPermaLink="true">https://forum.clomosy.com.tr/forum_posts.asp?TID=1629&amp;PID=3770#3770</guid>
  </item> 
 </channel>
</rss>