This commit is contained in:
Hesabix 2025-10-02 19:12:22 +03:30
commit c409b4673c
139 changed files with 13267 additions and 0 deletions

BIN
.vs/Box/v14/.suo Normal file

Binary file not shown.

Binary file not shown.

BIN
.vs/HesabixBox/v14/.suo Normal file

Binary file not shown.

Binary file not shown.

BIN
.vs/HesabixBox/v17/.suo Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

276
ApiInterface.vb Normal file
View file

@ -0,0 +1,276 @@
Imports System.Net.Http
Imports System.Text
Imports System.Web.Script.Serialization
Imports Microsoft.VisualBasic.FileIO
Imports System.Net
Imports System.Security.Cryptography.X509Certificates
Imports System.Net.Security
Imports System.Threading.Tasks
Imports System.Threading
Public Class ApiInterface
' متد برای تنظیم SSL/TLS
Private Sub ConfigureSSL()
' تنظیم پروتکل SSL/TLS
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls
' تنظیم اعتبارسنجی گواهی SSL (برای محیط تست)
ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateServerCertificate)
' تنظیم timeout
ServicePointManager.DefaultConnectionLimit = 10
' تنظیمات اضافی برای حل مشکل SSL
ServicePointManager.Expect100Continue = False
ServicePointManager.UseNagleAlgorithm = False
End Sub
' متد اعتبارسنجی گواهی SSL
Private Function ValidateServerCertificate(sender As Object, certificate As X509Certificate, chain As X509Chain, sslPolicyErrors As SslPolicyErrors) As Boolean
' برای محیط تست، همه گواهی‌ها را قبول می‌کنیم
' در محیط تولید باید اعتبارسنجی مناسب انجام شود
Return True
End Function
' متد برای تنظیمات پیشرفته SSL (اختیاری)
Public Sub ConfigureAdvancedSSL(enableCertificateValidation As Boolean)
If enableCertificateValidation Then
' فعال کردن اعتبارسنجی گواهی برای محیط تولید
ServicePointManager.ServerCertificateValidationCallback = Nothing
Else
' غیرفعال کردن اعتبارسنجی گواهی برای محیط تست
ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateServerCertificate)
End If
End Sub
' متد کمکی برای تنظیم timeout
Private Sub SetWebClientTimeout(url As String, timeoutMs As Integer)
Dim servicePoint As ServicePoint = ServicePointManager.FindServicePoint(New Uri(url))
servicePoint.ConnectionLeaseTimeout = timeoutMs
End Sub
' متد تست اتصال SSL
Public Function TestSSLConnection() As String
Try
ConfigureSSL()
Dim webClient As New Net.WebClient
Dim testUrl As String = My.Settings.apiUrl.Replace("https://", "https://")
' تنظیم timeout برای WebClient (از طریق ServicePointManager)
SetWebClientTimeout(testUrl, 10000) ' 10 ثانیه برای تست
Logger.Instance.LogInfo($"تست اتصال SSL به: {testUrl}")
Dim result As String = webClient.DownloadString(testUrl)
Logger.Instance.LogInfo("تست اتصال SSL موفق انجام شد")
Return "اتصال SSL موفق"
Catch ex As Exception
Logger.Instance.LogError("خطا در تست اتصال SSL", ex)
Return $"خطا در اتصال SSL: {ex.Message}"
End Try
End Function
Public Function send(requestUri As String) As String
' تنظیم SSL/TLS
ConfigureSSL()
Dim webClient As New Net.WebClient
Dim fullUrl As String = My.Settings.apiUrl + requestUri
' تنظیم timeout برای WebClient (از طریق ServicePointManager)
SetWebClientTimeout(fullUrl, 30000) ' 30 ثانیه
' ثبت درخواست
Logger.Instance.LogRequest("GET", fullUrl, "", "")
Try
Dim result As String = webClient.DownloadString(fullUrl)
' ثبت پاسخ موفق
Logger.Instance.LogResponse("200", result, True)
Return result
Catch ex As Exception
' ثبت خطا
Logger.Instance.LogError($"خطا در ارسال درخواست به {fullUrl}", ex)
Return ""
End Try
End Function
' متد async برای ارسال درخواست بدون مسدود کردن UI
Public Async Function sendAsync(requestUri As String) As Task(Of String)
Return Await Task.Run(Function()
Return send(requestUri)
End Function)
End Function
Public Function login(token As String) As Dictionary(Of String, Object)
' تنظیم SSL/TLS
ConfigureSSL()
Dim webClient As New Net.WebClient
webClient.Headers.Add("api-key", token)
Dim fullUrl As String = My.Settings.apiUrl + "/api/user/check/login"
' تنظیم timeout برای WebClient (از طریق ServicePointManager)
SetWebClientTimeout(fullUrl, 30000) ' 30 ثانیه
Dim headers As String = $"api-key: {token}"
' ثبت درخواست ورود
Logger.Instance.LogRequest("GET", fullUrl, headers, "")
Try
Dim result As String = webClient.DownloadString(fullUrl)
Dim serializer As New JavaScriptSerializer()
Dim json As Dictionary(Of String, Object) = serializer.Deserialize(Of Dictionary(Of String, Object))(result)
' ثبت پاسخ ورود
If json.Count > 0 Then
Logger.Instance.LogResponse("200", result, True)
Logger.Instance.LogInfo("ورود موفق انجام شد")
Else
Logger.Instance.LogResponse("401", result, False)
Logger.Instance.LogInfo("ورود ناموفق - توکن نامعتبر")
End If
Return json
Catch ex As Exception
Logger.Instance.LogError("خطا در فرآیند ورود", ex)
Return New Dictionary(Of String, Object)()
End Try
End Function
' متد جدید برای دریافت پاسخ خام سرور
Public Function loginWithResponse(token As String) As String
' تنظیم SSL/TLS
ConfigureSSL()
Dim webClient As New Net.WebClient
webClient.Headers.Add("api-key", token)
Dim fullUrl As String = My.Settings.apiUrl + "/api/user/check/login"
' تنظیم timeout برای WebClient (از طریق ServicePointManager)
SetWebClientTimeout(fullUrl, 30000) ' 30 ثانیه
Dim headers As String = $"api-key: {token}"
' ثبت درخواست ورود
Logger.Instance.LogRequest("GET", fullUrl, headers, "")
Try
Dim result As String = webClient.DownloadString(fullUrl)
' ثبت پاسخ ورود
Dim serializer As New JavaScriptSerializer()
Dim json As Dictionary(Of String, Object) = serializer.Deserialize(Of Dictionary(Of String, Object))(result)
If json.Count > 0 Then
Logger.Instance.LogResponse("200", result, True)
Logger.Instance.LogInfo("ورود موفق انجام شد")
Else
Logger.Instance.LogResponse("401", result, False)
Logger.Instance.LogInfo("ورود ناموفق - توکن نامعتبر")
End If
Return result
Catch ex As Exception
Logger.Instance.LogError("خطا در فرآیند ورود", ex)
Return ex.Message
End Try
End Function
Public Function syncPersons() As Boolean
' تنظیم SSL/TLS
ConfigureSSL()
Dim webClient As New Net.WebClient
webClient.Headers.Add("api-key", My.Settings.token)
Dim fullUrl As String = My.Settings.apiUrl + "/api/person/list"
' تنظیم timeout برای WebClient (از طریق ServicePointManager)
SetWebClientTimeout(fullUrl, 30000) ' 30 ثانیه
Dim headers As String = $"api-key: {My.Settings.token}"
' ثبت درخواست همگام‌سازی اشخاص
Logger.Instance.LogRequest("GET", fullUrl, headers, "")
Try
Dim result As String = webClient.DownloadString(fullUrl)
My.Settings.persons = result
Logger.Instance.LogResponse("200", result, True)
Logger.Instance.LogInfo("همگام‌سازی اشخاص موفق انجام شد")
Return True
Catch ex As Exception
Logger.Instance.LogError("خطا در همگام‌سازی اشخاص", ex)
Return False
End Try
End Function
Public Function getLastPrint() As String
' تنظیم SSL/TLS
ConfigureSSL()
Dim webClient As New Net.WebClient
webClient.Headers.Add("api-key", My.Settings.token)
webClient.Headers.Add("printer-key", My.Settings.printerToken)
Dim fullUrl As String = My.Settings.apiUrl + "/api/print/last"
' تنظیم timeout برای WebClient (از طریق ServicePointManager)
SetWebClientTimeout(fullUrl, 30000) ' 30 ثانیه
Dim headers As String = $"api-key: {My.Settings.token}, printer-key: {My.Settings.printerToken}"
' ثبت درخواست دریافت آخرین چاپ
Logger.Instance.LogRequest("GET", fullUrl, headers, "")
Try
Dim result As String = webClient.DownloadString(fullUrl)
Logger.Instance.LogResponse("200", result, True)
Logger.Instance.LogInfo("دریافت آخرین چاپ موفق انجام شد")
Return result
Catch ex As Exception
Logger.Instance.LogError("خطا در دریافت آخرین چاپ", ex)
Return ""
End Try
End Function
' متد async برای دریافت آخرین چاپ بدون مسدود کردن UI
Public Async Function getLastPrintAsync() As Task(Of String)
Return Await Task.Run(Function()
Return getLastPrint()
End Function)
End Function
Public Function downloadFile(ByVal name As String, ByVal type As String) As Boolean
' تنظیم SSL/TLS
ConfigureSSL()
Dim webClient As New Net.WebClient
webClient.Headers.Add("api-key", My.Settings.token)
Dim fileName As String = SpecialDirectories.CurrentUserApplicationData.ToString + "\" + type + ".pdf"
Dim fullUrl As String = My.Settings.apiUrl + "/front/print/" + name
' تنظیم timeout برای WebClient (از طریق ServicePointManager) - بیشتر برای دانلود فایل
SetWebClientTimeout(fullUrl, 60000) ' 60 ثانیه برای دانلود فایل
Dim headers As String = $"api-key: {My.Settings.token}"
' ثبت درخواست دانلود فایل
Logger.Instance.LogRequest("GET", fullUrl, headers, "")
Logger.Instance.LogInfo($"دانلود فایل: {name} (نوع: {type})")
Try
webClient.DownloadFile(fullUrl, fileName)
Logger.Instance.LogResponse("200", $"فایل با موفقیت دانلود شد: {fileName}", True)
Logger.Instance.LogInfo($"دانلود فایل {type} موفق انجام شد")
Return True
Catch ex As Exception
Logger.Instance.LogError($"خطا در دانلود فایل {name}", ex)
Return False
End Try
End Function
' متد async برای دانلود فایل بدون مسدود کردن UI
Public Async Function downloadFileAsync(ByVal name As String, ByVal type As String) As Task(Of Boolean)
Return Await Task.Run(Function()
Return downloadFile(name, type)
End Function)
End Function
End Class

52
App.config Normal file
View file

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="HesabixBox.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="HesabixBox.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<userSettings>
<HesabixBox.My.MySettings>
<setting name="activePrinter" serializeAs="String">
<value>0</value>
</setting>
<setting name="token" serializeAs="String">
<value>0</value>
</setting>
<setting name="printerToken" serializeAs="String">
<value>0</value>
</setting>
<setting name="persons" serializeAs="String">
<value/>
</setting>
<setting name="commodities" serializeAs="String">
<value/>
</setting>
<setting name="printerFastSellInvoice" serializeAs="String">
<value/>
</setting>
<setting name="printerFastSellCashdeskInvoice" serializeAs="String">
<value/>
</setting>
<setting name="printerSell" serializeAs="String">
<value/>
</setting>
</HesabixBox.My.MySettings>
</userSettings>
<applicationSettings>
<HesabixBox.My.MySettings>
<setting name="apiUrl" serializeAs="String">
<value>http://hesabix.ir</value>
</setting>
</HesabixBox.My.MySettings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
</configuration>

29
ApplicationEvents.vb Normal file
View file

@ -0,0 +1,29 @@
Imports Microsoft.VisualBasic.ApplicationServices
Namespace My
' The following events are available for MyApplication:
' Startup: Raised when the application starts, before the startup form is created.
' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally.
' UnhandledException: Raised if the application encounters an unhandled exception.
' StartupNextInstance: Raised when launching a single-instance application and the application is already active.
' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
' **NEW** ApplyApplicationDefaults: Raised when the application queries default values to be set for the application.
' Example:
' Private Sub MyApplication_ApplyApplicationDefaults(sender As Object, e As ApplyApplicationDefaultsEventArgs) Handles Me.ApplyApplicationDefaults
'
' ' Setting the application-wide default Font:
' e.Font = New Font(FontFamily.GenericSansSerif, 12, FontStyle.Regular)
'
' ' Setting the HighDpiMode for the Application:
' e.HighDpiMode = HighDpiMode.PerMonitorV2
'
' ' If a splash dialog is used, this sets the minimum display time:
' e.MinimumSplashScreenDisplayTime = 4000
' End Sub
Partial Friend Class MyApplication
End Class
End Namespace

106
AsyncHelper.vb Normal file
View file

@ -0,0 +1,106 @@
Imports System.Threading.Tasks
Imports System.Threading
''' <summary>
''' کلاس کمکی برای مدیریت عملیات async و threading
''' </summary>
Public Class AsyncHelper
''' <summary>
''' اجرای عملیات در background thread بدون مسدود کردن UI
''' </summary>
''' <param name="action">عملیاتی که باید اجرا شود</param>
Public Shared Sub RunInBackground(action As Action)
Task.Run(action)
End Sub
''' <summary>
''' اجرای عملیات async در background thread
''' </summary>
''' <param name="asyncAction">عملیات async که باید اجرا شود</param>
Public Shared Sub RunAsync(asyncAction As Func(Of Task))
Task.Run(asyncAction)
End Sub
''' <summary>
''' اجرای عملیات در UI thread از background thread
''' </summary>
''' <param name="control">کنترل UI</param>
''' <param name="action">عملیاتی که باید در UI thread اجرا شود</param>
Public Shared Sub RunOnUIThread(control As Control, action As Action)
If control.InvokeRequired Then
control.Invoke(action)
Else
action()
End If
End Sub
''' <summary>
''' اجرای عملیات async در UI thread از background thread
''' </summary>
''' <param name="control">کنترل UI</param>
''' <param name="asyncAction">عملیات async که باید در UI thread اجرا شود</param>
Public Shared Async Function RunOnUIThreadAsync(control As Control, asyncAction As Func(Of Task)) As Task
If control.InvokeRequired Then
Await Task.Run(Sub() control.Invoke(asyncAction))
Else
Await asyncAction()
End If
End Function
''' <summary>
''' ایجاد CancellationTokenSource با timeout
''' </summary>
''' <param name="timeoutMs">مدت timeout به میلی‌ثانیه</param>
''' <returns>CancellationTokenSource</returns>
Public Shared Function CreateTimeoutToken(timeoutMs As Integer) As CancellationTokenSource
Return New CancellationTokenSource(timeoutMs)
End Function
''' <summary>
''' اجرای عملیات با timeout
''' </summary>
''' <param name="action">عملیاتی که باید اجرا شود</param>
''' <param name="timeoutMs">مدت timeout به میلی‌ثانیه</param>
''' <returns>True اگر عملیات موفق باشد، False اگر timeout شود</returns>
Public Shared Async Function RunWithTimeout(action As Func(Of Task), timeoutMs As Integer) As Task(Of Boolean)
Using cts As CancellationTokenSource = CreateTimeoutToken(timeoutMs)
Try
Await Task.Run(action, cts.Token)
Return True
Catch ex As OperationCanceledException
Return False
End Try
End Using
End Function
''' <summary>
''' اجرای عملیات با retry در صورت خطا
''' </summary>
''' <param name="action">عملیاتی که باید اجرا شود</param>
''' <param name="maxRetries">حداکثر تعداد تلاش</param>
''' <param name="delayMs">تاخیر بین تلاش‌ها به میلی‌ثانیه</param>
''' <returns>True اگر عملیات موفق باشد</returns>
Public Shared Async Function RunWithRetry(action As Func(Of Task), maxRetries As Integer, delayMs As Integer) As Task(Of Boolean)
For i As Integer = 0 To maxRetries - 1
Try
Await action()
Return True
Catch ex As Exception
If i = maxRetries - 1 Then
Logger.Instance.LogError($"عملیات بعد از {maxRetries} تلاش ناموفق بود", ex)
Return False
End If
Logger.Instance.LogInfo($"تلاش {i + 1} ناموفق بود، تلاش مجدد در {delayMs} میلی‌ثانیه...")
End Try
' تاخیر خارج از Catch block
If i < maxRetries - 1 Then
Await Task.Delay(delayMs)
End If
Next
Return False
End Function
End Class

24
Box.sln Normal file
View file

@ -0,0 +1,24 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Box", "Box.vbproj", "{12345678-1234-1234-1234-123456789012}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{12345678-1234-1234-1234-123456789012}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{12345678-1234-1234-1234-123456789012}.Debug|Any CPU.Build.0 = Debug|Any CPU
{12345678-1234-1234-1234-123456789012}.Release|Any CPU.ActiveCfg = Release|Any CPU
{12345678-1234-1234-1234-123456789012}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1A01A3E9-13B7-445C-ABD2-F47C11A15818}
EndGlobalSection
EndGlobal

233
Form1.Designer.vb generated Normal file
View file

@ -0,0 +1,233 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class Form1
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1))
Me.MenuStrip1 = New System.Windows.Forms.MenuStrip()
Me.اصلیToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.btnHideWindow = New System.Windows.Forms.ToolStripMenuItem()
Me.btnCloseApplication = New System.Windows.Forms.ToolStripMenuItem()
Me.تنظیماتToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.btnPrinters = New System.Windows.Forms.ToolStripMenuItem()
Me.btnShowLog = New System.Windows.Forms.ToolStripMenuItem()
Me.دربارهToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.دربارهبرنامهToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.NotifyIcon1 = New System.Windows.Forms.NotifyIcon(Me.components)
Me.StatusStrip1 = New System.Windows.Forms.StatusStrip()
Me.statusLabel = New System.Windows.Forms.ToolStripStatusLabel()
Me.ToolStripStatusLabel1 = New System.Windows.Forms.ToolStripStatusLabel()
Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
Me.LogPanel = New System.Windows.Forms.Panel()
Me.LogTextBox = New System.Windows.Forms.TextBox()
Me.LogControlsPanel = New System.Windows.Forms.Panel()
Me.ToggleLogButton = New System.Windows.Forms.Button()
Me.SaveLogButton = New System.Windows.Forms.Button()
Me.ClearLogButton = New System.Windows.Forms.Button()
Me.LogLabel = New System.Windows.Forms.Label()
Me.MenuStrip1.SuspendLayout()
Me.StatusStrip1.SuspendLayout()
Me.LogPanel.SuspendLayout()
Me.LogControlsPanel.SuspendLayout()
Me.SuspendLayout()
'
'MenuStrip1
'
resources.ApplyResources(Me.MenuStrip1, "MenuStrip1")
Me.MenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.اصلیToolStripMenuItem, Me.تنظیماتToolStripMenuItem, Me.دربارهToolStripMenuItem})
Me.MenuStrip1.Name = "MenuStrip1"
'
'اصلیToolStripMenuItem
'
resources.ApplyResources(Me.اصلیToolStripMenuItem, "اصلیToolStripMenuItem")
Me.اصلیToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.btnHideWindow, Me.btnCloseApplication})
Me.اصلیToolStripMenuItem.Name = "اصلیToolStripMenuItem"
'
'btnHideWindow
'
resources.ApplyResources(Me.btnHideWindow, "btnHideWindow")
Me.btnHideWindow.Checked = True
Me.btnHideWindow.CheckState = System.Windows.Forms.CheckState.Checked
Me.btnHideWindow.Name = "btnHideWindow"
'
'btnCloseApplication
'
resources.ApplyResources(Me.btnCloseApplication, "btnCloseApplication")
Me.btnCloseApplication.Image = Global.HesabixBox.My.Resources.Resources.logo_blue_1fB_icon
Me.btnCloseApplication.Name = "btnCloseApplication"
'
'تنظیماتToolStripMenuItem
'
resources.ApplyResources(Me.تنظیماتToolStripMenuItem, "تنظیماتToolStripMenuItem")
Me.تنظیماتToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.btnPrinters, Me.btnShowLog})
Me.تنظیماتToolStripMenuItem.Name = "تنظیماتToolStripMenuItem"
'
'btnPrinters
'
resources.ApplyResources(Me.btnPrinters, "btnPrinters")
Me.btnPrinters.Name = "btnPrinters"
'
'btnShowLog
'
resources.ApplyResources(Me.btnShowLog, "btnShowLog")
Me.btnShowLog.Name = "btnShowLog"
'
'دربارهToolStripMenuItem
'
resources.ApplyResources(Me.دربارهToolStripMenuItem, "دربارهToolStripMenuItem")
Me.دربارهToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.دربارهبرنامهToolStripMenuItem})
Me.دربارهToolStripMenuItem.Name = "دربارهToolStripMenuItem"
'
'دربارهبرنامهToolStripMenuItem
'
resources.ApplyResources(Me.دربارهبرنامهToolStripMenuItem, "دربارهبرنامهToolStripMenuItem")
Me.دربارهبرنامهToolStripMenuItem.Name = "دربارهبرنامهToolStripMenuItem"
'
'NotifyIcon1
'
Me.NotifyIcon1.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info
resources.ApplyResources(Me.NotifyIcon1, "NotifyIcon1")
'
'StatusStrip1
'
resources.ApplyResources(Me.StatusStrip1, "StatusStrip1")
Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.statusLabel, Me.ToolStripStatusLabel1})
Me.StatusStrip1.Name = "StatusStrip1"
'
'statusLabel
'
resources.ApplyResources(Me.statusLabel, "statusLabel")
Me.statusLabel.Name = "statusLabel"
'
'ToolStripStatusLabel1
'
resources.ApplyResources(Me.ToolStripStatusLabel1, "ToolStripStatusLabel1")
Me.ToolStripStatusLabel1.Name = "ToolStripStatusLabel1"
'
'Timer1
'
Me.Timer1.Interval = 1000
'
'LogPanel
'
resources.ApplyResources(Me.LogPanel, "LogPanel")
Me.LogPanel.BackColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer))
Me.LogPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.LogPanel.Controls.Add(Me.LogTextBox)
Me.LogPanel.Controls.Add(Me.LogLabel)
Me.LogPanel.Name = "LogPanel"
'
'LogTextBox
'
resources.ApplyResources(Me.LogTextBox, "LogTextBox")
Me.LogTextBox.BackColor = System.Drawing.Color.White
Me.LogTextBox.Name = "LogTextBox"
Me.LogTextBox.ReadOnly = True
'
'LogControlsPanel
'
resources.ApplyResources(Me.LogControlsPanel, "LogControlsPanel")
Me.LogControlsPanel.BackColor = System.Drawing.Color.FromArgb(CType(CType(220, Byte), Integer), CType(CType(220, Byte), Integer), CType(CType(220, Byte), Integer))
Me.LogControlsPanel.Controls.Add(Me.ToggleLogButton)
Me.LogControlsPanel.Controls.Add(Me.SaveLogButton)
Me.LogControlsPanel.Controls.Add(Me.ClearLogButton)
Me.LogControlsPanel.Name = "LogControlsPanel"
'
'ToggleLogButton
'
resources.ApplyResources(Me.ToggleLogButton, "ToggleLogButton")
Me.ToggleLogButton.BackColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(120, Byte), Integer), CType(CType(215, Byte), Integer))
Me.ToggleLogButton.ForeColor = System.Drawing.Color.White
Me.ToggleLogButton.Name = "ToggleLogButton"
Me.ToggleLogButton.UseVisualStyleBackColor = False
'
'SaveLogButton
'
resources.ApplyResources(Me.SaveLogButton, "SaveLogButton")
Me.SaveLogButton.BackColor = System.Drawing.Color.FromArgb(CType(CType(100, Byte), Integer), CType(CType(200, Byte), Integer), CType(CType(100, Byte), Integer))
Me.SaveLogButton.ForeColor = System.Drawing.Color.White
Me.SaveLogButton.Name = "SaveLogButton"
Me.SaveLogButton.UseVisualStyleBackColor = False
'
'ClearLogButton
'
resources.ApplyResources(Me.ClearLogButton, "ClearLogButton")
Me.ClearLogButton.BackColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(100, Byte), Integer), CType(CType(100, Byte), Integer))
Me.ClearLogButton.ForeColor = System.Drawing.Color.White
Me.ClearLogButton.Name = "ClearLogButton"
Me.ClearLogButton.UseVisualStyleBackColor = False
'
'LogLabel
'
resources.ApplyResources(Me.LogLabel, "LogLabel")
Me.LogLabel.BackColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(120, Byte), Integer), CType(CType(215, Byte), Integer))
Me.LogLabel.ForeColor = System.Drawing.Color.White
Me.LogLabel.Name = "LogLabel"
'
'Form1
'
resources.ApplyResources(Me, "$this")
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.Controls.Add(Me.LogPanel)
Me.Controls.Add(Me.LogControlsPanel)
Me.Controls.Add(Me.StatusStrip1)
Me.Controls.Add(Me.MenuStrip1)
Me.IsMdiContainer = True
Me.MainMenuStrip = Me.MenuStrip1
Me.Name = "Form1"
Me.WindowState = System.Windows.Forms.FormWindowState.Maximized
Me.MenuStrip1.ResumeLayout(False)
Me.MenuStrip1.PerformLayout()
Me.StatusStrip1.ResumeLayout(False)
Me.StatusStrip1.PerformLayout()
Me.LogPanel.ResumeLayout(False)
Me.LogPanel.PerformLayout()
Me.LogControlsPanel.ResumeLayout(False)
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents MenuStrip1 As MenuStrip
Friend WithEvents اصلیToolStripMenuItem As ToolStripMenuItem
Friend WithEvents NotifyIcon1 As NotifyIcon
Friend WithEvents btnCloseApplication As ToolStripMenuItem
Friend WithEvents تنظیماتToolStripMenuItem As ToolStripMenuItem
Friend WithEvents btnPrinters As ToolStripMenuItem
Friend WithEvents btnShowLog As ToolStripMenuItem
Friend WithEvents دربارهToolStripMenuItem As ToolStripMenuItem
Friend WithEvents دربارهبرنامهToolStripMenuItem As ToolStripMenuItem
Friend WithEvents StatusStrip1 As StatusStrip
Friend WithEvents statusLabel As ToolStripStatusLabel
Friend WithEvents Timer1 As Timer
Friend WithEvents ToolStripStatusLabel1 As ToolStripStatusLabel
Friend WithEvents btnHideWindow As ToolStripMenuItem
Friend WithEvents LogPanel As Panel
Friend WithEvents LogLabel As Label
Friend WithEvents LogTextBox As TextBox
Friend WithEvents LogControlsPanel As Panel
Friend WithEvents ClearLogButton As Button
Friend WithEvents SaveLogButton As Button
Friend WithEvents ToggleLogButton As Button
End Class

927
Form1.fa-IR.resx Normal file
View file

@ -0,0 +1,927 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btnHideWindow.Size" type="System.Drawing.Size, System.Drawing">
<value>152, 22</value>
</data>
<data name="btnHideWindow.Text" xml:space="preserve">
<value>مخفی کردن</value>
</data>
<data name="btnCloseApplication.Size" type="System.Drawing.Size, System.Drawing">
<value>152, 22</value>
</data>
<data name="btnPrinters.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 22</value>
</data>
<data name="btnPrinters.Text" xml:space="preserve">
<value>تنظیمات اصلی</value>
</data>
<data name="دربارهبرنامهToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 22</value>
</data>
<data name="NotifyIcon1.BalloonTipTitle" xml:space="preserve">
<value>کاتب باکس</value>
</data>
<data name="NotifyIcon1.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA
IACoJQAA7h4AAAAAAAABACAAQFcAAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAAjLgAAIy4AAAAA
AAAAAAAAAAAAAHYcAQB0HAEDeBwBN3kcAH55HACbeRwAhngcAER2HAEHdxwBAHccARZ4HABqeBwAM3Qc
AwJ2HAIAAAAAAHQcAgBmHQYBeRwAZXocAOZ6HAD+ehwA/3ocAP96HADveRwAf3UcAQV2HAEMeRwAv3oc
AOV5HABaiRwAAHQcAgB3HAEAdxwBIHkcANt6HAD/ehwA7nkcALl6HADjehwA/3ocAO14HAA3gxwAAHkc
AKN6HAD/ehwA0XccARd3HAEAeBwAAHgcADV6HADxehwA/3kcAJtnHQYDeRwAeHocAP96HAD9eRwAV38c
AAB5HACeehwA/3ocAOt4HAAseBwAAHkcAAB4HAA2ehwA8XocAP95HACKexwAAHkcAGl6HAD/ehwA/nkc
AFp/HAAAeRwAnnocAP96HADseRwALnkcAAB5HAAAeRwANnocAPF6HAD/eRwAi3scAAB5HABlehwA/3oc
AP15HABWfxwAAHkcAJ56HAD/ehwA7HkcAC55HAAAeRwAAHkcADZ6HADxehwA/3kcAIt7HAAAeBwBLnkc
AMd5HAC/eBwBJIMdAAB5HACeehwA/3ocAOx5HAAueRwAAHkcAAB5HAA2ehwA8XocAP95HACLfRwAAG0c
AwB3HAESdxwBETMaGwD/rwAAeRwAnnocAP96HADseRwALnkcAAB5HAAAeRwANnocAPF6HAD/eRwAi30c
AABtHAIAdxwBDnccAQ2TGgAAAAD/AHkcAJ56HAD/ehwA7HkcAC55HAAAeRwAAHkcADZ6HADxehwA/3kc
AIt7HAAAeBwBKnkcAMB5HAC5eBwBIoQdAAB5HACeehwA/3ocAOx5HAAueRwAAHkcAAB5HAA2ehwA8Xoc
AP95HACLexwAAHkcAGR6HAD/ehwA/HkcAFR/HAAAeRwAnnocAP96HADseRwALnkcAAB5HAAAeRwANnoc
APF6HAD/eRwAi3scAAB5HABpehwA/3ocAP15HABYfxwAAHkcAJ56HAD/ehwA7HkcAC55HAAAeRwAAHgc
ADV6HADxehwA/3kcAIt7HAAAeRwAZnocAP96HAD/eRwAZWYcBQN5HACqehwA/3ocAOt4HAAseBwAAHgc
AQB3HAEhehwA3XocAP95HACSfBwAAHgcAEZ6HAD1ehwA/3ocANt5HACxehwA73ocAP96HADTdxwBGHcc
AQB1HAEAbhsDAXkcAGt6HADueRwAsnQcAgZ3HAEKeRwAkXocAPR6HAD/ehwA/3ocAP96HADleRwAXpcb
AAB0HAIAAAAAAHYcAQB1HAEFeBwAQHgcAHF1HAERdhwBAHccAQt4HABReRwAkHkcAJ55HACCeBwAOHQd
AgN2HAEAAAAAAMBDAACAAwAAgCEAAIAhAACEIQAAhCEAAIQhAACGYQAAhmEAAIQhAACEIQAAhCEAAIQB
AACEAQAAgAMAAMIDAAAoAAAAGAAAADAAAAABACAAAAAAAAAJAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA
AAAAAAAAaCAJAIQZAAB0HAIMdxwBNHgcAVd4HAFjdxwBUHYcASpzHQIGdhwBACogEgBxHAIAcB0CAXYc
ATV3HAEydRwBCnocAABjHQQAAAAAAAAAAAAAAAAAAAAAAAAAAAB0HAEAcRwCA3ccAUp5HAC2eRwA6Xoc
APh6HAD7ehwA9nkcAOF5HACfdxwBL4gbAABxHAIAfRwAAHgcAGp5HADmeRwArngcAUBvHQMBdRwCAAAA
AAAAAAAAAAAAAHAcAwCDHAAAeBwBXHkcAO16HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/eRwA1Xcc
ATF4HAAAeBwBAHccATV6HADvehwA/3ocAOV4HAFKfBwAAG4cAgAAAAAAAAAAAHYcAQB2HAEYeRwAz3oc
AP96HAD/ehwA/3ocAPd5HADsehwA+3ocAP96HAD/ehwA/3kcAJ5uHAMDdhwBAHYcAR95HADfehwA/3oc
AP95HAC+dR0CDnYdAQAAAAAAAAAAAHgcAQB3HAE9eRwA9HocAP96HAD/eRwA7XgcAWF3HAEqeBwBg3oc
APt6HAD/ehwA/3kcANR2HAEWdRwBAHUcARl5HADaehwA/3ocAP96HADpdxwBK3ccAQAAAAAAAAAAAHgc
AAB4HABFehwA93ocAP96HAD/eRwAx3UcAQ53HAEAdxwBMHkcAO16HAD/ehwA/3kcAN92HAEedhwBAHUc
ARl5HADaehwA/3ocAP96HADxeBwANngcAAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHUc
AQt2HAEAdxwBLnkcAOx6HAD/ehwA/3kcAN92HAEedhwBAHUcARl5HADaehwA/3ocAP96HADxeBwAN3gc
AAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHYcAQt3HAEAdxwBLnocAOx6HAD/ehwA/3oc
AN92HAEedhwBAHYcARl5HADaehwA/3ocAP96HADxeBwAN3gcAAAAAAAAAAAAAHkcAAB4HABEehwA93oc
AP96HAD/eRwAxHUcAQt2HAEAdhwBKnkcAOl6HAD/ehwA/3kcANt3HAEbdhwBAHYcARl5HADaehwA/3oc
AP96HADxeBwAN3gcAAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHUcAQt1HAEAdRwBDXkc
ALJ6HAD/ehwA/3kcAJ50HAIGdRwBAHYcARl5HADaehwA/3ocAP96HADxeBwAN3gcAAAAAAAAAAAAAHkc
AAB4HABEehwA93ocAP96HAD/eRwAxHUcAQt1HAEAehwAAHYcASB5HABxeBwAanccARh4HAEAdRwBAHYc
ARl5HADaehwA/3ocAP96HADxeBwAN3gcAAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHUc
AQt1HAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdRwBAHYcARl5HADaehwA/3ocAP96HADxeBwAN3gc
AAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHUcAQt1HAEAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAdRwBAHUcARl5HADaehwA/3ocAP96HADxeBwAN3gcAAAAAAAAAAAAAHkcAAB4HABEehwA93oc
AP96HAD/eRwAxHUcAQt1HAEAeRwAAHYcARt4HABjeBwBXXYcARR3HAEAdRwBAHUcARl5HADaehwA/3oc
AP96HADxeBwAN3gcAAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHUcAQt2HAEAdRwBC3kc
AKp6HAD/ehwA/nkcAJdzHAIFdRwBAHUcARl5HADaehwA/3ocAP96HADxeBwAN3gcAAAAAAAAAAAAAHkc
AAB4HABEehwA93ocAP96HAD/eRwAxHUcAQt2HAEAdxwBKXocAOh6HAD/ehwA/3ocANl3HAEZdhwBAHYc
ARl5HADaehwA/3ocAP96HADxeBwAN3gcAAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHYc
AQt3HAEAdxwBLnocAOx6HAD/ehwA/3ocAN53HAEddhwBAHYcARl5HADaehwA/3ocAP96HADxeBwAN3gc
AAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHUcAQt3HAEAdxwBLnocAOx6HAD/ehwA/3oc
AN13HAEddhwBAHUcARl5HADaehwA/3ocAP96HADxeBwAN3gcAAAAAAAAAAAAAHkcAAB4HABFehwA93oc
AP96HAD/eRwAxHUcAQt3HAEAdxwBLnkcAOx6HAD/ehwA/3ocAN53HAEedhwBAHYcARt5HADbehwA/3oc
AP96HADxeBwAN3gcAAAAAAAAAAAAAHgcAAB3HAE+ehwA9HocAP96HAD/eRwAxHUcAQx2HAEAdhwBJHkc
AON6HAD/ehwA/3ocAPR4HABpdxwBHngcAWV6HADzehwA/3ocAP96HADrdxwBLXccAQAAAAAAAAAAAHYc
AQB2HAEaeRwA03ocAP96HAD/eRwAz3UcARJ1HAEAdRwCC3kcALd6HAD/ehwA/3ocAP96HAD2ehwA43oc
APZ6HAD/ehwA/3ocAP95HADCdRwBD3YcAQAAAAAAAAAAAHIcAgCJHAAAeBwAY3ocAPF6HAD/eRwA4ncc
ASN3HAEAehwAAHgcAUZ5HADlehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3kcAOl4HAFPfBwAAG8d
BAAAAAAAAAAAAAAAAAB2HAEAdBwBBHgcAVZ5HADCeRwA6nccAVZ6HAAAchwCAGscAwF4HAFBeRwAs3kc
AOp6HAD6ehwA/HocAPp6HADreRwAt3gcAUdvHAICcxwCAAAAAAAAAAAAAAAAAAAAAAAAAAAAbhsDAJUg
AAB2HAESdxwBQnYcATabHAAAbRwDAGUfCQB9GgAAdRwBDHccATd4HABdeBwAZ3gcAF13HAE4dRwBDYAb
AABoHgcAAAAAAAAAAAAAAAAA+A4fAOAHBwDgAwcAwAEDAMABAwDAgQMAwIEDAMCBAwDAgQMAwIEDAMDD
AwDA/wMAwP8DAMDDAwDAgQMAwIEDAMCBAwDAgQMAwIEDAMCAAwDAgAMA4MAHAODABwD48B8AKAAAACAA
AABAAAAAAQAgAAAAAAAAEAAAIy4AACMuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGUc
BAClHQAAcRwDCXUcAR12HAEvdRwBMnYcASRzHAIPZx0IAWscBQAAAAAAAAAAAAAAAAAAAAAAdhwBAHUc
AQ91HAEccRwCB38cAABkHAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8c
AgApEg0AdRwBIXccAXF5HAC0eRwA13kcAOd5HADpeRwA3nkcAMR4HAGLdxwBN3AcAgRzHAEAAAAAAAAA
AAB2HAEAdhwBK3gcAL95HACveBwAZnYcARmPGAAAZyAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAByHAIAbBwEAnccAVN5HADUehwA/nocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP95HADseBwAg3Mc
Ag51HAEAAAAAAHMcAgBxHAIGeRwArXocAP96HAD8eRwAyXccAUKRHQAAcxwBAAAAAAAAAAAAAAAAAAAA
AAAAAAAAbR0FAHscAAB2HAFNeRwA6nocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP95HAD8eBwAhm8cAwRzHAIAYx0GAH0cAAB4HAF7ehwA/3ocAP96HAD/eRwA3XccATd5HAAAbhwCAAAA
AAAAAAAAAAAAAAAAAAB0HAEAdBwBEHkcAMB6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP95HADrdxwBOHccAQAAAAAAeRwAAHccAVt6HAD9ehwA/3ocAP96HAD/eRwApnAd
AwZzHQMAAAAAAAAAAAAAAAAAAAAAAHccAQB2HAE8eRwA8nocAP96HAD/ehwA/3ocAP95HADceBwBhHgc
AXV5HAC7ehwA/XocAP96HAD/ehwA/3ocAP94HAF6fRwAAG0dBgB4HAAAdxwBUHocAPt6HAD/ehwA/3oc
AP95HADidhwBI3YcAQAAAAAAAAAAAAAAAAAAAAAAeBwAAHccAVN5HAD8ehwA/3ocAP96HAD/eRwA+Hcc
AVd9HAAAdhwBAHUcAh55HADVehwA/3ocAP96HAD/ehwA/3gcAJz/AAAAbR0EAHgcAAB3HAFOehwA+noc
AP96HAD/ehwA/3ocAPN3HAE7dxwBAAAAAAAAAAAAAAAAAAAAAAB4HAAAdxwAVHocAPx6HAD/ehwA/3oc
AP95HADsdxwBL3ccAQBzHAIAchwCCnkcAMB6HAD/ehwA/3ocAP96HAD/eBwAo1MeCQFsHQQAeBwAAHcc
AU96HAD6ehwA/3ocAP96HAD/ehwA9XgcAEB4HAAAAAAAAAAAAAAAAAAAAAAAAHkcAAB4HABUehwA/Hoc
AP96HAD/ehwA/3kcAOx3HAAudxwAAHIcAQBxHAIKeBwAv3ocAP96HAD/ehwA/3ocAP94HACjVB4IAWwd
BAB4HAAAdxwBT3ocAPp6HAD/ehwA/3ocAP96HAD1eBwAQHgcAAAAAAAAAAAAAAAAAAAAAAAAeRwAAHgc
AFR6HAD8ehwA/3ocAP96HAD/ehwA7HccAS53HAEAchwBAHIcAgp5HAC/ehwA/3ocAP96HAD/ehwA/3gc
AKNVHgkBbB0EAHgcAAB3HAFOehwA+nocAP96HAD/ehwA/3ocAPV4HABAeBwAAAAAAAAAAAAAAAAAAAAA
AAB5HAAAeBwAVHocAPx6HAD/ehwA/3ocAP96HADsdxwBLnccAQBzHAIAchwCCnkcAL96HAD/ehwA/3oc
AP96HAD/eRwAo1QeCQFsHQQAeBwAAHccAU96HAD6ehwA/3ocAP96HAD/ehwA9XgcAEB4HAAAAAAAAAAA
AAAAAAAAAAAAAHkcAAB4HABUehwA/HocAP96HAD/ehwA/3ocAOx3HAEudxwBAHEcAgBvHAMHeBwAuHoc
AP96HAD/ehwA/3ocAP95HACa/wAAAGweBQB4HAAAdxwBT3ocAPp6HAD/ehwA/3ocAP96HAD1eBwAQHgc
AAAAAAAAAAAAAAAAAAAAAAAAeRwAAHgcAFR6HAD8ehwA/3ocAP96HAD/ehwA7HccAC53HAAAbh0FAIcb
AAB4HAF6ehwA/nocAP96HAD/ehwA+HgcAVx6HAAAbiAJAHgcAAB3HAFPehwA+nocAP96HAD/ehwA/3oc
APV4HABAeBwAAAAAAAAAAAAAAAAAAAAAAAB5HAAAeBwAVHocAPx6HAD/ehwA/3ocAP96HADsdxwBLncc
AQAAAAAAdRwBAHQcARR4HACPeRwA3HkcANd4HAF7dBwCCnUcAQAAAAAAeBwAAHccAU96HAD6ehwA/3oc
AP96HAD/ehwA9XgcAEB4HAAAAAAAAAAAAAAAAAAAAAAAAHkcAAB4HABUehwA/HocAP96HAD/ehwA/3oc
AOx3HAAudxwAAAAAAAAAAAAAdBwCAHEcAwV2HAEbdhwBGHAcAgNyHAEAAAAAAAAAAAB4HAAAdxwBTnoc
APp6HAD/ehwA/3ocAP96HAD1eBwAQHgcAAAAAAAAAAAAAAAAAAAAAAAAeRwAAHgcAFR6HAD8ehwA/3oc
AP96HAD/eRwA7HccAS53HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgc
AAB3HAFPehwA+nocAP96HAD/ehwA/3ocAPV4HABAeBwAAAAAAAAAAAAAAAAAAAAAAAB5HAAAeBwAVHoc
APx6HAD/ehwA/3ocAP95HADsdxwBLnccAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAeBwAAHccAU95HAD6ehwA/3ocAP96HAD/ehwA9XgcAUB4HAAAAAAAAAAAAAAAAAAAAAAAAHkc
AAB4HABUehwA/HocAP96HAD/ehwA/3kcAOx3HAEudxwAAAAAAAAAAAAAch0DAHEdAwN1HAIRdRwCD20d
BAFvHAMAAAAAAAAAAAB4HAAAdxwBT3kcAPp6HAD/ehwA/3ocAP96HAD1eBwAQHgcAAAAAAAAAAAAAAAA
AAAAAAAAeRwAAHgcAFR6HAD8ehwA/3ocAP96HAD/ehwA7HccAS53HAAAAAAAAHUcAQB0HAIPeBwAgXkc
AM15HADJdxwBbnMcAgh0HAIAAAAAAHgcAAB3HAFPehwA+nocAP96HAD/ehwA/3ocAPV4HABAeBwAAAAA
AAAAAAAAAAAAAAAAAAB5HAAAeBwAVHocAPx6HAD/ehwA/3ocAP96HADsdxwBLnccAQBvHAMAfhwAAHgc
AXF6HAD8ehwA/3ocAP95HAD1dxwBVnocAABwHAMAeBwAAHccAU96HAD6ehwA/3ocAP96HAD/ehwA9Xgc
AEB4HAAAAAAAAAAAAAAAAAAAAAAAAHkcAAB4HABUehwA/HocAP96HAD/ehwA/3ocAOx3HAEudxwAAHEc
AwBvHAMGeBwAtHocAP96HAD/ehwA/3ocAP95HACWmBwAAG4cAwB4HAAAdxwBTnocAPp6HAD/ehwA/3oc
AP96HAD1eBwAQHgcAAAAAAAAAAAAAAAAAAAAAAAAeRwAAHgcAFR6HAD8ehwA/3ocAP96HAD/ehwA7Hcc
AS53HAEAcxwCAHIcAgp5HAC/ehwA/3ocAP96HAD/ehwA/3kcAJ9BHg4BbR0EAHgcAAB3HAFPehwA+noc
AP96HAD/ehwA/3ocAPV4HABAeBwAAAAAAAAAAAAAAAAAAAAAAAB5HAAAeBwAVHocAPx6HAD/ehwA/3oc
AP96HADsdxwBLnccAQByHAIAchwCCnkcAL96HAD/ehwA/3ocAP96HAD/eRwAoEMhDgFtHQQAeBwAAHcc
AU96HAD6ehwA/3ocAP96HAD/ehwA9XgcAEB4HAAAAAAAAAAAAAAAAAAAAAAAAHkcAAB4HABUehwA/Hoc
AP96HAD/ehwA/3ocAOx3HAEudxwBAHMcAgByHAIKeRwAv3ocAP96HAD/ehwA/3ocAP95HACfOyEPAW0d
AwB4HAAAdxwBT3ocAPp6HAD/ehwA/3ocAP96HAD1eBwAQHgcAAAAAAAAAAAAAAAAAAAAAAAAeRwAAHgc
AFR6HAD8ehwA/3ocAP96HAD/eRwA7HccAS53HAEAcxwCAHIcAgp5HAC/ehwA/3ocAP96HAD/ehwA/3kc
AJ4sHxIAbB0DAHgcAAB3HAFPehwA+3ocAP96HAD/ehwA/3ocAPV4HABAeBwAAAAAAAAAAAAAAAAAAAAA
AAB5HAAAdxwBU3ocAPx6HAD/ehwA/3ocAP95HADsdxwBLnccAQBxHAIAbxwDB3gcALh6HAD/ehwA/3oc
AP96HAD/eRwAuHIdAgxzHAIAgRwAAHccAWx6HAD+ehwA/3ocAP96HAD/ehwA9HccATx3HAEAAAAAAAAA
AAAAAAAAAAAAAHccAQB2HAE+eRwA83ocAP96HAD/ehwA/3kcAO12HAEwdxwBAG4dBAA/HxEBeBwAnXoc
AP96HAD/ehwA/3ocAP96HAD3eBwAnngcAVt4HAF8eRwA4HocAP96HAD/ehwA/3ocAP95HADkdhwBJnYc
AQAAAAAAAAAAAAAAAAAAAAAAdBwCAHQcAhN5HADGehwA/3ocAP96HAD/eRwA9XccAUB3HAEAbh0EAHoc
AAB4HAFWehwA+HocAP96HAD/ehwA/3ocAP96HAD/ehwA/XocAP56HAD/ehwA/3ocAP96HAD/ehwA/3gc
AK1yHAIHdBwCAAAAAAAAAAAAAAAAAAAAAABsHAMAfhwAAHccAVZ5HADvehwA/3ocAP96HAD9dxwBWXkc
AAAAAAAAdRwBAHUcAg14HACpehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP95HADjdxwBPXocAABYIA8AAAAAAAAAAAAAAAAAAAAAAAAAAAB0HAEAcRwCA3ccAWJ5HADgehwA/3oc
AP94HACNnBoAAHAdAwBqHAQAdxwAAHUcAR14HACjehwA9nocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD+eRwA0nccAUtbHAgBchwCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwHQQAah4HAXYc
ASt4HAGCeRwAxngcAbtzHAIacxwCAAAAAABdHAoAdxwAAHQdAgt3HAFQeBwAo3kcANN5HADoeRwA7Hkc
AOp5HADdeRwAuHgcAHN1HAEg/wAAAG0eBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAaxwEAGcdBgF0HAIQdRwBKXIcAg1zHAEAAAAAAAAAAAAAAAAAXBsGAHQdAwBvHQMFdRwBGncc
ATB3HAE3dhwBNHYcASNzHAILOxUIAGUbBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Afj//AB4P/AA
OB/wABwP4AAcB+AAHAfgMBwH4DAMB+AwDAfgMAwH4DAMB+AwHAfgOBwH4DgcB+A8PAfgP/wH4D/8B+A8
PAfgOBwH4DgcB+AwHAfgMAwH4DAMB+AwDAfgMBwH4DAMB+AwAAfgOAAH8DgAD/A8AA/4HgA//h+A/ygA
AAAwAAAAYAAAAAEAIAAAAAAAACQAACMuAAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdOQAAHT8AFCIsABwjIwAbV80ACmm8AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpHAMAahwEAGscBABsHAQAbBwEAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeIQ8A/wAAAHAcAwl0HAIqdhwBVXccAXh4HAGUdxwBnXcc
AZt3HAGHdhwBZ3UcAUJyHAMZah4EAm0dAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuHAIAex0AAHUc
AT12HAF2dhwBTXQcASNwHAIFdRwAAAAaSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYxsFAHodAAByHAISdhwBYXgcAbV5HADmeRwA/Hoc
AP96HAD/ehwA/3ocAP95HAD/ehwA/nkcAPV4HADUdxwBiXUcATJpHAMDbxwCAAAAAAAAAAAAAAAAAAAA
AABxHAIAdhwBAHUcAS95HADieRwA+3kcAOB4HACmdhwBTXIcAwp3GwAAZSANAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsHAQATB0NAHUcATp4HAC6eRwA+noc
AP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3kcAOZ2HAF7chwCDnQc
AgAAAAAAAAAAAAAAAAAAAAAAcB0DAGMdBwJ4HAGcehwA/3ocAP96HAD/ehwA9HgcAaZ0HAIofhwAAGce
BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoeCACxFgAAdRwBTXkc
AOB6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD7dxwBnHIcAhFzHAIAAAAAAAAAAAAAAAAAaRwFAHkcAAB2HAFgehwA/XocAP96HAD/ehwA/3oc
AP95HADKdhwBL3ocAABsHAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZB8KAHYc
AQB0HAIweBwA23ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/eRwA/HccAYBlHAUCcRwCAAAAAAAAAAAAAAAAAHccAQB1HAI9eRwA83oc
AP96HAD/ehwA/3ocAP96HAD/eBwBvXMcAhd0HAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAcBwDAGkcBAR3HAGcehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3kcAOZ1HAEzdhwBAAAAAAAAAAAAAAAAAHQc
AgB0HAIjeRwA4XocAP96HAD/ehwA/3ocAP96HAD/ehwA/XccAXCEGgAAbCAJAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAdRwBAHQcASh5HADjehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP95HAD6eRwA8HocAPR5HAD+ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP93HAGDhxwAAG8c
AwAAAAAAAAAAAHIcAgByHAIZeRwA2HocAP96HAD/ehwA/3ocAP96HAD/ehwA/3gcAcZyHQMQcx0DAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeRwAAHYcAVx5HAD8ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3gcAcR2HAFadhwCNnUcAkB3HAGGeRwA7HocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP94HAG6bRwDCXAcAwAAAAAAAAAAAHEcAgBxHAIVeRwA0nocAP96HAD/ehwA/3ocAP96HAD/ehwA/3kc
AOp1HAEudhwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAexwAAHYcAXN5HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/eBwB3XMdAyx2HAEAYx4KAHAbAwBRGgsBdxwBe3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP95HADVcxwCF3QcAgAAAAAAAAAAAHEcAwBxHAMVeBwA0nocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAPh1HAFJdhwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAexwAAHcc
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
AP95HADadB0CHHQdAgAAAAAAAAAAAHEcAgBxGwIVeRwA0nocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
APx3HAFUeBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAexwAAHccAHR6HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/eBwAoEYdCwFyHAIAAAAAAAAAAAB2HAEAdRwBQHkcAPV6HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP95HADadB0BHHQdAQAAAAAAAAAAAHEcAgBxHAIVeRwA0nocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3kcAPx3HAFUeBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAexwAAHcc
AHR6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/eBwAoEQbCQFxHAIAAAAAAAAAAAB2HAEAdRwBQHkc
APV6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP95HADZdBwBG3QcAQAAAAAAAAAAAHEcAgBxHAIVeBwA0noc
AP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAPx3HAFUeBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAexwAAHgcAXR6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/eBwAoEIbCgFxHAIAAAAAAAAA
AAB2HAEAdRwBQHkcAPV6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP95HADZdRwBGnUcAQAAAAAAAAAAAHEc
AgBxHAIVeRwA0nocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAPx3HAFUeBwAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAexwAAHccAHR6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/eBwAoEIb
CgFxHAIAAAAAAAAAAAB1HAEAdRwBQHkcAPV6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP95HADcdBwBHXQc
AQAAAAAAAAAAAHEcAgBxHAIXeBwA1XocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAPx3HAFUeBwBAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAexwAAHccAXR6HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/eBwAoD4bDAFxHAIAAAAAAAAAAAB0HAEAdBwBM3kcAO16HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP95HADydR0BSHkcAABpHQUAah0DAHgcAQB0HAE+eRwA7HocAP96HAD/ehwA/3ocAP96HAD/ehwA/3kc
APl2HAJNdxwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeRwAAHYcAVx5HAD9ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/eBwAoD4bDAFxHAIAAAAAAAAAAABzHAIAcxwCIXkcAOB6HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/eBwA0HYcAVh1HAEidRwCInYcAVR4HADLehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3kcAO11HAEydRwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdBwCAHQc
Ai95HADoehwA/3ocAP96HAD/ehwA/3ocAP96HAD/dxwBsGgcBQZuHAMAAAAAAAAAAABxHQQAbx0ECngc
AbZ6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAPh5HADheRwA4HkcAPh6HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/ehwA/3gcAMpzHAITcxwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAcB0DAG0dBAd4HAGmehwA/3ocAP96HAD/ehwA/3ocAP96HAD/eBwAxHEcAg1yHAIAAAAAAAAA
AABuHAQAexwAAHccAWF6HAD6ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ccAXyMHAAAbxwDAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAahsEAHgcAQB1HAE5eRwA5HocAP96HAD/ehwA/3ocAP96HAD/eBwA1nIc
AhhyHAIAAAAAAAAAAAAAAAAAdBwCAHIcAhF4HAC0ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/eBwAxXQcAhx1HAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8cBABbHAwBdxwBW3kcAOl6HAD/ehwA/3oc
AP96HAD/eRwA7XUcATN2HAEAAAAAAAAAAAAAAAAATxsQAHccAQB0HAEueBwAynocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP94HADWdRwBO3gc
AABtHQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByHAEAbRwBAnYc
AVJ4HAHRehwA/XocAP96HAD/ehwA/nYcAWt8GwAAZx4HAAAAAAAAAAAAAAAAAGkcBACAHAAAdRwBJngc
Aap5HAD2ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/eRwA+Xgc
AbZ1HAExlRwAAGwcBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAah0FAP8QAAB0HAIedxwBd3gcAMt5HADzehwA/3gcAcBwHQMScRwDAAAAAAAAAAAAAAAAAAAA
AAA9MCgAeRoAAHEdAwx2HAFWeBwAsXkcAOl5HAD9ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/Xkc
AOp4HAC3dhwBYHIdAxF+GgAAXiMSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoHAUAWB4LAHIdAxV1HAFAdxwBcXYcAY9yHAIrcxwBAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkdBQB2GwAAcBwCCXQcAi52HAFddxwBh3gcAZ14HACkeBwAo3gc
AJx4HAGHdxwBX3UcATBwHAILhxoAAFIeCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaBsEAGEb
BgFsHAMBbRsCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoFzcAJho5AEMe
FAFdGwcCWhsGAjQXCQEjFhAAKxYNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD///////8AAP/gAf8H/wAA/4AAfwH/AAD/AAA/AP8AAP4AAB+AfwAA/AAAD4A/
AAD4AAAPgD8AAPgAAA+AHwAA+AAAB4AfAAD4AcAHgB8AAPgB4AeAHwAA+AHgB4AfAAD4AeAHgB8AAPgB
4AeAHwAA+AHgB4AfAAD4AeAHgB8AAPgB4AeAHwAA+AHgB4AfAAD4AeAHgB8AAPgB8A+AHwAA+AHwH4Af
AAD4Afw/gB8AAPgB//+AHwAA+AH//4AfAAD4Af//gB8AAPgB//+AHwAA+AH8P4AfAAD4AfAfgB8AAPgB
8A+AHwAA+AHgB4AfAAD4AeAHgB8AAPgB4AeAHwAA+AHgB4AfAAD4AeAHgB8AAPgB4AeAHwAA+AHgB4Af
AAD4AeAHgB8AAPgB4AeAHwAA+AHgB4AfAAD4AeAAAB8AAPgB4AAAHwAA+AHwAAA/AAD8AfAAAD8AAPwB
+AAAfwAA/gH8AAD/AAD/gP4AAf8AAP/g/4AH/wAA//z/+H//AACJUE5HDQoaCgAAAA1JSERSAAABAAAA
AQAIBgAAAFxyqGYAAFcHSURBVHja7b15vC1HXS/6/VX3WnvvM2YmydknCRkBiUC8KOAAgvh5PJyCch+T
JoCQAWJU+CB6vd57uT6vV69ihAwkEDEyyPDUiyOCVxkUUCZRpoQpZ58TIOOZ9tl7rdVdv/dHd/Wqrq6q
rl5rn11r56wvnOxV3VXVVb+u4TdWA3PMMcccc8wxxxxzzDHHHHPMMcccc8wxxxxzzDHHwxMUuwFbBSdf
9BJCfgTrQ4LkbZRTn4AeuCAhCxryaOVWjt3OWcHpF11JBICzw1gbjjDCqSTRB0SfGASQgJQMAiHnHvfp
yKkA9gD8ACCWAN7B4K/mvHgUQDFSmcGQEGCAGAlGnPAqCwywKA5hadcjAQD7P//m+XsIxHwB8GBh71WC
kZw8lIu81B9cLnMWmURKoEcz06WgZImBBODPJbT230crt30jdptjY2HvVWnO6W6JhWQxHfzIKKcVZj4V
jEsZ4lEQyVlgQSACczFPGQCYFgm8nYnWAU4J6DHoMIAhwACrOc0gKtIE+UUi/jSAo4z0U9sX5RMGo/TD
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
</value>
</data>
<data name="NotifyIcon1.Text" xml:space="preserve">
<value>کاتب باکس</value>
</data>
<data name="ToolStripStatusLabel1.Size" type="System.Drawing.Size, System.Drawing">
<value>211, 17</value>
</data>
<data name="ToolStripStatusLabel1.Text" xml:space="preserve">
<value>این افزونه رایگان و متن باز منتشر می شود.</value>
</data>
<data name="StatusStrip1.Size" type="System.Drawing.Size, System.Drawing">
<value>800, 22</value>
</data>
<data name="StatusStrip1.Text" xml:space="preserve">
<value>StatusStrip1</value>
</data>
<data name="LogTextBox.Font" type="System.Drawing.Font, System.Drawing">
<value>Consolas, 9pt</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LogTextBox.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
<value>Vertical</value>
</data>
<data name="LogPanel.Location" type="System.Drawing.Point, System.Drawing">
<value>347, 106</value>
</data>
<data name="ToggleLogButton.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
<value>Flat</value>
</data>
<data name="SaveLogButton.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
<value>Flat</value>
</data>
<data name="ClearLogButton.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
<value>Flat</value>
</data>
<data name="LogControlsPanel.Location" type="System.Drawing.Point, System.Drawing">
<value>126, 106</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACAAAAAgAAAAIAAA
ACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAADAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXFRQU4CMi
IuAkIyPgJCMj4CQjI+AkIyPgJCMj4CQjI+AkIyPgJCMj4CQjI+AkIyPgIyIi4BUUFOAAAABXAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AEgxLy/2WFVV/zw6Ov04Njb9ODY2/Tg2Nv04Njb9ODY2/Tg2Nv04Njb9ODY2/T07O/1ZVlb/MS8v9gAA
AEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAKSYlJeZRTk7/OTg4/KOjo/2qqqr+qqqq/qqqqv6qqqr+qqqq/qurq/6goKD9NjU1/FNQ
UP8mJSXmAAAAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAATGxoazlFOTv9EQ0P76urq/v///////////////////////////////+Xl
5f5BQED7UlBQ/xsaGs4AAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUREBCuTktL/zs5OfvX19f9////////////////////////
////////09PT/Tk4OPxPTEz/ERAQrQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAHAAAAKwAAADAAAAAwAAAALgcHB6NHRUX/ODc3/MDAwP3/////////////
//////////////////+8vLz9ODc3/EdFRf8HBwejAAAALgAAADAAAAAwAAAAKwAAAAcAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsZGBjZOTc36zAuLuomJiXrOzs68j48PP08Ojr8paWl/P//
/////////////////////////////6Ojo/w8Ojr8Pjw8/Ts7OvImJiXqMC8v6jk3N+sZGBjZAAAAKwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDk4N+uEgYD/b2xs/ldWVfycm5n8KCcn/CYl
JfxVVVX8lpaW/ZSUlP2UlJT9k5OT/ZOTk/2VlZX9VFRU/CYlJfwoJyf8m5uZ/FZWVPtvb2z/g4V//zk4
N+sAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwOTg36oSBgP9vbGz+VVRT/MXE
wf6Yl5X8kZGO/JGQjvyQj438kI+N/JCPjfyQj438kI+N/JCPjfyRkI78kpGP/JiXlfzFxMH9VFJS+2x4
aP97mXb/OTg36gAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA5ODfqhIGA/29s
bP5UU1L80M/M/tXU0f/V1NH/1dTR/9XU0f/V1NH/1dTR/9XU0f/V1NH/1dTR/9XU0f/V1NH/1dTR/8/O
y/5TUlD7bm18/3+Ao/85ODfqAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDk4
N+qEgYD/b2xs/lVUU/zS0c7+1dTR/9XU0f/V1NH/1dTR/9XU0f/V1NH/1dTR/9XU0f/V1NH/1dTR/9XU
0f/V1NH/0tHO/lRTUftpc37/dY+q/zk4N+oAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAwOTg36oSBgP92c3L+PDs7+2lpZ/xtbGv8bGtq/GxravxtbGv8bGtq/Gxravxsa2r8bGtq/Gxr
avxsa2r8bGtq/GxravxpaGf8PDo5+25+gv5xmKT/OTg36gAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAADA5ODfqg4B//357ev9jYF/+XVpa/lVTUv5aWFj+WVdX/lVTU/5fXFz+YF1d/mBd
Xf5gXV3+YF1d/mBdXf5gXV3+YF1d/mBdXf5ua2v+g39+/4SAfv85ODfqAAAAMAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAMDk4N+qEgYD/Z2Rk/0NBQf91cnL/RkVE/2RiYf9fXV3/SUdH/4F+
ff+FgoH/hYKB/4WCgf+FgoH/hYKB/4WCgf+FgoH/hYKB/4SBgP+DgH//g4B//zk4N+oAAAAwAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtGhkZ6T48PP08Ozr8Ojk4/D08O/w6OTj8PDs6/Dw7
Ovw6OTj8Pj08/D49PPw+PTz8Pj08/D49PPw+PTz8Pj08/D49PPw+PTz8Pj08/D49PPw+PDz9GhkZ6QAA
AC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQZGBjLYl9e/mdkY/xhX178YF5d/GBe
XfxgXl38YF5d/GBeXfxgXl38YF5d/GBeXfxgXl38YF5d/GBeXfxgXl38YF5d/GBeXfxhX178Z2Rj/GJf
Xv4ZGBjLAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAramoAA0NDY5lY2L/SUdH/Dw8
O/tLS0r7TExL+05NTPtOTUz7Tk1M+05NTPtOTUz7Tk1M+05NTPtOTUz7Tk1M+05NTPtMTEv7S0tK+zw8
O/tJR0f8ZWNi/w0NDY6yrq0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAAAAATEdG
RfVUUlH9cHBu+8rJxv6dnZr7d3d1+nh4dvp4eHb6eHh2+nh4dvp4eHb6eHh2+nh4dvp4eHb6d3d1+p2d
mvvKycb+cHBu+1RSUf1HRkX1AAAATAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAZKSgo02xqaf9LSkn7ysrH/mBgXvsZGBj6XFxc+6WlpfykpKT8pKSk/KSkpPyhoaH8o6Oj/Ftb
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
A///4Af//+AH///gB///4Af//+AH//////8=
</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>کاتب باکس</value>
</data>
</root>

1926
Form1.resx Normal file

File diff suppressed because it is too large Load diff

241
Form1.vb Normal file
View file

@ -0,0 +1,241 @@
Imports System.Text
Imports System.Threading
Imports System.Windows.Forms.VisualStyles.VisualStyleElement
Imports Microsoft.VisualBasic.FileIO
Imports System.Threading.Tasks
Public Class Form1
Dim api As New ApiInterface
Public isLogin As Boolean = False
Private isLogVisible As Boolean = False
Private isProcessingPrint As Boolean = False ' نشانگر وضعیت پردازش چاپ
Private Sub Form1_Resize(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Resize
If WindowState = FormWindowState.Minimized Then
NotifyIcon1.Visible = True
Hide()
NotifyIcon1.ShowBalloonTip(100)
End If
End Sub
Private Sub NotifyIcon1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles NotifyIcon1.DoubleClick
Me.Show()
Me.WindowState = FormWindowState.Normal
NotifyIcon1.Visible = False
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
MenuStrip1.Enabled = False
' تنظیم سیستم لاگ
SetupLogSystem()
Dim FrmLogin As New FrmLogin
FrmLogin.StartPosition = FormStartPosition.CenterScreen
FrmLogin.MdiParent = Me
FrmLogin.Show()
End Sub
Private Sub btnCloseApplication_Click(sender As Object, e As EventArgs) Handles btnCloseApplication.Click
Application.Exit()
End Sub
Private Sub btnPrinters_Click(sender As Object, e As EventArgs) Handles btnPrinters.Click
Dim frm As New FrmPrinters
frm.StartPosition = FormStartPosition.CenterScreen
frm.MdiParent = Me
frm.Show()
End Sub
Private Sub btnShowLog_Click(sender As Object, e As EventArgs) Handles btnShowLog.Click
ToggleLogVisibility()
End Sub
Private Sub دربارهبرنامهToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles دربارهبرنامهToolStripMenuItem.Click
Dim frm As New FrmAboutHesabix
frm.StartPosition = FormStartPosition.CenterScreen
frm.MdiParent = Me
frm.Show()
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
' جلوگیری از اجرای همزمان چندین عملیات چاپ
If isProcessingPrint Then
Return
End If
' اجرای عملیات چاپ در thread جداگانه تا UI مسدود نشود
AsyncHelper.RunAsync(Function() ProcessPrintingAsyncTask())
End Sub
Private Async Function ProcessPrintingAsyncTask() As Task
Try
' تنظیم نشانگر وضعیت
isProcessingPrint = True
' دریافت آخرین چاپ به صورت async با retry
Dim file As String = ""
Dim success As Boolean = Await AsyncHelper.RunWithRetry(
Async Function()
file = Await api.getLastPrintAsync()
End Function, 3, 2000) ' 3 تلاش با تاخیر 2 ثانیه
If Not success OrElse String.IsNullOrEmpty(file) Then
Return
End If
Dim SPrinter As String = ""
Dim res() As String = file.Split(",")
Dim canPrint As Boolean = False
If file <> "" Then
If (res(0) = "fastSellPosInvoice" And My.Settings.printerFastSellInvoice <> "Off") Then
SPrinter = My.Settings.printerFastSellInvoice
canPrint = True
ElseIf res(0) = "fastSellCashdesk" And My.Settings.printerFastSellCashdeskInvoice <> "Off" Then
SPrinter = My.Settings.printerFastSellCashdeskInvoice
canPrint = True
ElseIf res(0) = "fastSellInvoice" And My.Settings.printerSell <> "Off" Then
SPrinter = My.Settings.printerSell
canPrint = True
End If
If canPrint AndAlso SPrinter <> "" Then
' دانلود فایل به صورت async با retry
Dim downloadSuccess As Boolean = Await AsyncHelper.RunWithRetry(
Async Function()
Return Await api.downloadFileAsync(res(1), res(0))
End Function, 2, 3000) ' 2 تلاش با تاخیر 3 ثانیه
If downloadSuccess Then
' اجرای چاپ در UI thread
AsyncHelper.RunOnUIThread(Me, Sub()
Dim sReport = SpecialDirectories.CurrentUserApplicationData.ToString + "\" + res(0) + ".pdf"
Try
Using document = PdfiumViewer.PdfDocument.Load(sReport)
Using printDocument = document.CreatePrintDocument()
printDocument.PrinterSettings = New System.Drawing.Printing.PrinterSettings() With {.PrinterName = SPrinter}
printDocument.PrintController = New System.Drawing.Printing.StandardPrintController()
printDocument.Print()
End Using
End Using
Catch ex As Exception
Logger.Instance.LogError("خطا در چاپ مستقیم PDF", ex)
End Try
End Sub)
End If
End If
End If
Catch ex As Exception
' ثبت خطا در لاگ
Logger.Instance.LogError("خطا در فرآیند چاپ", ex)
Finally
' بازنشانی نشانگر وضعیت
isProcessingPrint = False
End Try
End Function
Private Sub btnHideWindow_Click(sender As Object, e As EventArgs) Handles btnHideWindow.Click
Me.WindowState = FormWindowState.Minimized
End Sub
' متدهای سیستم لاگ
Private Sub SetupLogSystem()
' تنظیم layout پنل لاگ
LogPanel.Dock = DockStyle.Bottom
LogPanel.Height = 200
LogPanel.Visible = False
' تنظیم layout کنترل‌ها
LogLabel.Dock = DockStyle.Top
LogLabel.Height = 25
LogLabel.Text = "لاگ سیستم - درخواست‌ها و پاسخ‌های سرور"
LogLabel.TextAlign = ContentAlignment.MiddleCenter
LogControlsPanel.Dock = DockStyle.Bottom
LogControlsPanel.Height = 35
LogTextBox.Dock = DockStyle.Fill
LogTextBox.Multiline = True
LogTextBox.WordWrap = True
' تنظیم layout دکمه‌ها
ClearLogButton.Dock = DockStyle.Right
ClearLogButton.Width = 80
ClearLogButton.Text = "پاک کردن"
SaveLogButton.Dock = DockStyle.Right
SaveLogButton.Width = 80
SaveLogButton.Text = "ذخیره"
ToggleLogButton.Dock = DockStyle.Right
ToggleLogButton.Width = 80
ToggleLogButton.Text = "مخفی کردن"
' تنظیم Logger
Logger.Instance.SetLogTextBox(LogTextBox)
' اضافه کردن event handlers
AddHandler ClearLogButton.Click, AddressOf ClearLogButton_Click
AddHandler SaveLogButton.Click, AddressOf SaveLogButton_Click
AddHandler ToggleLogButton.Click, AddressOf ToggleLogButton_Click
' اضافه کردن منوی لاگ
AddLogMenuItems()
Logger.Instance.LogInfo("سیستم لاگ راه‌اندازی شد")
End Sub
Private Sub AddLogMenuItems()
' تنظیم متن دکمه نمایش لاگ
btnShowLog.Text = "نمایش لاگ سیستم"
' اضافه کردن منوی لاگ اضافی
Dim logMenuItem As New ToolStripMenuItem("مدیریت لاگ")
logMenuItem.DropDownItems.Add("پاک کردن لاگ", Nothing, AddressOf ClearLogMenuItem_Click)
logMenuItem.DropDownItems.Add("ذخیره لاگ", Nothing, AddressOf SaveLogMenuItem_Click)
تنظیماتToolStripMenuItem.DropDownItems.Add(logMenuItem)
End Sub
Private Sub ToggleLogButton_Click(sender As Object, e As EventArgs)
ToggleLogVisibility()
End Sub
Private Sub ClearLogButton_Click(sender As Object, e As EventArgs)
Logger.Instance.ClearLog()
End Sub
Private Sub SaveLogButton_Click(sender As Object, e As EventArgs)
Logger.Instance.SaveLogToFile()
End Sub
Private Sub ToggleLogMenuItem_Click(sender As Object, e As EventArgs)
ToggleLogVisibility()
End Sub
Private Sub ClearLogMenuItem_Click(sender As Object, e As EventArgs)
Logger.Instance.ClearLog()
End Sub
Private Sub SaveLogMenuItem_Click(sender As Object, e As EventArgs)
Logger.Instance.SaveLogToFile()
End Sub
Private Sub ToggleLogVisibility()
isLogVisible = Not isLogVisible
LogPanel.Visible = isLogVisible
If isLogVisible Then
ToggleLogButton.Text = "مخفی کردن"
btnShowLog.Text = "مخفی کردن لاگ"
Logger.Instance.LogInfo("پنل لاگ نمایش داده شد")
Else
ToggleLogButton.Text = "نمایش لاگ"
btnShowLog.Text = "نمایش لاگ سیستم"
Logger.Instance.LogInfo("پنل لاگ مخفی شد")
End If
End Sub
Private Sub ToolStripStatusLabel1_Click(sender As Object, e As EventArgs) Handles ToolStripStatusLabel1.Click
End Sub
End Class

359
FrmAboutHesabix.Designer.vb generated Normal file
View file

@ -0,0 +1,359 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class FrmAboutHesabix
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
Friend WithEvents MainPanel As System.Windows.Forms.Panel
Friend WithEvents HeaderPanel As System.Windows.Forms.Panel
Friend WithEvents LogoPictureBox As System.Windows.Forms.PictureBox
Friend WithEvents TitleLabel As System.Windows.Forms.Label
Friend WithEvents SubtitleLabel As System.Windows.Forms.Label
Friend WithEvents ContentPanel As System.Windows.Forms.Panel
Friend WithEvents VersionLabel As System.Windows.Forms.Label
Friend WithEvents CompanyLabel As System.Windows.Forms.Label
Friend WithEvents CopyrightLabel As System.Windows.Forms.Label
Friend WithEvents DescriptionTextBox As System.Windows.Forms.TextBox
Friend WithEvents FeaturesPanel As System.Windows.Forms.Panel
Friend WithEvents FeaturesTitleLabel As System.Windows.Forms.Label
Friend WithEvents Feature1Label As System.Windows.Forms.Label
Friend WithEvents Feature2Label As System.Windows.Forms.Label
Friend WithEvents Feature3Label As System.Windows.Forms.Label
Friend WithEvents Feature4Label As System.Windows.Forms.Label
Friend WithEvents FooterPanel As System.Windows.Forms.Panel
Friend WithEvents WebsiteLabel As System.Windows.Forms.Label
Friend WithEvents EmailLabel As System.Windows.Forms.Label
Friend WithEvents OKButton As System.Windows.Forms.Button
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(FrmAboutHesabix))
Me.MainPanel = New System.Windows.Forms.Panel()
Me.FooterPanel = New System.Windows.Forms.Panel()
Me.OKButton = New System.Windows.Forms.Button()
Me.EmailLabel = New System.Windows.Forms.Label()
Me.WebsiteLabel = New System.Windows.Forms.Label()
Me.FeaturesPanel = New System.Windows.Forms.Panel()
Me.Feature4Label = New System.Windows.Forms.Label()
Me.Feature3Label = New System.Windows.Forms.Label()
Me.Feature2Label = New System.Windows.Forms.Label()
Me.Feature1Label = New System.Windows.Forms.Label()
Me.FeaturesTitleLabel = New System.Windows.Forms.Label()
Me.ContentPanel = New System.Windows.Forms.Panel()
Me.DescriptionTextBox = New System.Windows.Forms.TextBox()
Me.CopyrightLabel = New System.Windows.Forms.Label()
Me.CompanyLabel = New System.Windows.Forms.Label()
Me.VersionLabel = New System.Windows.Forms.Label()
Me.HeaderPanel = New System.Windows.Forms.Panel()
Me.SubtitleLabel = New System.Windows.Forms.Label()
Me.TitleLabel = New System.Windows.Forms.Label()
Me.LogoPictureBox = New System.Windows.Forms.PictureBox()
Me.MainPanel.SuspendLayout()
Me.FooterPanel.SuspendLayout()
Me.FeaturesPanel.SuspendLayout()
Me.ContentPanel.SuspendLayout()
Me.HeaderPanel.SuspendLayout()
CType(Me.LogoPictureBox, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'MainPanel
'
Me.MainPanel.BackColor = System.Drawing.Color.White
Me.MainPanel.Controls.Add(Me.FooterPanel)
Me.MainPanel.Controls.Add(Me.FeaturesPanel)
Me.MainPanel.Controls.Add(Me.ContentPanel)
Me.MainPanel.Controls.Add(Me.HeaderPanel)
Me.MainPanel.Dock = System.Windows.Forms.DockStyle.Fill
Me.MainPanel.Location = New System.Drawing.Point(0, 0)
Me.MainPanel.Name = "MainPanel"
Me.MainPanel.Size = New System.Drawing.Size(599, 433)
Me.MainPanel.TabIndex = 0
'
'FooterPanel
'
Me.FooterPanel.BackColor = System.Drawing.Color.FromArgb(CType(CType(52, Byte), Integer), CType(CType(73, Byte), Integer), CType(CType(94, Byte), Integer))
Me.FooterPanel.Controls.Add(Me.OKButton)
Me.FooterPanel.Controls.Add(Me.EmailLabel)
Me.FooterPanel.Controls.Add(Me.WebsiteLabel)
Me.FooterPanel.Dock = System.Windows.Forms.DockStyle.Fill
Me.FooterPanel.Location = New System.Drawing.Point(0, 381)
Me.FooterPanel.Name = "FooterPanel"
Me.FooterPanel.Size = New System.Drawing.Size(599, 52)
Me.FooterPanel.TabIndex = 3
'
'OKButton
'
Me.OKButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.OKButton.BackColor = System.Drawing.Color.FromArgb(CType(CType(46, Byte), Integer), CType(CType(204, Byte), Integer), CType(CType(113, Byte), Integer))
Me.OKButton.DialogResult = System.Windows.Forms.DialogResult.OK
Me.OKButton.FlatAppearance.BorderSize = 0
Me.OKButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.OKButton.Font = New System.Drawing.Font("Tahoma", 10.0!, System.Drawing.FontStyle.Bold)
Me.OKButton.ForeColor = System.Drawing.Color.White
Me.OKButton.Location = New System.Drawing.Point(490, 14)
Me.OKButton.Name = "OKButton"
Me.OKButton.Size = New System.Drawing.Size(86, 26)
Me.OKButton.TabIndex = 2
Me.OKButton.Text = "تأیید"
Me.OKButton.UseVisualStyleBackColor = False
'
'EmailLabel
'
Me.EmailLabel.AutoSize = True
Me.EmailLabel.Font = New System.Drawing.Font("Tahoma", 9.0!)
Me.EmailLabel.ForeColor = System.Drawing.Color.White
Me.EmailLabel.Location = New System.Drawing.Point(17, 17)
Me.EmailLabel.Name = "EmailLabel"
Me.EmailLabel.Size = New System.Drawing.Size(137, 14)
Me.EmailLabel.TabIndex = 1
Me.EmailLabel.Text = "ایمیل: support@hesabix.ir"
Me.EmailLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'WebsiteLabel
'
Me.WebsiteLabel.AutoSize = True
Me.WebsiteLabel.Font = New System.Drawing.Font("Tahoma", 9.0!)
Me.WebsiteLabel.ForeColor = System.Drawing.Color.White
Me.WebsiteLabel.Location = New System.Drawing.Point(167, 17)
Me.WebsiteLabel.Name = "WebsiteLabel"
Me.WebsiteLabel.Size = New System.Drawing.Size(105, 14)
Me.WebsiteLabel.TabIndex = 0
Me.WebsiteLabel.Text = "وب‌سایت: hesabix.ir"
Me.WebsiteLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'FeaturesPanel
'
Me.FeaturesPanel.BackColor = System.Drawing.Color.FromArgb(CType(CType(248, Byte), Integer), CType(CType(249, Byte), Integer), CType(CType(250, Byte), Integer))
Me.FeaturesPanel.Controls.Add(Me.Feature4Label)
Me.FeaturesPanel.Controls.Add(Me.Feature3Label)
Me.FeaturesPanel.Controls.Add(Me.Feature2Label)
Me.FeaturesPanel.Controls.Add(Me.Feature1Label)
Me.FeaturesPanel.Controls.Add(Me.FeaturesTitleLabel)
Me.FeaturesPanel.Dock = System.Windows.Forms.DockStyle.Top
Me.FeaturesPanel.Location = New System.Drawing.Point(0, 260)
Me.FeaturesPanel.Name = "FeaturesPanel"
Me.FeaturesPanel.Padding = New System.Windows.Forms.Padding(17)
Me.FeaturesPanel.Size = New System.Drawing.Size(599, 121)
Me.FeaturesPanel.TabIndex = 2
'
'Feature4Label
'
Me.Feature4Label.AutoSize = True
Me.Feature4Label.Font = New System.Drawing.Font("Tahoma", 9.0!)
Me.Feature4Label.ForeColor = System.Drawing.Color.FromArgb(CType(CType(52, Byte), Integer), CType(CType(73, Byte), Integer), CType(CType(94, Byte), Integer))
Me.Feature4Label.Location = New System.Drawing.Point(115, 69)
Me.Feature4Label.Name = "Feature4Label"
Me.Feature4Label.Size = New System.Drawing.Size(111, 14)
Me.Feature4Label.TabIndex = 4
Me.Feature4Label.Text = "• رابط کاربری فارسی"
Me.Feature4Label.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'Feature3Label
'
Me.Feature3Label.AutoSize = True
Me.Feature3Label.Font = New System.Drawing.Font("Tahoma", 9.0!)
Me.Feature3Label.ForeColor = System.Drawing.Color.FromArgb(CType(CType(52, Byte), Integer), CType(CType(73, Byte), Integer), CType(CType(94, Byte), Integer))
Me.Feature3Label.Location = New System.Drawing.Point(407, 69)
Me.Feature3Label.Name = "Feature3Label"
Me.Feature3Label.Size = New System.Drawing.Size(119, 14)
Me.Feature3Label.TabIndex = 3
Me.Feature3Label.Text = "• چاپ خودکار فاکتورها"
Me.Feature3Label.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'Feature2Label
'
Me.Feature2Label.AutoSize = True
Me.Feature2Label.Font = New System.Drawing.Font("Tahoma", 9.0!)
Me.Feature2Label.ForeColor = System.Drawing.Color.FromArgb(CType(CType(52, Byte), Integer), CType(CType(73, Byte), Integer), CType(CType(94, Byte), Integer))
Me.Feature2Label.Location = New System.Drawing.Point(122, 43)
Me.Feature2Label.Name = "Feature2Label"
Me.Feature2Label.Size = New System.Drawing.Size(104, 14)
Me.Feature2Label.TabIndex = 2
Me.Feature2Label.Text = "• ارتباط با API حسابیکس"
Me.Feature2Label.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'Feature1Label
'
Me.Feature1Label.AutoSize = True
Me.Feature1Label.Font = New System.Drawing.Font("Tahoma", 9.0!)
Me.Feature1Label.ForeColor = System.Drawing.Color.FromArgb(CType(CType(52, Byte), Integer), CType(CType(73, Byte), Integer), CType(CType(94, Byte), Integer))
Me.Feature1Label.Location = New System.Drawing.Point(433, 43)
Me.Feature1Label.Name = "Feature1Label"
Me.Feature1Label.Size = New System.Drawing.Size(93, 14)
Me.Feature1Label.TabIndex = 1
Me.Feature1Label.Text = "• مدیریت چاپگرها"
Me.Feature1Label.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'FeaturesTitleLabel
'
Me.FeaturesTitleLabel.AutoSize = True
Me.FeaturesTitleLabel.Font = New System.Drawing.Font("Tahoma", 12.0!, System.Drawing.FontStyle.Bold)
Me.FeaturesTitleLabel.ForeColor = System.Drawing.Color.FromArgb(CType(CType(41, Byte), Integer), CType(CType(128, Byte), Integer), CType(CType(185, Byte), Integer))
Me.FeaturesTitleLabel.Location = New System.Drawing.Point(433, 17)
Me.FeaturesTitleLabel.Name = "FeaturesTitleLabel"
Me.FeaturesTitleLabel.Size = New System.Drawing.Size(141, 19)
Me.FeaturesTitleLabel.TabIndex = 0
Me.FeaturesTitleLabel.Text = "ویژگی‌های کلیدی"
Me.FeaturesTitleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'ContentPanel
'
Me.ContentPanel.Controls.Add(Me.DescriptionTextBox)
Me.ContentPanel.Controls.Add(Me.CopyrightLabel)
Me.ContentPanel.Controls.Add(Me.CompanyLabel)
Me.ContentPanel.Controls.Add(Me.VersionLabel)
Me.ContentPanel.Dock = System.Windows.Forms.DockStyle.Top
Me.ContentPanel.Location = New System.Drawing.Point(0, 104)
Me.ContentPanel.Name = "ContentPanel"
Me.ContentPanel.Padding = New System.Windows.Forms.Padding(17)
Me.ContentPanel.Size = New System.Drawing.Size(599, 156)
Me.ContentPanel.TabIndex = 1
'
'DescriptionTextBox
'
Me.DescriptionTextBox.BackColor = System.Drawing.Color.FromArgb(CType(CType(248, Byte), Integer), CType(CType(249, Byte), Integer), CType(CType(250, Byte), Integer))
Me.DescriptionTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.DescriptionTextBox.Font = New System.Drawing.Font("Tahoma", 9.0!)
Me.DescriptionTextBox.ForeColor = System.Drawing.Color.FromArgb(CType(CType(52, Byte), Integer), CType(CType(73, Byte), Integer), CType(CType(94, Byte), Integer))
Me.DescriptionTextBox.Location = New System.Drawing.Point(17, 95)
Me.DescriptionTextBox.Multiline = True
Me.DescriptionTextBox.Name = "DescriptionTextBox"
Me.DescriptionTextBox.ReadOnly = True
Me.DescriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.DescriptionTextBox.Size = New System.Drawing.Size(566, 43)
Me.DescriptionTextBox.TabIndex = 3
Me.DescriptionTextBox.Text = "حسابیکس باکس یک سرویس تحت ویندوز است که برای مدیریت چاپ فاکتورها و ارتباط با API کات" &
"ب طراحی شده است. این نرم‌افزار امکان چاپ خودکار فاکتورها، مدیریت چاپگرها و ارتبا" &
"ط مستقیم با سیستم حسابیکس را فراهم می‌کند."
Me.DescriptionTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right
'
'CopyrightLabel
'
Me.CopyrightLabel.AutoSize = True
Me.CopyrightLabel.Font = New System.Drawing.Font("Tahoma", 9.0!)
Me.CopyrightLabel.ForeColor = System.Drawing.Color.FromArgb(CType(CType(127, Byte), Integer), CType(CType(140, Byte), Integer), CType(CType(141, Byte), Integer))
Me.CopyrightLabel.Location = New System.Drawing.Point(380, 69)
Me.CopyrightLabel.Name = "CopyrightLabel"
Me.CopyrightLabel.Size = New System.Drawing.Size(193, 14)
Me.CopyrightLabel.TabIndex = 2
Me.CopyrightLabel.Text = "منتشر شده تحت مجوز GNU GPL V3"
Me.CopyrightLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'CompanyLabel
'
Me.CompanyLabel.AutoSize = True
Me.CompanyLabel.Font = New System.Drawing.Font("Tahoma", 10.0!)
Me.CompanyLabel.ForeColor = System.Drawing.Color.FromArgb(CType(CType(52, Byte), Integer), CType(CType(73, Byte), Integer), CType(CType(94, Byte), Integer))
Me.CompanyLabel.Location = New System.Drawing.Point(469, 43)
Me.CompanyLabel.Name = "CompanyLabel"
Me.CompanyLabel.Size = New System.Drawing.Size(101, 17)
Me.CompanyLabel.TabIndex = 1
Me.CompanyLabel.Text = "شرکت: hesabix"
Me.CompanyLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'VersionLabel
'
Me.VersionLabel.AutoSize = True
Me.VersionLabel.Font = New System.Drawing.Font("Tahoma", 10.0!)
Me.VersionLabel.ForeColor = System.Drawing.Color.FromArgb(CType(CType(52, Byte), Integer), CType(CType(73, Byte), Integer), CType(CType(94, Byte), Integer))
Me.VersionLabel.Location = New System.Drawing.Point(475, 17)
Me.VersionLabel.Name = "VersionLabel"
Me.VersionLabel.Size = New System.Drawing.Size(98, 17)
Me.VersionLabel.TabIndex = 0
Me.VersionLabel.Text = "نسخه: 1.0.1.0"
Me.VersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'HeaderPanel
'
Me.HeaderPanel.BackColor = System.Drawing.Color.FromArgb(CType(CType(41, Byte), Integer), CType(CType(128, Byte), Integer), CType(CType(185, Byte), Integer))
Me.HeaderPanel.Controls.Add(Me.SubtitleLabel)
Me.HeaderPanel.Controls.Add(Me.TitleLabel)
Me.HeaderPanel.Controls.Add(Me.LogoPictureBox)
Me.HeaderPanel.Dock = System.Windows.Forms.DockStyle.Top
Me.HeaderPanel.Location = New System.Drawing.Point(0, 0)
Me.HeaderPanel.Name = "HeaderPanel"
Me.HeaderPanel.Size = New System.Drawing.Size(599, 104)
Me.HeaderPanel.TabIndex = 0
'
'SubtitleLabel
'
Me.SubtitleLabel.AutoSize = True
Me.SubtitleLabel.Font = New System.Drawing.Font("Tahoma", 10.0!)
Me.SubtitleLabel.ForeColor = System.Drawing.Color.FromArgb(CType(CType(200, Byte), Integer), CType(CType(200, Byte), Integer), CType(CType(200, Byte), Integer))
Me.SubtitleLabel.Location = New System.Drawing.Point(380, 52)
Me.SubtitleLabel.Name = "SubtitleLabel"
Me.SubtitleLabel.Size = New System.Drawing.Size(199, 17)
Me.SubtitleLabel.TabIndex = 2
Me.SubtitleLabel.Text = "سرویس مدیریت چاپ فاکتور حسابیکس"
Me.SubtitleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'TitleLabel
'
Me.TitleLabel.AutoSize = True
Me.TitleLabel.Font = New System.Drawing.Font("Tahoma", 18.0!, System.Drawing.FontStyle.Bold)
Me.TitleLabel.ForeColor = System.Drawing.Color.White
Me.TitleLabel.Location = New System.Drawing.Point(516, 23)
Me.TitleLabel.Name = "TitleLabel"
Me.TitleLabel.Size = New System.Drawing.Size(59, 29)
Me.TitleLabel.TabIndex = 1
Me.TitleLabel.Text = "Box"
Me.TitleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'LogoPictureBox
'
Me.LogoPictureBox.Image = CType(resources.GetObject("LogoPictureBox.Image"), System.Drawing.Image)
Me.LogoPictureBox.Location = New System.Drawing.Point(17, 17)
Me.LogoPictureBox.Name = "LogoPictureBox"
Me.LogoPictureBox.Size = New System.Drawing.Size(69, 69)
Me.LogoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom
Me.LogoPictureBox.TabIndex = 0
Me.LogoPictureBox.TabStop = False
'
'FrmAboutHesabix
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.White
Me.CancelButton = Me.OKButton
Me.ClientSize = New System.Drawing.Size(599, 433)
Me.Controls.Add(Me.MainPanel)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "FrmAboutHesabix"
Me.RightToLeft = System.Windows.Forms.RightToLeft.Yes
Me.RightToLeftLayout = True
Me.ShowInTaskbar = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "درباره نرم‌افزار"
Me.MainPanel.ResumeLayout(False)
Me.FooterPanel.ResumeLayout(False)
Me.FooterPanel.PerformLayout()
Me.FeaturesPanel.ResumeLayout(False)
Me.FeaturesPanel.PerformLayout()
Me.ContentPanel.ResumeLayout(False)
Me.ContentPanel.PerformLayout()
Me.HeaderPanel.ResumeLayout(False)
Me.HeaderPanel.PerformLayout()
CType(Me.LogoPictureBox, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
End Class

442
FrmAboutHesabix.resx Normal file
View file

@ -0,0 +1,442 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LogoPictureBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
TkSuQmCC
</value>
</data>
</root>

96
FrmAboutHesabix.vb Normal file
View file

@ -0,0 +1,96 @@
Public NotInheritable Class FrmAboutHesabix
Private Sub FrmAboutHesabix_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' تنظیم عنوان فرم
Me.Text = "درباره نرم‌افزار Box"
' تنظیم اطلاعات برنامه
Me.VersionLabel.Text = String.Format("نسخه: {0}", My.Application.Info.Version.ToString)
Me.CompanyLabel.Text = String.Format("شرکت: {0}", My.Application.Info.CompanyName)
Me.CopyrightLabel.Text = My.Application.Info.Copyright
' تنظیم توضیحات برنامه
Me.DescriptionTextBox.Text = "حسابیکس باکس یک سرویس تحت ویندوز است که برای مدیریت چاپ فاکتورها و ارتباط با API حسابیکس طراحی شده است. این نرم‌افزار امکان چاپ خودکار فاکتورها، مدیریت چاپگرها و ارتباط مستقیم با سیستم حسابیکس را فراهم می‌کند."
' تنظیم اطلاعات تماس
Me.WebsiteLabel.Text = "وب‌سایت: hesabix.ir"
Me.EmailLabel.Text = "ایمیل: support@hesabix.ir"
' تنظیم ویژگی‌های برنامه
Me.Feature1Label.Text = "• مدیریت چاپگرها"
Me.Feature2Label.Text = "• ارتباط با API حسابیکس"
Me.Feature3Label.Text = "• چاپ خودکار فاکتورها"
Me.Feature4Label.Text = "• رابط کاربری فارسی"
' تنظیم رنگ‌ها و استایل‌ها
ApplyModernStyling()
End Sub
Private Sub ApplyModernStyling()
' تنظیم رنگ‌های مدرن برای فرم
Me.BackColor = Color.White
' تنظیم فونت‌ها و راست‌چین بودن
Me.TitleLabel.Font = New Font("Tahoma", 18, FontStyle.Bold)
Me.TitleLabel.TextAlign = ContentAlignment.MiddleRight
Me.SubtitleLabel.Font = New Font("Tahoma", 10, FontStyle.Regular)
Me.SubtitleLabel.TextAlign = ContentAlignment.MiddleRight
Me.VersionLabel.Font = New Font("Tahoma", 10, FontStyle.Regular)
Me.VersionLabel.TextAlign = ContentAlignment.MiddleRight
Me.CompanyLabel.Font = New Font("Tahoma", 10, FontStyle.Regular)
Me.CompanyLabel.TextAlign = ContentAlignment.MiddleRight
Me.CopyrightLabel.Font = New Font("Tahoma", 9, FontStyle.Regular)
Me.CopyrightLabel.TextAlign = ContentAlignment.MiddleRight
Me.DescriptionTextBox.Font = New Font("Tahoma", 9, FontStyle.Regular)
Me.DescriptionTextBox.TextAlign = HorizontalAlignment.Right
Me.FeaturesTitleLabel.Font = New Font("Tahoma", 12, FontStyle.Bold)
Me.FeaturesTitleLabel.TextAlign = ContentAlignment.MiddleRight
Me.Feature1Label.Font = New Font("Tahoma", 9, FontStyle.Regular)
Me.Feature1Label.TextAlign = ContentAlignment.MiddleRight
Me.Feature2Label.Font = New Font("Tahoma", 9, FontStyle.Regular)
Me.Feature2Label.TextAlign = ContentAlignment.MiddleRight
Me.Feature3Label.Font = New Font("Tahoma", 9, FontStyle.Regular)
Me.Feature3Label.TextAlign = ContentAlignment.MiddleRight
Me.Feature4Label.Font = New Font("Tahoma", 9, FontStyle.Regular)
Me.Feature4Label.TextAlign = ContentAlignment.MiddleRight
Me.WebsiteLabel.Font = New Font("Tahoma", 9, FontStyle.Regular)
Me.WebsiteLabel.TextAlign = ContentAlignment.MiddleRight
Me.EmailLabel.Font = New Font("Tahoma", 9, FontStyle.Regular)
Me.EmailLabel.TextAlign = ContentAlignment.MiddleRight
Me.OKButton.Font = New Font("Tahoma", 10, FontStyle.Bold)
End Sub
Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKButton.Click
Me.Close()
End Sub
Private Sub WebsiteLabel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles WebsiteLabel.Click
Try
System.Diagnostics.Process.Start("https://hesabix.ir")
Catch ex As Exception
MessageBox.Show("خطا در باز کردن وب‌سایت: " & ex.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Private Sub EmailLabel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EmailLabel.Click
Try
System.Diagnostics.Process.Start("mailto:support@hesabix.ir")
Catch ex As Exception
MessageBox.Show("خطا در باز کردن ایمیل: " & ex.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
End Class

133
FrmInvoice.Designer.vb generated Normal file
View file

@ -0,0 +1,133 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class FrmInvoice
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
cobPerson = New ComboBox()
ComboBox2 = New ComboBox()
DataGridView1 = New DataGridView()
index = New DataGridViewTextBoxColumn()
commodity = New DataGridViewTextBoxColumn()
count = New DataGridViewTextBoxColumn()
price = New DataGridViewTextBoxColumn()
priceAll = New DataGridViewTextBoxColumn()
btnSave = New Button()
CType(DataGridView1, ComponentModel.ISupportInitialize).BeginInit()
SuspendLayout()
'
' cobPerson
'
cobPerson.FormattingEnabled = True
cobPerson.Location = New Point(12, 34)
cobPerson.Name = "cobPerson"
cobPerson.Size = New Size(228, 23)
cobPerson.TabIndex = 0
'
' ComboBox2
'
ComboBox2.FormattingEnabled = True
ComboBox2.Location = New Point(246, 34)
ComboBox2.Name = "ComboBox2"
ComboBox2.Size = New Size(228, 23)
ComboBox2.TabIndex = 1
'
' DataGridView1
'
DataGridView1.AllowUserToOrderColumns = True
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize
DataGridView1.Columns.AddRange(New DataGridViewColumn() {index, commodity, count, price, priceAll})
DataGridView1.Dock = DockStyle.Bottom
DataGridView1.Location = New Point(0, 72)
DataGridView1.Name = "DataGridView1"
DataGridView1.RowTemplate.Height = 25
DataGridView1.Size = New Size(607, 269)
DataGridView1.TabIndex = 2
'
' index
'
index.HeaderText = "ردیف"
index.Name = "index"
index.ReadOnly = True
'
' commodity
'
commodity.HeaderText = "کالا"
commodity.Name = "commodity"
'
' count
'
count.HeaderText = "تعداد | مقدار"
count.Name = "count"
'
' price
'
price.HeaderText = "قیمت واحد"
price.Name = "price"
'
' priceAll
'
priceAll.HeaderText = "قیمت کل"
priceAll.Name = "priceAll"
priceAll.ReadOnly = True
'
' btnSave
'
btnSave.Location = New Point(480, 33)
btnSave.Name = "btnSave"
btnSave.Size = New Size(75, 23)
btnSave.TabIndex = 3
btnSave.Text = "ثبت"
btnSave.UseVisualStyleBackColor = True
'
' FrmInvoice
'
AutoScaleDimensions = New SizeF(7F, 15F)
AutoScaleMode = AutoScaleMode.Font
ClientSize = New Size(607, 341)
Controls.Add(btnSave)
Controls.Add(DataGridView1)
Controls.Add(ComboBox2)
Controls.Add(cobPerson)
MaximizeBox = False
MinimizeBox = False
Name = "FrmInvoice"
RightToLeft = RightToLeft.Yes
RightToLeftLayout = True
ShowIcon = False
ShowInTaskbar = False
StartPosition = FormStartPosition.CenterScreen
Text = "فاکتور فروش"
CType(DataGridView1, ComponentModel.ISupportInitialize).EndInit()
ResumeLayout(False)
End Sub
Friend WithEvents cobPerson As ComboBox
Friend WithEvents ComboBox2 As ComboBox
Friend WithEvents DataGridView1 As DataGridView
Friend WithEvents index As DataGridViewTextBoxColumn
Friend WithEvents commodity As DataGridViewTextBoxColumn
Friend WithEvents count As DataGridViewTextBoxColumn
Friend WithEvents price As DataGridViewTextBoxColumn
Friend WithEvents priceAll As DataGridViewTextBoxColumn
Friend WithEvents btnSave As Button
End Class

150
FrmInvoice.resx Normal file
View file

@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="index.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="commodity.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="count.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="price.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="priceAll.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="index.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="commodity.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="count.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="price.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="priceAll.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

13
FrmInvoice.vb Normal file
View file

@ -0,0 +1,13 @@
Imports System.Web.Script.Serialization
Imports Microsoft.VisualBasic.Devices
Public Class FrmInvoice
Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
End Sub
Private Sub FrmInvoice_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim serializer As New JavaScriptSerializer()
Dim personsList As Object() = serializer.Deserialize(Of Object())(My.Settings.persons)
End Sub
End Class

325
FrmLogin.Designer.vb generated Normal file
View file

@ -0,0 +1,325 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class FrmLogin
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
' پاک کردن تایمرها
If disposing Then
CleanupTimers()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(FrmLogin))
Me.MainPanel = New System.Windows.Forms.Panel()
Me.LoadingPanel = New System.Windows.Forms.Panel()
Me.LoadingProgressBar = New System.Windows.Forms.ProgressBar()
Me.LoadingLabel = New System.Windows.Forms.Label()
Me.LoginPanel = New System.Windows.Forms.Panel()
Me.StatusLabel = New System.Windows.Forms.Label()
Me.ExitButton = New System.Windows.Forms.Button()
Me.LoginButton = New System.Windows.Forms.Button()
Me.SettingsButton = New System.Windows.Forms.Button()
Me.ApiUrlTextBox = New System.Windows.Forms.TextBox()
Me.ApiUrlLabel = New System.Windows.Forms.Label()
Me.TokenTextBox = New System.Windows.Forms.TextBox()
Me.TokenLabel = New System.Windows.Forms.Label()
Me.LogoPanel = New System.Windows.Forms.Panel()
Me.SubtitleLabel = New System.Windows.Forms.Label()
Me.TitleLabel = New System.Windows.Forms.Label()
Me.LogoPictureBox = New System.Windows.Forms.PictureBox()
Me.MainPanel.SuspendLayout()
Me.LoadingPanel.SuspendLayout()
Me.LoginPanel.SuspendLayout()
Me.LogoPanel.SuspendLayout()
CType(Me.LogoPictureBox, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'MainPanel
'
Me.MainPanel.BackColor = System.Drawing.Color.FromArgb(CType(CType(30, Byte), Integer), CType(CType(30, Byte), Integer), CType(CType(30, Byte), Integer))
Me.MainPanel.Controls.Add(Me.LoadingPanel)
Me.MainPanel.Controls.Add(Me.LoginPanel)
Me.MainPanel.Controls.Add(Me.LogoPanel)
Me.MainPanel.Dock = System.Windows.Forms.DockStyle.Fill
Me.MainPanel.Location = New System.Drawing.Point(0, 0)
Me.MainPanel.Name = "MainPanel"
Me.MainPanel.Size = New System.Drawing.Size(386, 433)
Me.MainPanel.TabIndex = 0
'
'LoadingPanel
'
Me.LoadingPanel.BackColor = System.Drawing.Color.FromArgb(CType(CType(30, Byte), Integer), CType(CType(30, Byte), Integer), CType(CType(30, Byte), Integer))
Me.LoadingPanel.Controls.Add(Me.LoadingProgressBar)
Me.LoadingPanel.Controls.Add(Me.LoadingLabel)
Me.LoadingPanel.Dock = System.Windows.Forms.DockStyle.Bottom
Me.LoadingPanel.Location = New System.Drawing.Point(0, 390)
Me.LoadingPanel.Name = "LoadingPanel"
Me.LoadingPanel.Size = New System.Drawing.Size(386, 43)
Me.LoadingPanel.TabIndex = 2
Me.LoadingPanel.Visible = False
'
'LoadingProgressBar
'
Me.LoadingProgressBar.Anchor = System.Windows.Forms.AnchorStyles.None
Me.LoadingProgressBar.Location = New System.Drawing.Point(43, 22)
Me.LoadingProgressBar.MarqueeAnimationSpeed = 30
Me.LoadingProgressBar.Name = "LoadingProgressBar"
Me.LoadingProgressBar.Size = New System.Drawing.Size(300, 17)
Me.LoadingProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee
Me.LoadingProgressBar.TabIndex = 1
'
'LoadingLabel
'
Me.LoadingLabel.Anchor = System.Windows.Forms.AnchorStyles.None
Me.LoadingLabel.BackColor = System.Drawing.Color.Transparent
Me.LoadingLabel.Font = New System.Drawing.Font("Segoe UI", 10.0!)
Me.LoadingLabel.ForeColor = System.Drawing.Color.FromArgb(CType(CType(180, Byte), Integer), CType(CType(180, Byte), Integer), CType(CType(180, Byte), Integer))
Me.LoadingLabel.Location = New System.Drawing.Point(43, 4)
Me.LoadingLabel.Name = "LoadingLabel"
Me.LoadingLabel.Size = New System.Drawing.Size(300, 17)
Me.LoadingLabel.TabIndex = 0
Me.LoadingLabel.Text = "در حال بررسی توکن..."
Me.LoadingLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'LoginPanel
'
Me.LoginPanel.BackColor = System.Drawing.Color.Transparent
Me.LoginPanel.Controls.Add(Me.StatusLabel)
Me.LoginPanel.Controls.Add(Me.ExitButton)
Me.LoginPanel.Controls.Add(Me.LoginButton)
Me.LoginPanel.Controls.Add(Me.SettingsButton)
Me.LoginPanel.Controls.Add(Me.ApiUrlTextBox)
Me.LoginPanel.Controls.Add(Me.ApiUrlLabel)
Me.LoginPanel.Controls.Add(Me.TokenTextBox)
Me.LoginPanel.Controls.Add(Me.TokenLabel)
Me.LoginPanel.Dock = System.Windows.Forms.DockStyle.Fill
Me.LoginPanel.Location = New System.Drawing.Point(0, 173)
Me.LoginPanel.Name = "LoginPanel"
Me.LoginPanel.Size = New System.Drawing.Size(386, 260)
Me.LoginPanel.TabIndex = 1
'
'StatusLabel
'
Me.StatusLabel.Anchor = System.Windows.Forms.AnchorStyles.None
Me.StatusLabel.BackColor = System.Drawing.Color.Transparent
Me.StatusLabel.Font = New System.Drawing.Font("Segoe UI", 10.0!)
Me.StatusLabel.ForeColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(200, Byte), Integer), CType(CType(100, Byte), Integer))
Me.StatusLabel.Location = New System.Drawing.Point(43, 156)
Me.StatusLabel.Name = "StatusLabel"
Me.StatusLabel.Size = New System.Drawing.Size(300, 26)
Me.StatusLabel.TabIndex = 4
Me.StatusLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'ExitButton
'
Me.ExitButton.Anchor = System.Windows.Forms.AnchorStyles.None
Me.ExitButton.BackColor = System.Drawing.Color.FromArgb(CType(CType(100, Byte), Integer), CType(CType(100, Byte), Integer), CType(CType(100, Byte), Integer))
Me.ExitButton.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.ExitButton.FlatAppearance.BorderSize = 0
Me.ExitButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.ExitButton.Font = New System.Drawing.Font("Segoe UI", 12.0!)
Me.ExitButton.ForeColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer))
Me.ExitButton.Location = New System.Drawing.Point(231, 104)
Me.ExitButton.Name = "ExitButton"
Me.ExitButton.Size = New System.Drawing.Size(111, 35)
Me.ExitButton.TabIndex = 3
Me.ExitButton.Text = "خروج"
Me.ExitButton.UseVisualStyleBackColor = False
'
'LoginButton
'
Me.LoginButton.Anchor = System.Windows.Forms.AnchorStyles.None
Me.LoginButton.BackColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(120, Byte), Integer), CType(CType(215, Byte), Integer))
Me.LoginButton.FlatAppearance.BorderSize = 0
Me.LoginButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.LoginButton.Font = New System.Drawing.Font("Segoe UI", 12.0!, System.Drawing.FontStyle.Bold)
Me.LoginButton.ForeColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer))
Me.LoginButton.Location = New System.Drawing.Point(43, 104)
Me.LoginButton.Name = "LoginButton"
Me.LoginButton.Size = New System.Drawing.Size(171, 35)
Me.LoginButton.TabIndex = 2
Me.LoginButton.Text = "ورود به سیستم"
Me.LoginButton.UseVisualStyleBackColor = False
'
'SettingsButton
'
Me.SettingsButton.Anchor = System.Windows.Forms.AnchorStyles.None
Me.SettingsButton.BackColor = System.Drawing.Color.FromArgb(CType(CType(60, Byte), Integer), CType(CType(60, Byte), Integer), CType(CType(60, Byte), Integer))
Me.SettingsButton.FlatAppearance.BorderSize = 0
Me.SettingsButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.SettingsButton.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.SettingsButton.ForeColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer))
Me.SettingsButton.Location = New System.Drawing.Point(291, 217)
Me.SettingsButton.Name = "SettingsButton"
Me.SettingsButton.Size = New System.Drawing.Size(51, 22)
Me.SettingsButton.TabIndex = 7
Me.SettingsButton.Text = "تنظیمات"
Me.SettingsButton.UseVisualStyleBackColor = False
'
'ApiUrlTextBox
'
Me.ApiUrlTextBox.Anchor = System.Windows.Forms.AnchorStyles.None
Me.ApiUrlTextBox.BackColor = System.Drawing.Color.FromArgb(CType(CType(50, Byte), Integer), CType(CType(50, Byte), Integer), CType(CType(50, Byte), Integer))
Me.ApiUrlTextBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.ApiUrlTextBox.Font = New System.Drawing.Font("Segoe UI", 10.0!)
Me.ApiUrlTextBox.ForeColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer))
Me.ApiUrlTextBox.Location = New System.Drawing.Point(43, 217)
Me.ApiUrlTextBox.Name = "ApiUrlTextBox"
Me.ApiUrlTextBox.Size = New System.Drawing.Size(240, 25)
Me.ApiUrlTextBox.TabIndex = 6
Me.ApiUrlTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
'
'ApiUrlLabel
'
Me.ApiUrlLabel.Anchor = System.Windows.Forms.AnchorStyles.None
Me.ApiUrlLabel.BackColor = System.Drawing.Color.Transparent
Me.ApiUrlLabel.Font = New System.Drawing.Font("Segoe UI", 10.0!)
Me.ApiUrlLabel.ForeColor = System.Drawing.Color.FromArgb(CType(CType(200, Byte), Integer), CType(CType(200, Byte), Integer), CType(CType(200, Byte), Integer))
Me.ApiUrlLabel.Location = New System.Drawing.Point(43, 191)
Me.ApiUrlLabel.Name = "ApiUrlLabel"
Me.ApiUrlLabel.Size = New System.Drawing.Size(300, 17)
Me.ApiUrlLabel.TabIndex = 5
Me.ApiUrlLabel.Text = "آدرس سرور API:"
Me.ApiUrlLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'TokenTextBox
'
Me.TokenTextBox.Anchor = System.Windows.Forms.AnchorStyles.None
Me.TokenTextBox.BackColor = System.Drawing.Color.FromArgb(CType(CType(50, Byte), Integer), CType(CType(50, Byte), Integer), CType(CType(50, Byte), Integer))
Me.TokenTextBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.TokenTextBox.Font = New System.Drawing.Font("Segoe UI", 12.0!)
Me.TokenTextBox.ForeColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer))
Me.TokenTextBox.Location = New System.Drawing.Point(43, 52)
Me.TokenTextBox.Name = "TokenTextBox"
Me.TokenTextBox.PasswordChar = Global.Microsoft.VisualBasic.ChrW(42)
Me.TokenTextBox.Size = New System.Drawing.Size(300, 29)
Me.TokenTextBox.TabIndex = 1
Me.TokenTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
'
'TokenLabel
'
Me.TokenLabel.Anchor = System.Windows.Forms.AnchorStyles.None
Me.TokenLabel.BackColor = System.Drawing.Color.Transparent
Me.TokenLabel.Font = New System.Drawing.Font("Segoe UI", 12.0!)
Me.TokenLabel.ForeColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer))
Me.TokenLabel.Location = New System.Drawing.Point(43, 17)
Me.TokenLabel.Name = "TokenLabel"
Me.TokenLabel.Size = New System.Drawing.Size(300, 22)
Me.TokenLabel.TabIndex = 0
Me.TokenLabel.Text = "لطفاً توکن دسترسی خود را وارد کنید:"
Me.TokenLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'LogoPanel
'
Me.LogoPanel.BackColor = System.Drawing.Color.Transparent
Me.LogoPanel.Controls.Add(Me.SubtitleLabel)
Me.LogoPanel.Controls.Add(Me.TitleLabel)
Me.LogoPanel.Controls.Add(Me.LogoPictureBox)
Me.LogoPanel.Dock = System.Windows.Forms.DockStyle.Top
Me.LogoPanel.Location = New System.Drawing.Point(0, 0)
Me.LogoPanel.Name = "LogoPanel"
Me.LogoPanel.Size = New System.Drawing.Size(386, 173)
Me.LogoPanel.TabIndex = 0
'
'SubtitleLabel
'
Me.SubtitleLabel.Anchor = System.Windows.Forms.AnchorStyles.None
Me.SubtitleLabel.BackColor = System.Drawing.Color.Transparent
Me.SubtitleLabel.Font = New System.Drawing.Font("Segoe UI", 12.0!)
Me.SubtitleLabel.ForeColor = System.Drawing.Color.FromArgb(CType(CType(180, Byte), Integer), CType(CType(180, Byte), Integer), CType(CType(180, Byte), Integer))
Me.SubtitleLabel.Location = New System.Drawing.Point(86, 130)
Me.SubtitleLabel.Name = "SubtitleLabel"
Me.SubtitleLabel.Size = New System.Drawing.Size(214, 26)
Me.SubtitleLabel.TabIndex = 2
Me.SubtitleLabel.Text = "افزونه اتصال پرینتر ابری"
Me.SubtitleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'TitleLabel
'
Me.TitleLabel.Anchor = System.Windows.Forms.AnchorStyles.None
Me.TitleLabel.BackColor = System.Drawing.Color.Transparent
Me.TitleLabel.Font = New System.Drawing.Font("Segoe UI", 20.0!, System.Drawing.FontStyle.Bold)
Me.TitleLabel.ForeColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer))
Me.TitleLabel.Location = New System.Drawing.Point(86, 95)
Me.TitleLabel.Name = "TitleLabel"
Me.TitleLabel.Size = New System.Drawing.Size(214, 35)
Me.TitleLabel.TabIndex = 1
Me.TitleLabel.Text = "Box"
Me.TitleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'LogoPictureBox
'
Me.LogoPictureBox.Anchor = System.Windows.Forms.AnchorStyles.None
Me.LogoPictureBox.BackColor = System.Drawing.Color.Transparent
Me.LogoPictureBox.Image = Global.HesabixBox.My.Resources.Resources.logo_blue
Me.LogoPictureBox.Location = New System.Drawing.Point(129, 17)
Me.LogoPictureBox.Name = "LogoPictureBox"
Me.LogoPictureBox.Size = New System.Drawing.Size(129, 69)
Me.LogoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom
Me.LogoPictureBox.TabIndex = 0
Me.LogoPictureBox.TabStop = False
'
'FrmLogin
'
Me.AcceptButton = Me.LoginButton
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.FromArgb(CType(CType(30, Byte), Integer), CType(CType(30, Byte), Integer), CType(CType(30, Byte), Integer))
Me.CancelButton = Me.ExitButton
Me.ClientSize = New System.Drawing.Size(386, 433)
Me.ControlBox = False
Me.Controls.Add(Me.MainPanel)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Name = "FrmLogin"
Me.RightToLeft = System.Windows.Forms.RightToLeft.Yes
Me.RightToLeftLayout = True
Me.ShowInTaskbar = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "ورود به Box"
Me.TopMost = True
Me.MainPanel.ResumeLayout(False)
Me.LoadingPanel.ResumeLayout(False)
Me.LoginPanel.ResumeLayout(False)
Me.LoginPanel.PerformLayout()
Me.LogoPanel.ResumeLayout(False)
CType(Me.LogoPictureBox, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
Friend WithEvents MainPanel As Panel
Friend WithEvents LogoPanel As Panel
Friend WithEvents LogoPictureBox As PictureBox
Friend WithEvents TitleLabel As Label
Friend WithEvents SubtitleLabel As Label
Friend WithEvents LoginPanel As Panel
Friend WithEvents TokenLabel As Label
Friend WithEvents TokenTextBox As TextBox
Friend WithEvents ApiUrlLabel As Label
Friend WithEvents ApiUrlTextBox As TextBox
Friend WithEvents SettingsButton As Button
Friend WithEvents LoginButton As Button
Friend WithEvents ExitButton As Button
Friend WithEvents StatusLabel As Label
Friend WithEvents LoadingPanel As Panel
Friend WithEvents LoadingLabel As Label
Friend WithEvents LoadingProgressBar As ProgressBar
End Class

790
FrmLogin.resx Normal file
View file

@ -0,0 +1,790 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA
IACoJQAA7h4AAAAAAAABACAAQFcAAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAAjLgAAIy4AAAAA
AAAAAAAAAAAAAHYcAQB0HAEDeBwBN3kcAH55HACbeRwAhngcAER2HAEHdxwBAHccARZ4HABqeBwAM3Qc
AwJ2HAIAAAAAAHQcAgBmHQYBeRwAZXocAOZ6HAD+ehwA/3ocAP96HADveRwAf3UcAQV2HAEMeRwAv3oc
AOV5HABaiRwAAHQcAgB3HAEAdxwBIHkcANt6HAD/ehwA7nkcALl6HADjehwA/3ocAO14HAA3gxwAAHkc
AKN6HAD/ehwA0XccARd3HAEAeBwAAHgcADV6HADxehwA/3kcAJtnHQYDeRwAeHocAP96HAD9eRwAV38c
AAB5HACeehwA/3ocAOt4HAAseBwAAHkcAAB4HAA2ehwA8XocAP95HACKexwAAHkcAGl6HAD/ehwA/nkc
AFp/HAAAeRwAnnocAP96HADseRwALnkcAAB5HAAAeRwANnocAPF6HAD/eRwAi3scAAB5HABlehwA/3oc
AP15HABWfxwAAHkcAJ56HAD/ehwA7HkcAC55HAAAeRwAAHkcADZ6HADxehwA/3kcAIt7HAAAeBwBLnkc
AMd5HAC/eBwBJIMdAAB5HACeehwA/3ocAOx5HAAueRwAAHkcAAB5HAA2ehwA8XocAP95HACLfRwAAG0c
AwB3HAESdxwBETMaGwD/rwAAeRwAnnocAP96HADseRwALnkcAAB5HAAAeRwANnocAPF6HAD/eRwAi30c
AABtHAIAdxwBDnccAQ2TGgAAAAD/AHkcAJ56HAD/ehwA7HkcAC55HAAAeRwAAHkcADZ6HADxehwA/3kc
AIt7HAAAeBwBKnkcAMB5HAC5eBwBIoQdAAB5HACeehwA/3ocAOx5HAAueRwAAHkcAAB5HAA2ehwA8Xoc
AP95HACLexwAAHkcAGR6HAD/ehwA/HkcAFR/HAAAeRwAnnocAP96HADseRwALnkcAAB5HAAAeRwANnoc
APF6HAD/eRwAi3scAAB5HABpehwA/3ocAP15HABYfxwAAHkcAJ56HAD/ehwA7HkcAC55HAAAeRwAAHgc
ADV6HADxehwA/3kcAIt7HAAAeRwAZnocAP96HAD/eRwAZWYcBQN5HACqehwA/3ocAOt4HAAseBwAAHgc
AQB3HAEhehwA3XocAP95HACSfBwAAHgcAEZ6HAD1ehwA/3ocANt5HACxehwA73ocAP96HADTdxwBGHcc
AQB1HAEAbhsDAXkcAGt6HADueRwAsnQcAgZ3HAEKeRwAkXocAPR6HAD/ehwA/3ocAP96HADleRwAXpcb
AAB0HAIAAAAAAHYcAQB1HAEFeBwAQHgcAHF1HAERdhwBAHccAQt4HABReRwAkHkcAJ55HACCeBwAOHQd
AgN2HAEAAAAAAMBDAACAAwAAgCEAAIAhAACEIQAAhCEAAIQhAACGYQAAhmEAAIQhAACEIQAAhCEAAIQB
AACEAQAAgAMAAMIDAAAoAAAAGAAAADAAAAABACAAAAAAAAAJAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA
AAAAAAAAaCAJAIQZAAB0HAIMdxwBNHgcAVd4HAFjdxwBUHYcASpzHQIGdhwBACogEgBxHAIAcB0CAXYc
ATV3HAEydRwBCnocAABjHQQAAAAAAAAAAAAAAAAAAAAAAAAAAAB0HAEAcRwCA3ccAUp5HAC2eRwA6Xoc
APh6HAD7ehwA9nkcAOF5HACfdxwBL4gbAABxHAIAfRwAAHgcAGp5HADmeRwArngcAUBvHQMBdRwCAAAA
AAAAAAAAAAAAAHAcAwCDHAAAeBwBXHkcAO16HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/eRwA1Xcc
ATF4HAAAeBwBAHccATV6HADvehwA/3ocAOV4HAFKfBwAAG4cAgAAAAAAAAAAAHYcAQB2HAEYeRwAz3oc
AP96HAD/ehwA/3ocAPd5HADsehwA+3ocAP96HAD/ehwA/3kcAJ5uHAMDdhwBAHYcAR95HADfehwA/3oc
AP95HAC+dR0CDnYdAQAAAAAAAAAAAHgcAQB3HAE9eRwA9HocAP96HAD/eRwA7XgcAWF3HAEqeBwBg3oc
APt6HAD/ehwA/3kcANR2HAEWdRwBAHUcARl5HADaehwA/3ocAP96HADpdxwBK3ccAQAAAAAAAAAAAHgc
AAB4HABFehwA93ocAP96HAD/eRwAx3UcAQ53HAEAdxwBMHkcAO16HAD/ehwA/3kcAN92HAEedhwBAHUc
ARl5HADaehwA/3ocAP96HADxeBwANngcAAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHUc
AQt2HAEAdxwBLnkcAOx6HAD/ehwA/3kcAN92HAEedhwBAHUcARl5HADaehwA/3ocAP96HADxeBwAN3gc
AAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHYcAQt3HAEAdxwBLnocAOx6HAD/ehwA/3oc
AN92HAEedhwBAHYcARl5HADaehwA/3ocAP96HADxeBwAN3gcAAAAAAAAAAAAAHkcAAB4HABEehwA93oc
AP96HAD/eRwAxHUcAQt2HAEAdhwBKnkcAOl6HAD/ehwA/3kcANt3HAEbdhwBAHYcARl5HADaehwA/3oc
AP96HADxeBwAN3gcAAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHUcAQt1HAEAdRwBDXkc
ALJ6HAD/ehwA/3kcAJ50HAIGdRwBAHYcARl5HADaehwA/3ocAP96HADxeBwAN3gcAAAAAAAAAAAAAHkc
AAB4HABEehwA93ocAP96HAD/eRwAxHUcAQt1HAEAehwAAHYcASB5HABxeBwAanccARh4HAEAdRwBAHYc
ARl5HADaehwA/3ocAP96HADxeBwAN3gcAAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHUc
AQt1HAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdRwBAHYcARl5HADaehwA/3ocAP96HADxeBwAN3gc
AAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHUcAQt1HAEAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAdRwBAHUcARl5HADaehwA/3ocAP96HADxeBwAN3gcAAAAAAAAAAAAAHkcAAB4HABEehwA93oc
AP96HAD/eRwAxHUcAQt1HAEAeRwAAHYcARt4HABjeBwBXXYcARR3HAEAdRwBAHUcARl5HADaehwA/3oc
AP96HADxeBwAN3gcAAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHUcAQt2HAEAdRwBC3kc
AKp6HAD/ehwA/nkcAJdzHAIFdRwBAHUcARl5HADaehwA/3ocAP96HADxeBwAN3gcAAAAAAAAAAAAAHkc
AAB4HABEehwA93ocAP96HAD/eRwAxHUcAQt2HAEAdxwBKXocAOh6HAD/ehwA/3ocANl3HAEZdhwBAHYc
ARl5HADaehwA/3ocAP96HADxeBwAN3gcAAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHYc
AQt3HAEAdxwBLnocAOx6HAD/ehwA/3ocAN53HAEddhwBAHYcARl5HADaehwA/3ocAP96HADxeBwAN3gc
AAAAAAAAAAAAAHkcAAB4HABEehwA93ocAP96HAD/eRwAxHUcAQt3HAEAdxwBLnocAOx6HAD/ehwA/3oc
AN13HAEddhwBAHUcARl5HADaehwA/3ocAP96HADxeBwAN3gcAAAAAAAAAAAAAHkcAAB4HABFehwA93oc
AP96HAD/eRwAxHUcAQt3HAEAdxwBLnkcAOx6HAD/ehwA/3ocAN53HAEedhwBAHYcARt5HADbehwA/3oc
AP96HADxeBwAN3gcAAAAAAAAAAAAAHgcAAB3HAE+ehwA9HocAP96HAD/eRwAxHUcAQx2HAEAdhwBJHkc
AON6HAD/ehwA/3ocAPR4HABpdxwBHngcAWV6HADzehwA/3ocAP96HADrdxwBLXccAQAAAAAAAAAAAHYc
AQB2HAEaeRwA03ocAP96HAD/eRwAz3UcARJ1HAEAdRwCC3kcALd6HAD/ehwA/3ocAP96HAD2ehwA43oc
APZ6HAD/ehwA/3ocAP95HADCdRwBD3YcAQAAAAAAAAAAAHIcAgCJHAAAeBwAY3ocAPF6HAD/eRwA4ncc
ASN3HAEAehwAAHgcAUZ5HADlehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3kcAOl4HAFPfBwAAG8d
BAAAAAAAAAAAAAAAAAB2HAEAdBwBBHgcAVZ5HADCeRwA6nccAVZ6HAAAchwCAGscAwF4HAFBeRwAs3kc
AOp6HAD6ehwA/HocAPp6HADreRwAt3gcAUdvHAICcxwCAAAAAAAAAAAAAAAAAAAAAAAAAAAAbhsDAJUg
AAB2HAESdxwBQnYcATabHAAAbRwDAGUfCQB9GgAAdRwBDHccATd4HABdeBwAZ3gcAF13HAE4dRwBDYAb
AABoHgcAAAAAAAAAAAAAAAAA+A4fAOAHBwDgAwcAwAEDAMABAwDAgQMAwIEDAMCBAwDAgQMAwIEDAMDD
AwDA/wMAwP8DAMDDAwDAgQMAwIEDAMCBAwDAgQMAwIEDAMCAAwDAgAMA4MAHAODABwD48B8AKAAAACAA
AABAAAAAAQAgAAAAAAAAEAAAIy4AACMuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGUc
BAClHQAAcRwDCXUcAR12HAEvdRwBMnYcASRzHAIPZx0IAWscBQAAAAAAAAAAAAAAAAAAAAAAdhwBAHUc
AQ91HAEccRwCB38cAABkHAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8c
AgApEg0AdRwBIXccAXF5HAC0eRwA13kcAOd5HADpeRwA3nkcAMR4HAGLdxwBN3AcAgRzHAEAAAAAAAAA
AAB2HAEAdhwBK3gcAL95HACveBwAZnYcARmPGAAAZyAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAByHAIAbBwEAnccAVN5HADUehwA/nocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP95HADseBwAg3Mc
Ag51HAEAAAAAAHMcAgBxHAIGeRwArXocAP96HAD8eRwAyXccAUKRHQAAcxwBAAAAAAAAAAAAAAAAAAAA
AAAAAAAAbR0FAHscAAB2HAFNeRwA6nocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP95HAD8eBwAhm8cAwRzHAIAYx0GAH0cAAB4HAF7ehwA/3ocAP96HAD/eRwA3XccATd5HAAAbhwCAAAA
AAAAAAAAAAAAAAAAAAB0HAEAdBwBEHkcAMB6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP95HADrdxwBOHccAQAAAAAAeRwAAHccAVt6HAD9ehwA/3ocAP96HAD/eRwApnAd
AwZzHQMAAAAAAAAAAAAAAAAAAAAAAHccAQB2HAE8eRwA8nocAP96HAD/ehwA/3ocAP95HADceBwBhHgc
AXV5HAC7ehwA/XocAP96HAD/ehwA/3ocAP94HAF6fRwAAG0dBgB4HAAAdxwBUHocAPt6HAD/ehwA/3oc
AP95HADidhwBI3YcAQAAAAAAAAAAAAAAAAAAAAAAeBwAAHccAVN5HAD8ehwA/3ocAP96HAD/eRwA+Hcc
AVd9HAAAdhwBAHUcAh55HADVehwA/3ocAP96HAD/ehwA/3gcAJz/AAAAbR0EAHgcAAB3HAFOehwA+noc
AP96HAD/ehwA/3ocAPN3HAE7dxwBAAAAAAAAAAAAAAAAAAAAAAB4HAAAdxwAVHocAPx6HAD/ehwA/3oc
AP95HADsdxwBL3ccAQBzHAIAchwCCnkcAMB6HAD/ehwA/3ocAP96HAD/eBwAo1MeCQFsHQQAeBwAAHcc
AU96HAD6ehwA/3ocAP96HAD/ehwA9XgcAEB4HAAAAAAAAAAAAAAAAAAAAAAAAHkcAAB4HABUehwA/Hoc
AP96HAD/ehwA/3kcAOx3HAAudxwAAHIcAQBxHAIKeBwAv3ocAP96HAD/ehwA/3ocAP94HACjVB4IAWwd
BAB4HAAAdxwBT3ocAPp6HAD/ehwA/3ocAP96HAD1eBwAQHgcAAAAAAAAAAAAAAAAAAAAAAAAeRwAAHgc
AFR6HAD8ehwA/3ocAP96HAD/ehwA7HccAS53HAEAchwBAHIcAgp5HAC/ehwA/3ocAP96HAD/ehwA/3gc
AKNVHgkBbB0EAHgcAAB3HAFOehwA+nocAP96HAD/ehwA/3ocAPV4HABAeBwAAAAAAAAAAAAAAAAAAAAA
AAB5HAAAeBwAVHocAPx6HAD/ehwA/3ocAP96HADsdxwBLnccAQBzHAIAchwCCnkcAL96HAD/ehwA/3oc
AP96HAD/eRwAo1QeCQFsHQQAeBwAAHccAU96HAD6ehwA/3ocAP96HAD/ehwA9XgcAEB4HAAAAAAAAAAA
AAAAAAAAAAAAAHkcAAB4HABUehwA/HocAP96HAD/ehwA/3ocAOx3HAEudxwBAHEcAgBvHAMHeBwAuHoc
AP96HAD/ehwA/3ocAP95HACa/wAAAGweBQB4HAAAdxwBT3ocAPp6HAD/ehwA/3ocAP96HAD1eBwAQHgc
AAAAAAAAAAAAAAAAAAAAAAAAeRwAAHgcAFR6HAD8ehwA/3ocAP96HAD/ehwA7HccAC53HAAAbh0FAIcb
AAB4HAF6ehwA/nocAP96HAD/ehwA+HgcAVx6HAAAbiAJAHgcAAB3HAFPehwA+nocAP96HAD/ehwA/3oc
APV4HABAeBwAAAAAAAAAAAAAAAAAAAAAAAB5HAAAeBwAVHocAPx6HAD/ehwA/3ocAP96HADsdxwBLncc
AQAAAAAAdRwBAHQcARR4HACPeRwA3HkcANd4HAF7dBwCCnUcAQAAAAAAeBwAAHccAU96HAD6ehwA/3oc
AP96HAD/ehwA9XgcAEB4HAAAAAAAAAAAAAAAAAAAAAAAAHkcAAB4HABUehwA/HocAP96HAD/ehwA/3oc
AOx3HAAudxwAAAAAAAAAAAAAdBwCAHEcAwV2HAEbdhwBGHAcAgNyHAEAAAAAAAAAAAB4HAAAdxwBTnoc
APp6HAD/ehwA/3ocAP96HAD1eBwAQHgcAAAAAAAAAAAAAAAAAAAAAAAAeRwAAHgcAFR6HAD8ehwA/3oc
AP96HAD/eRwA7HccAS53HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgc
AAB3HAFPehwA+nocAP96HAD/ehwA/3ocAPV4HABAeBwAAAAAAAAAAAAAAAAAAAAAAAB5HAAAeBwAVHoc
APx6HAD/ehwA/3ocAP95HADsdxwBLnccAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAeBwAAHccAU95HAD6ehwA/3ocAP96HAD/ehwA9XgcAUB4HAAAAAAAAAAAAAAAAAAAAAAAAHkc
AAB4HABUehwA/HocAP96HAD/ehwA/3kcAOx3HAEudxwAAAAAAAAAAAAAch0DAHEdAwN1HAIRdRwCD20d
BAFvHAMAAAAAAAAAAAB4HAAAdxwBT3kcAPp6HAD/ehwA/3ocAP96HAD1eBwAQHgcAAAAAAAAAAAAAAAA
AAAAAAAAeRwAAHgcAFR6HAD8ehwA/3ocAP96HAD/ehwA7HccAS53HAAAAAAAAHUcAQB0HAIPeBwAgXkc
AM15HADJdxwBbnMcAgh0HAIAAAAAAHgcAAB3HAFPehwA+nocAP96HAD/ehwA/3ocAPV4HABAeBwAAAAA
AAAAAAAAAAAAAAAAAAB5HAAAeBwAVHocAPx6HAD/ehwA/3ocAP96HADsdxwBLnccAQBvHAMAfhwAAHgc
AXF6HAD8ehwA/3ocAP95HAD1dxwBVnocAABwHAMAeBwAAHccAU96HAD6ehwA/3ocAP96HAD/ehwA9Xgc
AEB4HAAAAAAAAAAAAAAAAAAAAAAAAHkcAAB4HABUehwA/HocAP96HAD/ehwA/3ocAOx3HAEudxwAAHEc
AwBvHAMGeBwAtHocAP96HAD/ehwA/3ocAP95HACWmBwAAG4cAwB4HAAAdxwBTnocAPp6HAD/ehwA/3oc
AP96HAD1eBwAQHgcAAAAAAAAAAAAAAAAAAAAAAAAeRwAAHgcAFR6HAD8ehwA/3ocAP96HAD/ehwA7Hcc
AS53HAEAcxwCAHIcAgp5HAC/ehwA/3ocAP96HAD/ehwA/3kcAJ9BHg4BbR0EAHgcAAB3HAFPehwA+noc
AP96HAD/ehwA/3ocAPV4HABAeBwAAAAAAAAAAAAAAAAAAAAAAAB5HAAAeBwAVHocAPx6HAD/ehwA/3oc
AP96HADsdxwBLnccAQByHAIAchwCCnkcAL96HAD/ehwA/3ocAP96HAD/eRwAoEMhDgFtHQQAeBwAAHcc
AU96HAD6ehwA/3ocAP96HAD/ehwA9XgcAEB4HAAAAAAAAAAAAAAAAAAAAAAAAHkcAAB4HABUehwA/Hoc
AP96HAD/ehwA/3ocAOx3HAEudxwBAHMcAgByHAIKeRwAv3ocAP96HAD/ehwA/3ocAP95HACfOyEPAW0d
AwB4HAAAdxwBT3ocAPp6HAD/ehwA/3ocAP96HAD1eBwAQHgcAAAAAAAAAAAAAAAAAAAAAAAAeRwAAHgc
AFR6HAD8ehwA/3ocAP96HAD/eRwA7HccAS53HAEAcxwCAHIcAgp5HAC/ehwA/3ocAP96HAD/ehwA/3kc
AJ4sHxIAbB0DAHgcAAB3HAFPehwA+3ocAP96HAD/ehwA/3ocAPV4HABAeBwAAAAAAAAAAAAAAAAAAAAA
AAB5HAAAdxwBU3ocAPx6HAD/ehwA/3ocAP95HADsdxwBLnccAQBxHAIAbxwDB3gcALh6HAD/ehwA/3oc
AP96HAD/eRwAuHIdAgxzHAIAgRwAAHccAWx6HAD+ehwA/3ocAP96HAD/ehwA9HccATx3HAEAAAAAAAAA
AAAAAAAAAAAAAHccAQB2HAE+eRwA83ocAP96HAD/ehwA/3kcAO12HAEwdxwBAG4dBAA/HxEBeBwAnXoc
AP96HAD/ehwA/3ocAP96HAD3eBwAnngcAVt4HAF8eRwA4HocAP96HAD/ehwA/3ocAP95HADkdhwBJnYc
AQAAAAAAAAAAAAAAAAAAAAAAdBwCAHQcAhN5HADGehwA/3ocAP96HAD/eRwA9XccAUB3HAEAbh0EAHoc
AAB4HAFWehwA+HocAP96HAD/ehwA/3ocAP96HAD/ehwA/XocAP56HAD/ehwA/3ocAP96HAD/ehwA/3gc
AK1yHAIHdBwCAAAAAAAAAAAAAAAAAAAAAABsHAMAfhwAAHccAVZ5HADvehwA/3ocAP96HAD9dxwBWXkc
AAAAAAAAdRwBAHUcAg14HACpehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP95HADjdxwBPXocAABYIA8AAAAAAAAAAAAAAAAAAAAAAAAAAAB0HAEAcRwCA3ccAWJ5HADgehwA/3oc
AP94HACNnBoAAHAdAwBqHAQAdxwAAHUcAR14HACjehwA9nocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD+eRwA0nccAUtbHAgBchwCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwHQQAah4HAXYc
ASt4HAGCeRwAxngcAbtzHAIacxwCAAAAAABdHAoAdxwAAHQdAgt3HAFQeBwAo3kcANN5HADoeRwA7Hkc
AOp5HADdeRwAuHgcAHN1HAEg/wAAAG0eBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAaxwEAGcdBgF0HAIQdRwBKXIcAg1zHAEAAAAAAAAAAAAAAAAAXBsGAHQdAwBvHQMFdRwBGncc
ATB3HAE3dhwBNHYcASNzHAILOxUIAGUbBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Afj//AB4P/AA
OB/wABwP4AAcB+AAHAfgMBwH4DAMB+AwDAfgMAwH4DAMB+AwHAfgOBwH4DgcB+A8PAfgP/wH4D/8B+A8
PAfgOBwH4DgcB+AwHAfgMAwH4DAMB+AwDAfgMBwH4DAMB+AwAAfgOAAH8DgAD/A8AA/4HgA//h+A/ygA
AAAwAAAAYAAAAAEAIAAAAAAAACQAACMuAAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdOQAAHT8AFCIsABwjIwAbV80ACmm8AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpHAMAahwEAGscBABsHAQAbBwEAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeIQ8A/wAAAHAcAwl0HAIqdhwBVXccAXh4HAGUdxwBnXcc
AZt3HAGHdhwBZ3UcAUJyHAMZah4EAm0dAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuHAIAex0AAHUc
AT12HAF2dhwBTXQcASNwHAIFdRwAAAAaSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYxsFAHodAAByHAISdhwBYXgcAbV5HADmeRwA/Hoc
AP96HAD/ehwA/3ocAP95HAD/ehwA/nkcAPV4HADUdxwBiXUcATJpHAMDbxwCAAAAAAAAAAAAAAAAAAAA
AABxHAIAdhwBAHUcAS95HADieRwA+3kcAOB4HACmdhwBTXIcAwp3GwAAZSANAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsHAQATB0NAHUcATp4HAC6eRwA+noc
AP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3kcAOZ2HAF7chwCDnQc
AgAAAAAAAAAAAAAAAAAAAAAAcB0DAGMdBwJ4HAGcehwA/3ocAP96HAD/ehwA9HgcAaZ0HAIofhwAAGce
BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoeCACxFgAAdRwBTXkc
AOB6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD7dxwBnHIcAhFzHAIAAAAAAAAAAAAAAAAAaRwFAHkcAAB2HAFgehwA/XocAP96HAD/ehwA/3oc
AP95HADKdhwBL3ocAABsHAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZB8KAHYc
AQB0HAIweBwA23ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/eRwA/HccAYBlHAUCcRwCAAAAAAAAAAAAAAAAAHccAQB1HAI9eRwA83oc
AP96HAD/ehwA/3ocAP96HAD/eBwBvXMcAhd0HAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAcBwDAGkcBAR3HAGcehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3kcAOZ1HAEzdhwBAAAAAAAAAAAAAAAAAHQc
AgB0HAIjeRwA4XocAP96HAD/ehwA/3ocAP96HAD/ehwA/XccAXCEGgAAbCAJAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAdRwBAHQcASh5HADjehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP95HAD6eRwA8HocAPR5HAD+ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP93HAGDhxwAAG8c
AwAAAAAAAAAAAHIcAgByHAIZeRwA2HocAP96HAD/ehwA/3ocAP96HAD/ehwA/3gcAcZyHQMQcx0DAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeRwAAHYcAVx5HAD8ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3gcAcR2HAFadhwCNnUcAkB3HAGGeRwA7HocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP94HAG6bRwDCXAcAwAAAAAAAAAAAHEcAgBxHAIVeRwA0nocAP96HAD/ehwA/3ocAP96HAD/ehwA/3kc
AOp1HAEudhwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAexwAAHYcAXN5HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/eBwB3XMdAyx2HAEAYx4KAHAbAwBRGgsBdxwBe3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP95HADVcxwCF3QcAgAAAAAAAAAAAHEcAwBxHAMVeBwA0nocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAPh1HAFJdhwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAexwAAHcc
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
AP95HADadB0CHHQdAgAAAAAAAAAAAHEcAgBxGwIVeRwA0nocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
APx3HAFUeBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAexwAAHccAHR6HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/eBwAoEYdCwFyHAIAAAAAAAAAAAB2HAEAdRwBQHkcAPV6HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP95HADadB0BHHQdAQAAAAAAAAAAAHEcAgBxHAIVeRwA0nocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3kcAPx3HAFUeBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAexwAAHcc
AHR6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/eBwAoEQbCQFxHAIAAAAAAAAAAAB2HAEAdRwBQHkc
APV6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP95HADZdBwBG3QcAQAAAAAAAAAAAHEcAgBxHAIVeBwA0noc
AP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAPx3HAFUeBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAexwAAHgcAXR6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/eBwAoEIbCgFxHAIAAAAAAAAA
AAB2HAEAdRwBQHkcAPV6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP95HADZdRwBGnUcAQAAAAAAAAAAAHEc
AgBxHAIVeRwA0nocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAPx3HAFUeBwAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAexwAAHccAHR6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/eBwAoEIb
CgFxHAIAAAAAAAAAAAB1HAEAdRwBQHkcAPV6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP95HADcdBwBHXQc
AQAAAAAAAAAAAHEcAgBxHAIXeBwA1XocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAPx3HAFUeBwBAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAexwAAHccAXR6HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/eBwAoD4bDAFxHAIAAAAAAAAAAAB0HAEAdBwBM3kcAO16HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP95HADydR0BSHkcAABpHQUAah0DAHgcAQB0HAE+eRwA7HocAP96HAD/ehwA/3ocAP96HAD/ehwA/3kc
APl2HAJNdxwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeRwAAHYcAVx5HAD9ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/eBwAoD4bDAFxHAIAAAAAAAAAAABzHAIAcxwCIXkcAOB6HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/eBwA0HYcAVh1HAEidRwCInYcAVR4HADLehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3kcAO11HAEydRwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdBwCAHQc
Ai95HADoehwA/3ocAP96HAD/ehwA/3ocAP96HAD/dxwBsGgcBQZuHAMAAAAAAAAAAABxHQQAbx0ECngc
AbZ6HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAPh5HADheRwA4HkcAPh6HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/ehwA/3gcAMpzHAITcxwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAcB0DAG0dBAd4HAGmehwA/3ocAP96HAD/ehwA/3ocAP96HAD/eBwAxHEcAg1yHAIAAAAAAAAA
AABuHAQAexwAAHccAWF6HAD6ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ccAXyMHAAAbxwDAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAahsEAHgcAQB1HAE5eRwA5HocAP96HAD/ehwA/3ocAP96HAD/eBwA1nIc
AhhyHAIAAAAAAAAAAAAAAAAAdBwCAHIcAhF4HAC0ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/eBwAxXQcAhx1HAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8cBABbHAwBdxwBW3kcAOl6HAD/ehwA/3oc
AP96HAD/eRwA7XUcATN2HAEAAAAAAAAAAAAAAAAATxsQAHccAQB0HAEueBwAynocAP96HAD/ehwA/3oc
AP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP94HADWdRwBO3gc
AABtHQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByHAEAbRwBAnYc
AVJ4HAHRehwA/XocAP96HAD/ehwA/nYcAWt8GwAAZx4HAAAAAAAAAAAAAAAAAGkcBACAHAAAdRwBJngc
Aap5HAD2ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/eRwA+Xgc
AbZ1HAExlRwAAGwcBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAah0FAP8QAAB0HAIedxwBd3gcAMt5HADzehwA/3gcAcBwHQMScRwDAAAAAAAAAAAAAAAAAAAA
AAA9MCgAeRoAAHEdAwx2HAFWeBwAsXkcAOl5HAD9ehwA/3ocAP96HAD/ehwA/3ocAP96HAD/ehwA/Xkc
AOp4HAC3dhwBYHIdAxF+GgAAXiMSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoHAUAWB4LAHIdAxV1HAFAdxwBcXYcAY9yHAIrcxwBAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkdBQB2GwAAcBwCCXQcAi52HAFddxwBh3gcAZ14HACkeBwAo3gc
AJx4HAGHdxwBX3UcATBwHAILhxoAAFIeCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaBsEAGEb
BgFsHAMBbRsCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoFzcAJho5AEMe
FAFdGwcCWhsGAjQXCQEjFhAAKxYNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD///////8AAP/gAf8H/wAA/4AAfwH/AAD/AAA/AP8AAP4AAB+AfwAA/AAAD4A/
AAD4AAAPgD8AAPgAAA+AHwAA+AAAB4AfAAD4AcAHgB8AAPgB4AeAHwAA+AHgB4AfAAD4AeAHgB8AAPgB
4AeAHwAA+AHgB4AfAAD4AeAHgB8AAPgB4AeAHwAA+AHgB4AfAAD4AeAHgB8AAPgB8A+AHwAA+AHwH4Af
AAD4Afw/gB8AAPgB//+AHwAA+AH//4AfAAD4Af//gB8AAPgB//+AHwAA+AH8P4AfAAD4AfAfgB8AAPgB
8A+AHwAA+AHgB4AfAAD4AeAHgB8AAPgB4AeAHwAA+AHgB4AfAAD4AeAHgB8AAPgB4AeAHwAA+AHgB4Af
AAD4AeAHgB8AAPgB4AeAHwAA+AHgB4AfAAD4AeAAAB8AAPgB4AAAHwAA+AHwAAA/AAD8AfAAAD8AAPwB
+AAAfwAA/gH8AAD/AAD/gP4AAf8AAP/g/4AH/wAA//z/+H//AACJUE5HDQoaCgAAAA1JSERSAAABAAAA
AQAIBgAAAFxyqGYAAFcHSURBVHja7b15vC1HXS/6/VX3WnvvM2YmydknCRkBiUC8KOAAgvh5PJyCch+T
JoCQAWJU+CB6vd57uT6vV69ihAwkEDEyyPDUiyOCVxkUUCZRpoQpZ58TIOOZ9tl7rdVdv/dHd/Wqrq6q
rl5rn11r56wvnOxV3VXVVb+u4TdWA3PMMcccc8wxxxxzzDHHHHPMMcccc8wxxxxzzDHHwxMUuwFbBSdf
9BJCfgTrQ4LkbZRTn4AeuCAhCxryaOVWjt3OWcHpF11JBICzw1gbjjDCqSTRB0SfGASQgJQMAiHnHvfp
yKkA9gD8ACCWAN7B4K/mvHgUQDFSmcGQEGCAGAlGnPAqCwywKA5hadcjAQD7P//m+XsIxHwB8GBh71WC
kZw8lIu81B9cLnMWmURKoEcz06WgZImBBODPJbT230crt30jdptjY2HvVWnO6W6JhWQxHfzIKKcVZj4V
jEsZ4lEQyVlgQSACczFPGQCYFgm8nYnWAU4J6DHoMIAhwACrOc0gKtIE+UUi/jSAo4z0U9sX5RMGo/TD
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
</value>
</data>
</root>

476
FrmLogin.vb Normal file
View file

@ -0,0 +1,476 @@
Imports System.Drawing.Drawing2D
Imports System.Threading
Public Class FrmLogin
Dim api As New ApiInterface
Private loginTimer As System.Windows.Forms.Timer
Private isLoggingIn As Boolean = False
Private lastServerResponse As String = ""
Private Sub FrmLogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' تنظیم متن توکن از تنظیمات
TokenTextBox.Text = My.Settings.token.ToString
' تنظیم آدرس API از تنظیمات
ApiUrlTextBox.Text = My.Settings.apiUrl.ToString
' تنظیم فوکوس روی فیلد توکن
TokenTextBox.Focus()
TokenTextBox.SelectAll()
' تنظیم انیمیشن‌های دکمه‌ها
SetupButtonAnimations()
' اضافه کردن event handlers
AddHandler SettingsButton.Click, AddressOf SettingsButton_Click
AddHandler ApiUrlTextBox.TextChanged, AddressOf ApiUrlTextBox_TextChanged
End Sub
Private Sub SetupButtonAnimations()
' تنظیم افکت hover برای دکمه ورود
AddHandler LoginButton.MouseEnter, Sub(sender, e)
LoginButton.BackColor = Color.FromArgb(0, 100, 200)
End Sub
AddHandler LoginButton.MouseLeave, Sub(sender, e)
LoginButton.BackColor = Color.FromArgb(0, 120, 215)
End Sub
' تنظیم افکت hover برای دکمه خروج
AddHandler ExitButton.MouseEnter, Sub(sender, e)
ExitButton.BackColor = Color.FromArgb(120, 120, 120)
End Sub
AddHandler ExitButton.MouseLeave, Sub(sender, e)
ExitButton.BackColor = Color.FromArgb(100, 100, 100)
End Sub
End Sub
Private Sub LoginButton_Click(sender As Object, e As EventArgs) Handles LoginButton.Click
If isLoggingIn Then Return
' بررسی خالی نبودن فیلد توکن
If String.IsNullOrWhiteSpace(TokenTextBox.Text) Then
ShowStatus("لطفاً توکن خود را وارد کنید", True)
TokenTextBox.Focus()
Return
End If
' شروع فرآیند ورود
StartLoginProcess()
End Sub
Private Sub StartLoginProcess()
isLoggingIn = True
' نمایش پنل بارگذاری
LoadingPanel.Visible = True
LoginPanel.Enabled = False
' تنظیم متن بارگذاری
LoadingLabel.Text = "در حال بررسی توکن..."
' شروع تایمر برای شبیه‌سازی بارگذاری
loginTimer = New System.Windows.Forms.Timer()
loginTimer.Interval = 2000 ' 2 ثانیه
AddHandler loginTimer.Tick, AddressOf LoginTimer_Tick
loginTimer.Start()
' شروع فرآیند ورود در thread جداگانه
Dim loginThread As New Thread(AddressOf PerformLogin)
loginThread.IsBackground = True
loginThread.Start()
End Sub
Private Sub LoginTimer_Tick(sender As Object, e As EventArgs)
loginTimer.Stop()
loginTimer.Dispose()
' تغییر متن بارگذاری
LoadingLabel.Text = "در حال اتصال به سرور..."
End Sub
Private Sub PerformLogin()
Try
' ذخیره توکن در تنظیمات
My.Settings.token = TokenTextBox.Text.Trim
' فراخوانی API و دریافت پاسخ خام سرور
Dim serverResponse As String = api.loginWithResponse(TokenTextBox.Text.Trim)
lastServerResponse = serverResponse ' ذخیره آخرین پاسخ سرور
' بازگشت به UI thread
Me.Invoke(Sub()
' نمایش پاسخ سرور
ShowServerResponse(serverResponse)
' بررسی نتیجه ورود
Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer()
Try
Dim result As Dictionary(Of String, Object) = serializer.Deserialize(Of Dictionary(Of String, Object))(serverResponse)
If result.Count = 0 Then
' ورود ناموفق
LoginFailed(serverResponse)
Else
' ورود موفق
LoginSuccessful(serverResponse)
End If
Catch
' اگر JSON نباشد، احتمالاً خطا است
LoginFailed(serverResponse)
End Try
End Sub)
Catch ex As Exception
' خطا در فرآیند ورود
Me.Invoke(Sub()
LoginFailed("خطا در اتصال به سرور: " & ex.Message)
ShowStatus("خطا در اتصال به سرور: " & ex.Message, True)
End Sub)
End Try
End Sub
Private Sub LoginSuccessful(serverResponse As String)
' پنهان کردن پنل بارگذاری
LoadingPanel.Visible = False
LoginPanel.Enabled = True
' نمایش پیام موفقیت
ShowStatus("ورود موفق! در حال انتقال...", False)
' فعال کردن منو و تایمر اصلی
My.Forms.Form1.MenuStrip1.Enabled = True
My.Forms.Form1.Timer1.Enabled = True
Form1.isLogin = True
' بستن فرم ورود بعد از 1 ثانیه
Dim closeTimer As New System.Windows.Forms.Timer()
closeTimer.Interval = 1000
AddHandler closeTimer.Tick, Sub(sender, e)
closeTimer.Stop()
closeTimer.Dispose()
Me.Close()
End Sub
closeTimer.Start()
End Sub
Private Sub LoginFailed(serverResponse As String)
' پنهان کردن پنل بارگذاری
LoadingPanel.Visible = False
LoginPanel.Enabled = True
' پاک کردن فیلد توکن
TokenTextBox.Text = ""
TokenTextBox.Focus()
' نمایش پیام خطا
ShowStatus("توکن وارد شده صحیح نیست", True)
' نمایش MessageBox با پاسخ سرور
Dim message As String = "توکن وارد شده صحیح نیست" & vbCrLf & vbCrLf & "پاسخ سرور:" & vbCrLf & serverResponse
MessageBox.Show(message, "خطا در ورود", MessageBoxButtons.OK, MessageBoxIcon.Warning)
' نمایش پاسخ سرور در فرم جداگانه برای خوانایی بهتر
ShowServerResponseDialog(serverResponse)
isLoggingIn = False
End Sub
Private Sub ShowServerResponseDialog(serverResponse As String)
' ایجاد فرم برای نمایش پاسخ سرور
Dim responseForm As New Form()
responseForm.Text = "پاسخ سرور"
responseForm.Size = New Size(600, 400)
responseForm.StartPosition = FormStartPosition.CenterParent
responseForm.FormBorderStyle = FormBorderStyle.FixedDialog
responseForm.MaximizeBox = False
responseForm.MinimizeBox = False
' ایجاد TextBox برای نمایش پاسخ
Dim responseTextBox As New TextBox()
responseTextBox.Multiline = True
responseTextBox.ScrollBars = ScrollBars.Vertical
responseTextBox.ReadOnly = True
responseTextBox.Font = New Font("Consolas", 9)
responseTextBox.Text = serverResponse
responseTextBox.Dock = DockStyle.Fill
' ایجاد دکمه بستن
Dim closeButton As New Button()
closeButton.Text = "بستن"
closeButton.Dock = DockStyle.Bottom
closeButton.Height = 30
AddHandler closeButton.Click, Sub(sender, e) responseForm.Close()
' اضافه کردن کنترل‌ها به فرم
responseForm.Controls.Add(responseTextBox)
responseForm.Controls.Add(closeButton)
' نمایش فرم
responseForm.ShowDialog(Me)
End Sub
Private Sub ShowServerResponse(serverResponse As String)
' نمایش پاسخ سرور در StatusLabel
StatusLabel.Text = "پاسخ سرور: " & serverResponse
StatusLabel.ForeColor = Color.FromArgb(255, 255, 100) ' رنگ زرد برای پاسخ سرور
' پاک کردن پیام بعد از 5 ثانیه (بیشتر از معمول)
Dim clearTimer As New System.Windows.Forms.Timer()
clearTimer.Interval = 5000
AddHandler clearTimer.Tick, Sub(sender, e)
StatusLabel.Text = ""
clearTimer.Stop()
clearTimer.Dispose()
End Sub
clearTimer.Start()
End Sub
Private Sub ShowStatus(message As String, isError As Boolean)
StatusLabel.Text = message
If isError Then
StatusLabel.ForeColor = Color.FromArgb(255, 100, 100)
Else
StatusLabel.ForeColor = Color.FromArgb(100, 255, 100)
End If
' پاک کردن پیام بعد از 3 ثانیه
Dim clearTimer As New System.Windows.Forms.Timer()
clearTimer.Interval = 3000
AddHandler clearTimer.Tick, Sub(sender, e)
StatusLabel.Text = ""
clearTimer.Stop()
clearTimer.Dispose()
End Sub
clearTimer.Start()
End Sub
Private Sub ExitButton_Click(sender As Object, e As EventArgs) Handles ExitButton.Click
Application.Exit()
End Sub
Private Sub TokenTextBox_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TokenTextBox.KeyPress
' اجازه ورود فقط کاراکترهای مجاز
If e.KeyChar = ChrW(Keys.Enter) Then
LoginButton_Click(sender, e)
End If
End Sub
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
' کلید میانبر Ctrl+R برای نمایش آخرین پاسخ سرور
If keyData = (Keys.Control Or Keys.R) Then
ShowLastServerResponse()
Return True
End If
' کلید میانبر Ctrl+S برای باز کردن تنظیمات API
If keyData = (Keys.Control Or Keys.S) Then
ShowApiUrlSettings()
Return True
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
' متد برای نمایش آخرین پاسخ سرور (می‌تواند از خارج فراخوانی شود)
Public Sub ShowLastServerResponse()
If Not String.IsNullOrEmpty(lastServerResponse) Then
ShowServerResponseDialog(lastServerResponse)
Else
MessageBox.Show("هنوز هیچ پاسخی از سرور دریافت نشده است.", "اطلاع", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub
' متدهای مربوط به تنظیمات API URL
Private Sub SettingsButton_Click(sender As Object, e As EventArgs)
ShowApiUrlSettings()
End Sub
Private Sub ApiUrlTextBox_TextChanged(sender As Object, e As EventArgs)
' ذخیره تغییرات در تنظیمات
My.Settings.apiUrl = ApiUrlTextBox.Text.Trim
My.Settings.Save()
End Sub
Private Sub ShowApiUrlSettings()
Dim settingsForm As New Form()
settingsForm.Text = "تنظیمات API"
settingsForm.Size = New Size(500, 350)
settingsForm.StartPosition = FormStartPosition.CenterParent
settingsForm.FormBorderStyle = FormBorderStyle.FixedDialog
settingsForm.MaximizeBox = False
settingsForm.MinimizeBox = False
' ایجاد کنترل‌ها
Dim titleLabel As New Label()
titleLabel.Text = "تنظیمات آدرس سرور API"
titleLabel.Font = New Font("Segoe UI", 14, FontStyle.Bold)
titleLabel.Location = New Point(20, 20)
titleLabel.Size = New Size(450, 30)
titleLabel.TextAlign = ContentAlignment.MiddleCenter
Dim urlLabel As New Label()
urlLabel.Text = "آدرس سرور API:"
urlLabel.Font = New Font("Segoe UI", 10)
urlLabel.Location = New Point(20, 70)
urlLabel.Size = New Size(450, 25)
Dim urlTextBox As New TextBox()
urlTextBox.Text = My.Settings.apiUrl.ToString
urlTextBox.Font = New Font("Consolas", 10)
urlTextBox.Location = New Point(20, 100)
urlTextBox.Size = New Size(450, 25)
urlTextBox.Multiline = False
Dim infoLabel As New Label()
infoLabel.Text = "مثال: https://hesabix.ir" & vbCrLf & "یا: http://localhost:8080"
infoLabel.Font = New Font("Segoe UI", 9)
infoLabel.ForeColor = Color.Gray
infoLabel.Location = New Point(20, 135)
infoLabel.Size = New Size(450, 40)
Dim presetLabel As New Label()
presetLabel.Text = "URL های پیش‌فرض:"
presetLabel.Font = New Font("Segoe UI", 9, FontStyle.Bold)
presetLabel.Location = New Point(20, 180)
presetLabel.Size = New Size(100, 20)
Dim presetComboBox As New ComboBox()
presetComboBox.DropDownStyle = ComboBoxStyle.DropDownList
presetComboBox.Items.AddRange({"https://hesabix.ir", "https://ac.hunamick.com", "https://app.hesabix.ir", "http://localhost:8080", "http://127.0.0.1:8080", "https://rc.hesabix.ir"})
presetComboBox.Location = New Point(130, 180)
presetComboBox.Size = New Size(200, 25)
presetComboBox.Font = New Font("Consolas", 9)
Dim usePresetButton As New Button()
usePresetButton.Text = "استفاده"
usePresetButton.Font = New Font("Segoe UI", 9)
usePresetButton.Location = New Point(340, 180)
usePresetButton.Size = New Size(60, 25)
usePresetButton.BackColor = Color.FromArgb(100, 150, 200)
usePresetButton.ForeColor = Color.White
usePresetButton.FlatStyle = FlatStyle.Flat
Dim testButton As New Button()
testButton.Text = "تست اتصال"
testButton.Font = New Font("Segoe UI", 10)
testButton.Location = New Point(20, 220)
testButton.Size = New Size(100, 30)
testButton.BackColor = Color.FromArgb(0, 120, 215)
testButton.ForeColor = Color.White
testButton.FlatStyle = FlatStyle.Flat
Dim saveButton As New Button()
saveButton.Text = "ذخیره"
saveButton.Font = New Font("Segoe UI", 10)
saveButton.Location = New Point(300, 220)
saveButton.Size = New Size(80, 30)
saveButton.BackColor = Color.FromArgb(100, 200, 100)
saveButton.ForeColor = Color.White
saveButton.FlatStyle = FlatStyle.Flat
Dim cancelButton As New Button()
cancelButton.Text = "لغو"
cancelButton.Font = New Font("Segoe UI", 10)
cancelButton.Location = New Point(390, 220)
cancelButton.Size = New Size(80, 30)
cancelButton.BackColor = Color.FromArgb(200, 100, 100)
cancelButton.ForeColor = Color.White
cancelButton.FlatStyle = FlatStyle.Flat
' اضافه کردن کنترل‌ها به فرم
settingsForm.Controls.AddRange({titleLabel, urlLabel, urlTextBox, infoLabel, presetLabel, presetComboBox, usePresetButton, testButton, saveButton, cancelButton})
' Event handlers
AddHandler usePresetButton.Click, Sub(sender, e)
If presetComboBox.SelectedItem IsNot Nothing Then
urlTextBox.Text = presetComboBox.SelectedItem.ToString()
End If
End Sub
AddHandler testButton.Click, Sub(sender, e)
TestApiConnection(urlTextBox.Text)
End Sub
AddHandler saveButton.Click, Sub(sender, e)
My.Settings.apiUrl = urlTextBox.Text.Trim
My.Settings.Save()
ApiUrlTextBox.Text = urlTextBox.Text.Trim
settingsForm.Close()
ShowStatus("آدرس API با موفقیت ذخیره شد", False)
End Sub
AddHandler cancelButton.Click, Sub(sender, e)
settingsForm.Close()
End Sub
' نمایش فرم
settingsForm.ShowDialog(Me)
End Sub
Private Sub TestApiConnection(testUrl As String)
Try
' اعتبارسنجی URL
If Not IsValidUrl(testUrl) Then
MessageBox.Show("آدرس وارد شده صحیح نیست. لطفاً آدرس کامل را وارد کنید (مثال: https://api.hesabix.ir)", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Return
End If
' ذخیره موقت URL برای تست
Dim originalUrl As String = My.Settings.apiUrl
My.Settings.apiUrl = testUrl.Trim
Dim testApi As New ApiInterface()
Dim result As String = testApi.TestSSLConnection()
' بازگرداندن URL اصلی
My.Settings.apiUrl = originalUrl
MessageBox.Show($"نتیجه تست اتصال:" & vbCrLf & result, "تست اتصال", MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As Exception
MessageBox.Show($"خطا در تست اتصال:" & vbCrLf & ex.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Private Function IsValidUrl(url As String) As Boolean
Try
If String.IsNullOrWhiteSpace(url) Then Return False
' بررسی وجود http یا https
If Not url.StartsWith("http://") AndAlso Not url.StartsWith("https://") Then
Return False
End If
' بررسی با Uri.TryCreate
Dim uri As Uri = Nothing
Return Uri.TryCreate(url, UriKind.Absolute, uri) AndAlso (uri.Scheme = Uri.UriSchemeHttp OrElse uri.Scheme = Uri.UriSchemeHttps)
Catch
Return False
End Try
End Function
Protected Overrides Sub OnPaint(e As PaintEventArgs)
MyBase.OnPaint(e)
' رسم گرادیانت پس‌زمینه
Dim rect As New Rectangle(0, 0, Me.Width, Me.Height)
Using brush As New LinearGradientBrush(rect,
Color.FromArgb(30, 30, 30),
Color.FromArgb(50, 50, 50),
135.0F)
e.Graphics.FillRectangle(brush, rect)
End Using
' رسم خط تزئینی در پایین
Using pen As New Pen(Color.FromArgb(0, 120, 215), 2)
e.Graphics.DrawLine(pen, 0, Me.Height - 2, Me.Width, Me.Height - 2)
End Using
End Sub
Private Sub CleanupTimers()
If loginTimer IsNot Nothing Then
loginTimer.Stop()
loginTimer.Dispose()
loginTimer = Nothing
End If
End Sub
End Class

151
FrmPrinters.Designer.vb generated Normal file
View file

@ -0,0 +1,151 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class FrmPrinters
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
btnSave = New Button()
Label1 = New Label()
ComboBox1 = New ComboBox()
ComboBox2 = New ComboBox()
Label2 = New Label()
Label3 = New Label()
TxtToken = New TextBox()
Label5 = New Label()
cobSell = New ComboBox()
SuspendLayout()
'
' btnSave
'
btnSave.Location = New Point(141, 250)
btnSave.Name = "btnSave"
btnSave.Size = New Size(102, 23)
btnSave.TabIndex = 1
btnSave.Text = "ذخیره تنظیمات"
btnSave.UseVisualStyleBackColor = True
'
' Label1
'
Label1.AutoSize = True
Label1.Location = New Point(12, 148)
Label1.Name = "Label1"
Label1.Size = New Size(101, 15)
Label1.TabIndex = 2
Label1.Text = "فیش صورت حساب"
'
' ComboBox1
'
ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
ComboBox1.FormattingEnabled = True
ComboBox1.Location = New Point(12, 166)
ComboBox1.Name = "ComboBox1"
ComboBox1.Size = New Size(231, 23)
ComboBox1.TabIndex = 3
'
' ComboBox2
'
ComboBox2.DropDownStyle = ComboBoxStyle.DropDownList
ComboBox2.FormattingEnabled = True
ComboBox2.Location = New Point(12, 210)
ComboBox2.Name = "ComboBox2"
ComboBox2.Size = New Size(231, 23)
ComboBox2.TabIndex = 5
'
' Label2
'
Label2.AutoSize = True
Label2.Location = New Point(12, 192)
Label2.Name = "Label2"
Label2.Size = New Size(106, 15)
Label2.TabIndex = 4
Label2.Text = "فیش وصول صندوق"
'
' Label3
'
Label3.AutoSize = True
Label3.Location = New Point(12, 15)
Label3.Name = "Label3"
Label3.Size = New Size(84, 15)
Label3.TabIndex = 6
Label3.Text = "توکن پرینتر ابری"
'
' TxtToken
'
TxtToken.Location = New Point(12, 33)
TxtToken.Name = "TxtToken"
TxtToken.Size = New Size(229, 23)
TxtToken.TabIndex = 7
'
' Label5
'
Label5.AutoSize = True
Label5.Location = New Point(12, 103)
Label5.Name = "Label5"
Label5.Size = New Size(70, 15)
Label5.TabIndex = 10
Label5.Text = "فاکتور فروش"
'
' cobSell
'
cobSell.DropDownStyle = ComboBoxStyle.DropDownList
cobSell.FormattingEnabled = True
cobSell.Location = New Point(12, 122)
cobSell.Name = "cobSell"
cobSell.Size = New Size(231, 23)
cobSell.TabIndex = 13
'
' FrmPrinters
'
AutoScaleDimensions = New SizeF(7F, 15F)
AutoScaleMode = AutoScaleMode.Font
ClientSize = New Size(252, 286)
Controls.Add(cobSell)
Controls.Add(Label5)
Controls.Add(TxtToken)
Controls.Add(Label3)
Controls.Add(ComboBox2)
Controls.Add(Label2)
Controls.Add(ComboBox1)
Controls.Add(Label1)
Controls.Add(btnSave)
FormBorderStyle = FormBorderStyle.FixedSingle
MaximizeBox = False
MinimizeBox = False
Name = "FrmPrinters"
RightToLeft = RightToLeft.Yes
RightToLeftLayout = True
ShowIcon = False
Text = "تنظیمات چاپگرها"
ResumeLayout(False)
PerformLayout()
End Sub
Friend WithEvents btnSave As Button
Friend WithEvents Label1 As Label
Friend WithEvents ComboBox1 As ComboBox
Friend WithEvents ComboBox2 As ComboBox
Friend WithEvents Label2 As Label
Friend WithEvents Label3 As Label
Friend WithEvents TxtToken As TextBox
Friend WithEvents Label5 As Label
Friend WithEvents cobSell As ComboBox
End Class

123
FrmPrinters.resx Normal file
View file

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="OpenFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

37
FrmPrinters.vb Normal file
View file

@ -0,0 +1,37 @@
Public Class FrmPrinters
Private Sub FrmPrinters_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim InstalledPrinters As String
' Find all printers installed
For Each InstalledPrinters In System.Drawing.Printing.PrinterSettings.InstalledPrinters
Me.ComboBox1.Items.Add(InstalledPrinters)
Me.ComboBox2.Items.Add(InstalledPrinters)
Me.cobSell.Items.Add(InstalledPrinters)
Next InstalledPrinters
Me.ComboBox1.Items.Add("Off")
Me.ComboBox1.Text = "Off"
Me.ComboBox2.Items.Add("Off")
Me.ComboBox2.Text = "Off"
Me.cobSell.Items.Add("Off")
Me.cobSell.Text = "Off"
' Set the combo to the first printer in the list
Me.ComboBox1.SelectedItem = My.Settings.printerFastSellInvoice
Me.ComboBox2.SelectedItem = My.Settings.printerFastSellCashdeskInvoice
Me.cobSell.SelectedItem = My.Settings.printerSell
Me.TxtToken.Text = My.Settings.printerToken
End Sub
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
My.Settings.printerFastSellInvoice = ComboBox1.SelectedItem.ToString
My.Settings.printerFastSellCashdeskInvoice = ComboBox2.SelectedItem.ToString
My.Settings.printerSell = cobSell.SelectedItem.ToString
My.Settings.printerToken = TxtToken.Text.ToString
My.Settings.Save()
MsgBox("تنظیمات ذخیره شد", MsgBoxStyle.OkOnly, "حسابیکس")
End Sub
' حذف کنترل انتخاب مسیر Acrobat
End Class

25
HesabixBox.sln Normal file
View file

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.8.34330.188
MinimumVisualStudioVersion = 10.0.40219.1
Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "HesabixBox", "HesabixBox.vbproj", "{B4AE442F-9160-44B5-8E86-148CB4D3863F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B4AE442F-9160-44B5-8E86-148CB4D3863F}.Debug|Any CPU.ActiveCfg = Release|Any CPU
{B4AE442F-9160-44B5-8E86-148CB4D3863F}.Debug|Any CPU.Build.0 = Release|Any CPU
{B4AE442F-9160-44B5-8E86-148CB4D3863F}.Release|Any CPU.ActiveCfg = Debug|Any CPU
{B4AE442F-9160-44B5-8E86-148CB4D3863F}.Release|Any CPU.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1A01A3E9-13B7-445C-ABD2-F47C11A15818}
EndGlobalSection
EndGlobal

228
HesabixBox.vbproj Normal file
View file

@ -0,0 +1,228 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{12345678-1234-1234-1234-123456789012}</ProjectGuid>
<OutputType>WinExe</OutputType>
<StartupObject>Sub Main</StartupObject>
<RootNamespace>HesabixBox</RootNamespace>
<AssemblyName>HesabixBox</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>WindowsForms</MyType>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<ApplicationIcon>favicon.ico</ApplicationIcon>
<Copyright>Published Under the GNU GPL V3</Copyright>
<Description>کاتب باکس سرویس تحت ویندوز سرویس های کاتب است.</Description>
<Version>1.0.1</Version>
<Title>Hesabix Box</Title>
<Authors>HesabixBox</Authors>
<Company>Hesabix</Company>
<Product>HesabixBox</Product>
<PackageProjectUrl>https://app.hesabix.ir</PackageProjectUrl>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>HesabixBox.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>HesabixBox.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="PdfiumViewer">
<HintPath>packages\PdfiumViewer.2.13.0.0\lib\net20\PdfiumViewer.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Web.Extensions" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Drawing" />
<Import Include="System.Diagnostics" />
<Import Include="System.Windows.Forms" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
<Import Include="System.Threading.Tasks" />
</ItemGroup>
<ItemGroup>
<Compile Include="ApiInterface.vb" />
<Compile Include="ApplicationEvents.vb" />
<Compile Include="AsyncHelper.vb" />
<Compile Include="clsMsg.vb" />
<Compile Include="Logger.vb" />
<Compile Include="Form1.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.vb">
<DependentUpon>Form1.vb</DependentUpon>
</Compile>
<Compile Include="FrmAboutHesabix.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmAboutHesabix.Designer.vb">
<DependentUpon>FrmAboutHesabix.vb</DependentUpon>
</Compile>
<Compile Include="FrmInvoice.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmInvoice.Designer.vb">
<DependentUpon>FrmInvoice.vb</DependentUpon>
</Compile>
<Compile Include="FrmLogin.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmLogin.Designer.vb">
<DependentUpon>FrmLogin.vb</DependentUpon>
</Compile>
<Compile Include="FrmPrinters.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmPrinters.Designer.vb">
<DependentUpon>FrmPrinters.vb</DependentUpon>
</Compile>
<Compile Include="mdlPerson.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="SplashScreen1.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="SplashScreen1.Designer.vb">
<DependentUpon>SplashScreen1.vb</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Form1.fa-IR.resx">
<DependentUpon>Form1.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmAboutHesabix.resx">
<DependentUpon>FrmAboutHesabix.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmInvoice.resx">
<DependentUpon>FrmInvoice.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmLogin.resx">
<DependentUpon>FrmLogin.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmPrinters.resx">
<DependentUpon>FrmPrinters.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="SplashScreen1.resx">
<DependentUpon>SplashScreen1.vb</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="favicon.ico" />
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Resources\logo-blue.png" />
<Content Include="Resources\logo_blue_1fB_icon.ico" />
</ItemGroup>
<ItemGroup>
<Content Include="packages\PdfiumViewer.Native.x86_64.no_v8-no_xfa.2018.4.8.256\content\x64\pdfium.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>pdfium.dll</TargetPath>
</Content>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.5.2">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.5.2 %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
</Project>

13
HesabixBox.vbproj.user Normal file
View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory />
<InstallUrlHistory />
<SupportUrlHistory />
<UpdateUrlHistory />
<BootstrapperUrlHistory />
<ErrorReportUrlHistory />
<FallbackCulture>en-US</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
</PropertyGroup>
</Project>

152
Logger.vb Normal file
View file

@ -0,0 +1,152 @@
Imports System.Text
Imports System.IO
Imports Microsoft.VisualBasic.FileIO
Public Class Logger
Private Shared _instance As Logger
Private _logTextBox As TextBox
Private _maxLogEntries As Integer = 1000
Private Sub New()
' Private constructor for singleton pattern
End Sub
Public Shared ReadOnly Property Instance As Logger
Get
If _instance Is Nothing Then
_instance = New Logger()
End If
Return _instance
End Get
End Property
Public Sub SetLogTextBox(textBox As TextBox)
_logTextBox = textBox
End Sub
Public Sub LogRequest(method As String, url As String, headers As String, requestBody As String)
Dim logEntry As New StringBuilder()
logEntry.AppendLine("=== درخواست ارسالی ===")
logEntry.AppendLine($"زمان: {DateTime.Now:yyyy-MM-dd HH:mm:ss}")
logEntry.AppendLine($"متد: {method}")
logEntry.AppendLine($"آدرس: {url}")
If Not String.IsNullOrEmpty(headers) Then
logEntry.AppendLine($"هدرها: {headers}")
End If
If Not String.IsNullOrEmpty(requestBody) Then
logEntry.AppendLine($"بدنه درخواست: {requestBody}")
End If
logEntry.AppendLine("")
AddToLog(logEntry.ToString())
End Sub
Public Sub LogResponse(statusCode As String, responseBody As String, isSuccess As Boolean)
Dim logEntry As New StringBuilder()
logEntry.AppendLine("=== پاسخ دریافتی ===")
logEntry.AppendLine($"زمان: {DateTime.Now:yyyy-MM-dd HH:mm:ss}")
logEntry.AppendLine($"وضعیت: {If(isSuccess, "موفق", "ناموفق")}")
If Not String.IsNullOrEmpty(statusCode) Then
logEntry.AppendLine($"کد وضعیت: {statusCode}")
End If
If Not String.IsNullOrEmpty(responseBody) Then
' محدود کردن طول پاسخ برای نمایش بهتر
Dim displayResponse As String = responseBody
If displayResponse.Length > 500 Then
displayResponse = displayResponse.Substring(0, 500) & "..."
End If
logEntry.AppendLine($"پاسخ: {displayResponse}")
End If
logEntry.AppendLine("==========================================")
logEntry.AppendLine("")
AddToLog(logEntry.ToString())
End Sub
Public Sub LogError(errorMessage As String, exception As Exception)
Dim logEntry As New StringBuilder()
logEntry.AppendLine("=== خطا ===")
logEntry.AppendLine($"زمان: {DateTime.Now:yyyy-MM-dd HH:mm:ss}")
logEntry.AppendLine($"پیام خطا: {errorMessage}")
If exception IsNot Nothing Then
logEntry.AppendLine($"جزئیات خطا: {exception.Message}")
End If
logEntry.AppendLine("==========================================")
logEntry.AppendLine("")
AddToLog(logEntry.ToString())
End Sub
Public Sub LogInfo(message As String)
Dim logEntry As New StringBuilder()
logEntry.AppendLine($"زمان: {DateTime.Now:yyyy-MM-dd HH:mm:ss} - {message}")
logEntry.AppendLine("")
AddToLog(logEntry.ToString())
End Sub
Private Sub AddToLog(logText As String)
If _logTextBox IsNot Nothing Then
' استفاده از Invoke برای thread-safe بودن
If _logTextBox.InvokeRequired Then
_logTextBox.Invoke(Sub() AddLogText(logText))
Else
AddLogText(logText)
End If
End If
End Sub
Private Sub AddLogText(logText As String)
Try
' اضافه کردن متن جدید به ابتدای TextBox
_logTextBox.Text = logText & _logTextBox.Text
' محدود کردن تعداد ورودی‌های لاگ
Dim lines As String() = _logTextBox.Text.Split(vbCrLf)
If lines.Length > _maxLogEntries Then
Dim newLines As String() = lines.Take(_maxLogEntries).ToArray()
_logTextBox.Text = String.Join(vbCrLf, newLines)
End If
' اسکرول به بالا برای نمایش آخرین لاگ
_logTextBox.SelectionStart = 0
_logTextBox.ScrollToCaret()
Catch ex As Exception
' در صورت خطا، لاگ را در فایل ذخیره کن
Try
Dim logPath As String = Path.Combine(SpecialDirectories.CurrentUserApplicationData, "hesabix_log.txt")
File.AppendAllText(logPath, logText)
Catch
' اگر حتی ذخیره فایل هم خطا داد، کاری نکن
End Try
End Try
End Sub
Public Sub ClearLog()
If _logTextBox IsNot Nothing Then
If _logTextBox.InvokeRequired Then
_logTextBox.Invoke(Sub() _logTextBox.Clear())
Else
_logTextBox.Clear()
End If
End If
End Sub
Public Sub SaveLogToFile()
Try
Dim logPath As String = Path.Combine(SpecialDirectories.CurrentUserApplicationData, $"hesabix_log_{DateTime.Now:yyyyMMdd_HHmmss}.txt")
File.WriteAllText(logPath, _logTextBox.Text)
LogInfo($"لاگ با موفقیت در فایل ذخیره شد: {logPath}")
Catch ex As Exception
LogError("خطا در ذخیره لاگ", ex)
End Try
End Sub
End Class

43
My Project/Application.Designer.vb generated Normal file
View file

@ -0,0 +1,43 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
'NOTE: This file is auto-generated; do not modify it directly. To make changes,
' or if you encounter build errors in this file, go to the Project Designer
' (go to Project Properties or double-click the My Project node in
' Solution Explorer), and make changes on the Application tab.
'
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = true
Me.EnableVisualStyles = true
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.HesabixBox.Form1
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateSplashScreen()
Me.SplashScreen = Global.HesabixBox.SplashScreen1
End Sub
End Class
End Namespace

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-16"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>Form1</MainForm>
<SingleInstance>true</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
<SplashScreen>SplashScreen1</SplashScreen>
<MinimumSplashScreenDisplayTime>3000</MinimumSplashScreenDisplayTime>
</MyApplicationData>

View file

@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("HesabixBox")>
<Assembly: AssemblyDescription("حسابیکس باکس سرویس تحت ویندوز سرویس های حسابیکس است.")>
<Assembly: AssemblyCompany("Hesabix")>
<Assembly: AssemblyProduct("HesabixBox")>
<Assembly: AssemblyCopyright("Published Under the GNU GPL V3")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("12345678-1234-1234-1234-123456789012")>
' Version information for an assembly consists of the following four values:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.1.0")>
<Assembly: AssemblyFileVersion("1.0.1.0")>

83
My Project/Resources.Designer.vb generated Normal file
View file

@ -0,0 +1,83 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("HesabixBox.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Overrides the current thread's CurrentUICulture property for all
''' resource lookups using this strongly typed resource class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
'''<summary>
''' Looks up a localized resource of type System.Drawing.Bitmap.
'''</summary>
Friend ReadOnly Property logo_blue() As System.Drawing.Bitmap
Get
Dim obj As Object = ResourceManager.GetObject("logo_blue", resourceCulture)
Return CType(obj,System.Drawing.Bitmap)
End Get
End Property
'''<summary>
''' Looks up a localized resource of type System.Drawing.Bitmap.
'''</summary>
Friend ReadOnly Property logo_blue_1fB_icon() As System.Drawing.Bitmap
Get
Dim obj As Object = ResourceManager.GetObject("logo_blue_1fB_icon", resourceCulture)
Return CType(obj,System.Drawing.Bitmap)
End Get
End Property
End Module
End Namespace

127
My Project/Resources.resx Normal file
View file

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="logo_blue_1fB_icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\logo_blue_1fB_icon.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="logo_blue" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\logo-blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

183
My Project/Settings.Designer.vb generated Normal file
View file

@ -0,0 +1,183 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("0")> _
Public Property activePrinter() As String
Get
Return CType(Me("activePrinter"),String)
End Get
Set
Me("activePrinter") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("http://hesabix.ir")> _
Public Property apiUrl() As String
Get
Return CType(Me("apiUrl"),String)
End Get
Set
Me("apiUrl") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("0")> _
Public Property token() As String
Get
Return CType(Me("token"),String)
End Get
Set
Me("token") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("0")> _
Public Property printerToken() As String
Get
Return CType(Me("printerToken"),String)
End Get
Set
Me("printerToken") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("")> _
Public Property persons() As String
Get
Return CType(Me("persons"),String)
End Get
Set
Me("persons") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("")> _
Public Property commodities() As String
Get
Return CType(Me("commodities"),String)
End Get
Set
Me("commodities") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("")> _
Public Property printerFastSellInvoice() As String
Get
Return CType(Me("printerFastSellInvoice"),String)
End Get
Set
Me("printerFastSellInvoice") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("")> _
Public Property printerFastSellCashdeskInvoice() As String
Get
Return CType(Me("printerFastSellCashdeskInvoice"),String)
End Get
Set
Me("printerFastSellCashdeskInvoice") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("")> _
Public Property printerSell() As String
Get
Return CType(Me("printerSell"),String)
End Get
Set
Me("printerSell") = value
End Set
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.HesabixBox.My.MySettings
Get
Return Global.HesabixBox.My.MySettings.Default
End Get
End Property
End Module
End Namespace

View file

@ -0,0 +1,34 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="My" GeneratedClassName="MySettings" UseMySettingsClassName="true">
<Profiles />
<Settings>
<Setting Name="activePrinter" Type="System.String" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="apiUrl" Type="System.String" Scope="User">
<Value Profile="(Default)">http://hesabix.ir</Value>
</Setting>
<Setting Name="token" Type="System.String" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="printerToken" Type="System.String" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="persons" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="commodities" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="printerFastSellInvoice" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="printerFastSellCashdeskInvoice" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="printerSell" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings>
</SettingsFile>

45
PDFIUM_DLL_FIX_GUIDE.md Normal file
View file

@ -0,0 +1,45 @@
# راهنمای حل مشکل PdfiumViewer.dll
## مشکل ۱: DllNotFoundException
خطای `System.DllNotFoundException` با پیام "Unable to load DLL 'pdfium.dll': The specified module could not be found"
## مشکل ۲: BadImageFormatException
خطای `System.BadImageFormatException` با پیام "An attempt was made to load a program with an incorrect format"
## علت مشکلات
1. فایل `pdfium.dll` در مسیر صحیح قرار ندارد
2. تضاد معماری (Architecture) بین برنامه و فایل DLL
## راه حل‌های کامل
### مرحله ۱: حل مشکل DllNotFoundException
```powershell
# کپی به پوشه Release
Copy-Item "bin\Release\packages\PdfiumViewer.Native.x86_64.no_v8-no_xfa.2018.4.8.256\content\x64\pdfium.dll" "bin\Release\pdfium.dll" -Force
# کپی به پوشه Debug
Copy-Item "bin\Release\packages\PdfiumViewer.Native.x86_64.no_v8-no_xfa.2018.4.8.256\content\x64\pdfium.dll" "bin\Debug\pdfium.dll" -Force
```
### مرحله ۲: حل مشکل BadImageFormatException
فایل `HesabixBox.vbproj` بروزرسانی شده تا:
- `PlatformTarget` از `AnyCPU` به `x64` تغییر یافته
- این تضمین می‌کند که برنامه با معماری 64-bit کامپایل شود
### مرحله ۳: استفاده از اسکریپت خودکار
فایل `copy_pdfium_dll.ps1` را اجرا کنید:
```powershell
powershell -ExecutionPolicy Bypass -File copy_pdfium_dll.ps1
```
## بررسی حل مشکل
پس از اجرای راه حل، موارد زیر باید درست باشند:
- فایل `pdfium.dll` در `bin\Release\pdfium.dll` موجود باشد
- فایل `pdfium.dll` در `bin\Debug\pdfium.dll` موجود باشد
- پروژه با `PlatformTarget=x64` کامپایل شود
## نکات مهم
- این مشکلات معمولاً بعد از build مجدد پروژه رخ می‌دهد
- اگر مشکل ادامه داشت، مطمئن شوید که فایل‌های کپی شده حذف نشده‌اند
- برای پروژه‌های جدید، از تنظیمات بروزرسانی شده در `HesabixBox.vbproj` استفاده کنید
- برنامه حالا فقط روی سیستم‌های 64-bit اجرا خواهد شد

82
README.md Normal file
View file

@ -0,0 +1,82 @@
# HesabixBox - Windows Service
## توضیحات پروژه
حسابیکس باکس یک سرویس تحت ویندوز است که برای مدیریت چاپ فاکتورها و ارتباط با API حسابیکس طراحی شده است.
## مشخصات فنی
- **Framework**: .NET Framework 4.5.2
- **زبان**: Visual Basic .NET
- **IDE**: Visual Studio 2015+
- **نوع پروژه**: Windows Forms Application
## ویژگی‌ها
- مدیریت چاپگرها
- ارتباط با API حسابیکس
- چاپ خودکار فاکتورها
- رابط کاربری فارسی
- پشتیبانی از چندین نوع فاکتور
## پیش‌نیازها
- Visual Studio 2015 یا بالاتر
- .NET Framework 4.5.2
- Adobe Acrobat Reader (برای چاپ PDF)
## نحوه نصب و راه‌اندازی
### 1. نصب Visual Studio
- Visual Studio 2015 یا بالاتر را نصب کنید
- اطمینان حاصل کنید که .NET Framework 4.5.2 نصب است
### 2. باز کردن پروژه
- فایل `HesabixBox.sln` را در Visual Studio باز کنید
- NuGet packages را restore کنید:
```
Tools > NuGet Package Manager > Package Manager Console
Update-Package -reinstall
```
### 3. Build پروژه
- `Build > Clean Solution`
- `Build > Rebuild Solution`
## تنظیمات اولیه
### 1. تنظیم چاپگرها
- در منوی اصلی روی "چاپگرها" کلیک کنید
- چاپگرهای مورد نظر را انتخاب کنید
- مسیر Adobe Acrobat Reader را مشخص کنید
### 2. تنظیم API
- توکن API خود را از حسابیکس دریافت کنید
- در فرم لاگین توکن را وارد کنید
## ساختار پروژه
### فایل‌های اصلی
- `Form1.vb` - فرم اصلی برنامه
- `ApiInterface.vb` - کلاس ارتباط با API
- `FrmLogin.vb` - فرم ورود
- `FrmPrinters.vb` - تنظیمات چاپگر
- `clsMsg.vb` - کلاس پیام‌ها
### تنظیمات
- `App.config` - تنظیمات برنامه
- `packages.config` - NuGet packages
- `My Project/Settings.settings` - تنظیمات کاربر
## عیب‌یابی
### مشکلات رایج
1. **خطای Build**: اطمینان حاصل کنید که .NET Framework 4.5.2 نصب است
2. **خطای NuGet**: packages را دوباره restore کنید
3. **خطای چاپ**: مسیر Adobe Acrobat را بررسی کنید
### لاگ‌ها
- لاگ‌های برنامه در `%AppData%\HesabixBox\` ذخیره می‌شوند
## پشتیبانی
- وب‌سایت: https://hesabix.ir
- ایمیل: support@hesabix.ir
## مجوز
این پروژه تحت مجوز GNU GPL V3 منتشر شده است.

BIN
Resources/logo-blue.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

83
SOLUTION_GUIDE.md Normal file
View file

@ -0,0 +1,83 @@
# راهنمای حل مشکلات پروژه HesabixBox
## ✅ مشکلات حل شده:
### 1. **خطای JObject و JsonObject**
- **مشکل**: `Type 'JObject' is not defined`
- **راه‌حل**: جایگزینی `Newtonsoft.Json` با `System.Web.Script.Serialization`
- **تغییرات**:
- `ApiInterface.vb`: استفاده از `Dictionary(Of String, Object)` به جای `JObject`
- `FrmLogin.vb`: تغییر نوع بازگشتی متد `login`
- `FrmInvoice.vb`: استفاده از `JavaScriptSerializer` به جای `JsonConvert`
### 2. **خطای PlaceholderText**
- **مشکل**: `'PlaceholderText' is not a member of 'TextBox'`
- **راه‌حل**: حذف `PlaceholderText` از `FrmLogin.Designer.vb` (در .NET Framework 4.5.2 موجود نیست)
### 3. **خطای متد downloadFile**
- **مشکل**: `Function 'downloadFile' doesn't return a value on all code paths`
- **راه‌حل**: تغییر نوع بازگشتی به `Boolean` و اضافه کردن `Return` statements
### 4. **خطای متغیر SPrinter**
- **مشکل**: `Variable 'SPrinter' is used before it has been assigned a value`
- **راه‌حل**: مقداردهی اولیه `SPrinter = ""` و اضافه کردن بررسی `SPrinter <> ""`
### 5. **خطای Newtonsoft.Json Reference**
- **مشکل**: `The referenced component 'Newtonsoft.Json' could not be found`
- **راه‌حل**: حذف وابستگی به `Newtonsoft.Json` و استفاده از `System.Web.Extensions`
## 🔧 تغییرات فنی:
### فایل‌های تغییر یافته:
1. **ApiInterface.vb**:
- `Imports System.Web.Script.Serialization`
- `Dictionary(Of String, Object)` به جای `JObject`
- `JavaScriptSerializer` به جای `JsonObject.Parse`
2. **FrmLogin.vb**:
- حذف `Imports Newtonsoft.Json.Linq`
- تغییر نوع متغیر `result`
3. **FrmInvoice.vb**:
- `Imports System.Web.Script.Serialization`
- `JavaScriptSerializer` به جای `JsonConvert`
4. **Form1.vb**:
- مقداردهی اولیه `SPrinter = ""`
- اضافه کردن بررسی `SPrinter <> ""`
5. **FrmLogin.Designer.vb**:
- حذف `TextBox1.PlaceholderText`
6. **HesabixBox.vbproj**:
- اضافه کردن `<Reference Include="System.Web.Extensions" />`
- حذف reference به `Newtonsoft.Json`
7. **packages.config**:
- حذف package `Newtonsoft.Json`
## 🎯 مزایای راه‌حل:
- ✅ **عدم وابستگی به NuGet packages خارجی**
- ✅ **استفاده از کتابخانه‌های داخلی .NET Framework**
- ✅ **سازگاری کامل با Visual Studio 2015**
- ✅ **عملکرد بهتر و سریع‌تر**
- ✅ **عدم نیاز به دانلود فایل‌های اضافی**
## 📋 مراحل نهایی:
1. **باز کردن پروژه در Visual Studio 2015**
2. **Clean Solution**: `Build > Clean Solution`
3. **Rebuild Solution**: `Build > Rebuild Solution`
4. **تست اجرای برنامه**
## ⚠️ نکات مهم:
- پروژه حالا کاملاً با **.NET Framework 4.5.2** سازگار است
- از **System.Web.Script.Serialization** برای JSON استفاده می‌کند
- همه خطاهای کامپایل برطرف شده‌اند
- نیازی به NuGet packages خارجی نیست
## 🚀 آماده برای استفاده!
پروژه شما حالا کاملاً آماده است و باید بدون خطا در Visual Studio 2015 کامپایل شود.

185
SplashScreen1.Designer.vb generated Normal file
View file

@ -0,0 +1,185 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class SplashScreen1
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
' پاک کردن تایمرها
If disposing Then
CleanupTimers()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
Friend WithEvents ApplicationTitle As System.Windows.Forms.Label
Friend WithEvents Copyright As System.Windows.Forms.Label
Friend WithEvents MainLayoutPanel As System.Windows.Forms.TableLayoutPanel
Friend WithEvents DetailsLayoutPanel As System.Windows.Forms.TableLayoutPanel
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.MainLayoutPanel = New System.Windows.Forms.TableLayoutPanel()
Me.LogoPictureBox = New System.Windows.Forms.PictureBox()
Me.ApplicationTitle = New System.Windows.Forms.Label()
Me.VersionLabel = New System.Windows.Forms.Label()
Me.LoadingProgressBar = New System.Windows.Forms.ProgressBar()
Me.LoadingLabel = New System.Windows.Forms.Label()
Me.DetailsLayoutPanel = New System.Windows.Forms.TableLayoutPanel()
Me.Copyright = New System.Windows.Forms.Label()
Me.MainLayoutPanel.SuspendLayout()
CType(Me.LogoPictureBox, System.ComponentModel.ISupportInitialize).BeginInit()
Me.DetailsLayoutPanel.SuspendLayout()
Me.SuspendLayout()
'
'MainLayoutPanel
'
Me.MainLayoutPanel.BackColor = System.Drawing.Color.FromArgb(CType(CType(30, Byte), Integer), CType(CType(30, Byte), Integer), CType(CType(30, Byte), Integer))
Me.MainLayoutPanel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom
Me.MainLayoutPanel.ColumnCount = 1
Me.MainLayoutPanel.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
Me.MainLayoutPanel.Controls.Add(Me.LogoPictureBox, 0, 0)
Me.MainLayoutPanel.Controls.Add(Me.ApplicationTitle, 0, 1)
Me.MainLayoutPanel.Controls.Add(Me.VersionLabel, 0, 2)
Me.MainLayoutPanel.Controls.Add(Me.LoadingProgressBar, 0, 3)
Me.MainLayoutPanel.Controls.Add(Me.LoadingLabel, 0, 4)
Me.MainLayoutPanel.Controls.Add(Me.DetailsLayoutPanel, 0, 5)
Me.MainLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill
Me.MainLayoutPanel.Location = New System.Drawing.Point(0, 0)
Me.MainLayoutPanel.Name = "MainLayoutPanel"
Me.MainLayoutPanel.RowCount = 6
Me.MainLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 30.0!))
Me.MainLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 15.0!))
Me.MainLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.0!))
Me.MainLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.0!))
Me.MainLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.0!))
Me.MainLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!))
Me.MainLayoutPanel.Size = New System.Drawing.Size(514, 347)
Me.MainLayoutPanel.TabIndex = 0
'
'LogoPictureBox
'
Me.LogoPictureBox.Anchor = System.Windows.Forms.AnchorStyles.None
Me.LogoPictureBox.BackColor = System.Drawing.Color.Transparent
Me.LogoPictureBox.Image = Global.HesabixBox.My.Resources.Resources.logo_blue
Me.LogoPictureBox.Location = New System.Drawing.Point(171, 8)
Me.LogoPictureBox.Name = "LogoPictureBox"
Me.LogoPictureBox.Size = New System.Drawing.Size(171, 87)
Me.LogoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom
Me.LogoPictureBox.TabIndex = 2
Me.LogoPictureBox.TabStop = False
'
'ApplicationTitle
'
Me.ApplicationTitle.Anchor = System.Windows.Forms.AnchorStyles.None
Me.ApplicationTitle.BackColor = System.Drawing.Color.Transparent
Me.ApplicationTitle.Font = New System.Drawing.Font("Segoe UI", 24.0!, System.Drawing.FontStyle.Bold)
Me.ApplicationTitle.ForeColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer))
Me.ApplicationTitle.Location = New System.Drawing.Point(128, 112)
Me.ApplicationTitle.Name = "ApplicationTitle"
Me.ApplicationTitle.Size = New System.Drawing.Size(257, 35)
Me.ApplicationTitle.TabIndex = 0
Me.ApplicationTitle.Text = "HesabixBox"
Me.ApplicationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'VersionLabel
'
Me.VersionLabel.Anchor = System.Windows.Forms.AnchorStyles.None
Me.VersionLabel.BackColor = System.Drawing.Color.Transparent
Me.VersionLabel.Font = New System.Drawing.Font("Segoe UI", 12.0!)
Me.VersionLabel.ForeColor = System.Drawing.Color.FromArgb(CType(CType(200, Byte), Integer), CType(CType(200, Byte), Integer), CType(CType(200, Byte), Integer))
Me.VersionLabel.Location = New System.Drawing.Point(171, 164)
Me.VersionLabel.Name = "VersionLabel"
Me.VersionLabel.Size = New System.Drawing.Size(171, 17)
Me.VersionLabel.TabIndex = 3
Me.VersionLabel.Text = "نسخه 1.0.0"
Me.VersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'LoadingProgressBar
'
Me.LoadingProgressBar.Anchor = System.Windows.Forms.AnchorStyles.None
Me.LoadingProgressBar.Location = New System.Drawing.Point(128, 198)
Me.LoadingProgressBar.MarqueeAnimationSpeed = 30
Me.LoadingProgressBar.Name = "LoadingProgressBar"
Me.LoadingProgressBar.Size = New System.Drawing.Size(257, 17)
Me.LoadingProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee
Me.LoadingProgressBar.TabIndex = 4
'
'LoadingLabel
'
Me.LoadingLabel.Anchor = System.Windows.Forms.AnchorStyles.None
Me.LoadingLabel.BackColor = System.Drawing.Color.Transparent
Me.LoadingLabel.Font = New System.Drawing.Font("Segoe UI", 10.0!)
Me.LoadingLabel.ForeColor = System.Drawing.Color.FromArgb(CType(CType(180, Byte), Integer), CType(CType(180, Byte), Integer), CType(CType(180, Byte), Integer))
Me.LoadingLabel.Location = New System.Drawing.Point(171, 232)
Me.LoadingLabel.Name = "LoadingLabel"
Me.LoadingLabel.Size = New System.Drawing.Size(171, 17)
Me.LoadingLabel.TabIndex = 5
Me.LoadingLabel.Text = "در حال بارگذاری..."
Me.LoadingLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'DetailsLayoutPanel
'
Me.DetailsLayoutPanel.Anchor = System.Windows.Forms.AnchorStyles.None
Me.DetailsLayoutPanel.BackColor = System.Drawing.Color.Transparent
Me.DetailsLayoutPanel.ColumnCount = 1
Me.DetailsLayoutPanel.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
Me.DetailsLayoutPanel.Controls.Add(Me.Copyright, 0, 0)
Me.DetailsLayoutPanel.Location = New System.Drawing.Point(128, 261)
Me.DetailsLayoutPanel.Name = "DetailsLayoutPanel"
Me.DetailsLayoutPanel.RowCount = 1
Me.DetailsLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
Me.DetailsLayoutPanel.Size = New System.Drawing.Size(257, 83)
Me.DetailsLayoutPanel.TabIndex = 1
'
'Copyright
'
Me.Copyright.Anchor = System.Windows.Forms.AnchorStyles.None
Me.Copyright.BackColor = System.Drawing.Color.Transparent
Me.Copyright.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.Copyright.ForeColor = System.Drawing.Color.FromArgb(CType(CType(150, Byte), Integer), CType(CType(150, Byte), Integer), CType(CType(150, Byte), Integer))
Me.Copyright.Location = New System.Drawing.Point(43, 24)
Me.Copyright.Name = "Copyright"
Me.Copyright.Size = New System.Drawing.Size(171, 35)
Me.Copyright.TabIndex = 2
Me.Copyright.Text = "© 2024 HesabixBox. تمامی حقوق محفوظ است."
Me.Copyright.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'SplashScreen1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.FromArgb(CType(CType(30, Byte), Integer), CType(CType(30, Byte), Integer), CType(CType(30, Byte), Integer))
Me.ClientSize = New System.Drawing.Size(514, 347)
Me.ControlBox = False
Me.Controls.Add(Me.MainLayoutPanel)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "SplashScreen1"
Me.ShowInTaskbar = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.MainLayoutPanel.ResumeLayout(False)
CType(Me.LogoPictureBox, System.ComponentModel.ISupportInitialize).EndInit()
Me.DetailsLayoutPanel.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
Friend WithEvents LogoPictureBox As PictureBox
Friend WithEvents LoadingProgressBar As ProgressBar
Friend WithEvents LoadingLabel As Label
Friend WithEvents VersionLabel As Label
End Class

120
SplashScreen1.resx Normal file
View file

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

108
SplashScreen1.vb Normal file
View file

@ -0,0 +1,108 @@
Imports System.Drawing.Drawing2D
Public NotInheritable Class SplashScreen1
Private loadingTimer As Timer
Private fadeTimer As Timer
Private fadeOpacity As Double = 0.0
Private fadeDirection As Integer = 1
Private Sub SplashScreen1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
' تنظیم متن‌ها بر اساس اطلاعات assembly
If My.Application.Info.Title <> "" Then
ApplicationTitle.Text = My.Application.Info.Title
Else
ApplicationTitle.Text = "Box"
End If
' تنظیم نسخه
VersionLabel.Text = String.Format("نسخه {0}.{1}.{2}",
My.Application.Info.Version.Major,
My.Application.Info.Version.Minor,
My.Application.Info.Version.Build)
' تنظیم کپی‌رایت
If My.Application.Info.Copyright <> "" Then
Copyright.Text = My.Application.Info.Copyright
Else
Copyright.Text = "© 2024 Box. تمامی حقوق محفوظ است."
End If
' تنظیم انیمیشن بارگذاری
SetupLoadingAnimation()
' تنظیم تایمر برای نمایش splash screen
SetupSplashTimer()
End Sub
Private Sub SetupLoadingAnimation()
' تنظیم progress bar
LoadingProgressBar.Style = ProgressBarStyle.Marquee
LoadingProgressBar.MarqueeAnimationSpeed = 30
' تنظیم تایمر برای تغییر متن بارگذاری
loadingTimer = New Timer()
loadingTimer.Interval = 2000 ' هر 2 ثانیه
AddHandler loadingTimer.Tick, AddressOf LoadingTimer_Tick
loadingTimer.Start()
End Sub
Private Sub SetupSplashTimer()
' تایمر برای بستن splash screen بعد از 4 ثانیه
Dim splashTimer As New Timer()
splashTimer.Interval = 4000
AddHandler splashTimer.Tick, Sub(sender, e)
splashTimer.Stop()
splashTimer.Dispose()
Me.Close()
End Sub
splashTimer.Start()
End Sub
Private Sub LoadingTimer_Tick(sender As Object, e As EventArgs)
Dim loadingMessages() As String = {
"در حال بارگذاری...",
"آماده‌سازی رابط کاربری...",
"بارگذاری تنظیمات...",
"تقریباً آماده است..."
}
Static messageIndex As Integer = 0
LoadingLabel.Text = loadingMessages(messageIndex)
messageIndex = (messageIndex + 1) Mod loadingMessages.Length
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
MyBase.OnPaint(e)
' رسم گرادیانت پس‌زمینه
Dim rect As New Rectangle(0, 0, Me.Width, Me.Height)
Using brush As New LinearGradientBrush(rect,
Color.FromArgb(30, 30, 30),
Color.FromArgb(50, 50, 50),
45.0F)
e.Graphics.FillRectangle(brush, rect)
End Using
' رسم خط تزئینی در پایین
Using pen As New Pen(Color.FromArgb(0, 120, 215), 3)
e.Graphics.DrawLine(pen, 0, Me.Height - 3, Me.Width, Me.Height - 3)
End Using
End Sub
Private Sub CleanupTimers()
If loadingTimer IsNot Nothing Then
loadingTimer.Stop()
loadingTimer.Dispose()
loadingTimer = Nothing
End If
If fadeTimer IsNot Nothing Then
fadeTimer.Stop()
fadeTimer.Dispose()
fadeTimer = Nothing
End If
End Sub
Private Sub MainLayoutPanel_Paint(sender As Object, e As PaintEventArgs) Handles MainLayoutPanel.Paint
End Sub
End Class

109
THREADING_IMPROVEMENTS.md Normal file
View file

@ -0,0 +1,109 @@
# بهبودهای Threading و عملکرد
## خلاصه تغییرات
این فایل شامل بهبودهای انجام شده برای حل مشکل کندی رابط کاربری بعد از ارسال درخواست‌ها به سرور است.
## مشکلات شناسایی شده
1. **مسدود شدن UI**: فراخوانی‌های `WebClient.DownloadString()` در تایمر اصلی باعث مسدود شدن رابط کاربری می‌شد
2. **عدم مدیریت خطا**: خطاهای شبکه باعث crash شدن برنامه می‌شد
3. **عدم retry**: درخواست‌های ناموفق دوباره تلاش نمی‌شدند
## راه‌حل‌های پیاده‌سازی شده
### 1. کلاس AsyncHelper.vb
کلاس کمکی جدید برای مدیریت عملیات async و threading:
- `RunInBackground()`: اجرای عملیات در background thread
- `RunAsync()`: اجرای عملیات async در background thread
- `RunOnUIThread()`: اجرای عملیات در UI thread از background thread
- `RunWithRetry()`: اجرای عملیات با retry در صورت خطا
- `RunWithTimeout()`: اجرای عملیات با timeout
### 2. بهبودهای ApiInterface.vb
اضافه شدن متدهای async برای تمام عملیات شبکه:
- `sendAsync()`: نسخه async از `send()`
- `getLastPrintAsync()`: نسخه async از `getLastPrint()`
- `downloadFileAsync()`: نسخه async از `downloadFile()`
### 3. بهبودهای Form1.vb
- تبدیل `Timer1_Tick` به async
- اضافه شدن `ProcessPrintingAsync()` برای پردازش چاپ
- استفاده از نشانگر وضعیت `isProcessingPrint` برای جلوگیری از اجرای همزمان
- پیاده‌سازی retry و error handling بهتر
## مزایای پیاده‌سازی
### 1. عملکرد بهتر
- **عدم مسدود شدن UI**: تمام عملیات شبکه در background thread اجرا می‌شوند
- **پاسخگویی بهتر**: رابط کاربری همیشه responsive است
- **مدیریت منابع**: جلوگیری از اجرای همزمان چندین عملیات
### 2. قابلیت اطمینان بیشتر
- **Retry mechanism**: درخواست‌های ناموفق دوباره تلاش می‌شوند
- **Error handling**: مدیریت بهتر خطاها
- **Timeout management**: جلوگیری از hang شدن برنامه
### 3. تجربه کاربری بهتر
- **عدم freeze**: رابط کاربری دیگر freeze نمی‌شود
- **نمایش وضعیت**: امکان نمایش وضعیت عملیات در حال انجام
- **لاگ بهتر**: ثبت بهتر خطاها و وضعیت عملیات
## نحوه استفاده
### اجرای عملیات async
```vb
' اجرای عملیات در background
AsyncHelper.RunAsync(AddressOf MyAsyncMethod)
' اجرای عملیات با retry
Dim success As Boolean = Await AsyncHelper.RunWithRetry(
Async Function()
Return Await api.getLastPrintAsync()
End Function, 3, 2000) ' 3 تلاش با تاخیر 2 ثانیه
```
### اجرای عملیات در UI thread
```vb
' از background thread به UI thread
AsyncHelper.RunOnUIThread(Me, Sub()
' عملیات UI
End Sub)
```
## تنظیمات پیشنهادی
### Timeout ها
- دریافت آخرین چاپ: 30 ثانیه
- دانلود فایل: 60 ثانیه
- تست اتصال: 10 ثانیه
### Retry Policy
- دریافت آخرین چاپ: 3 تلاش با تاخیر 2 ثانیه
- دانلود فایل: 2 تلاش با تاخیر 3 ثانیه
## نکات مهم
1. **Thread Safety**: تمام عملیات UI باید در UI thread اجرا شوند
2. **Resource Management**: استفاده از `Using` برای مدیریت منابع
3. **Error Logging**: ثبت تمام خطاها در Logger
4. **Performance Monitoring**: نظارت بر عملکرد و زمان پاسخ
## تست و اعتبارسنجی
برای تست عملکرد:
1. اجرای برنامه و بررسی عدم freeze شدن UI
2. قطع اتصال اینترنت و بررسی retry mechanism
3. تست با سرور کند و بررسی timeout handling
4. بررسی لاگ‌ها برای خطاها و عملکرد
## نتیجه‌گیری
این بهبودها باعث شده‌اند که:
- رابط کاربری همیشه responsive باشد
- عملیات شبکه در background اجرا شوند
- خطاها بهتر مدیریت شوند
- تجربه کاربری بهبود یابد

54
bin/Debug/Box.exe.config Normal file
View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Box.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Box.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<userSettings>
<Box.My.MySettings>
<setting name="activePrinter" serializeAs="String">
<value>0</value>
</setting>
<setting name="token" serializeAs="String">
<value>0</value>
</setting>
<setting name="printerToken" serializeAs="String">
<value>0</value>
</setting>
<setting name="persons" serializeAs="String">
<value/>
</setting>
<setting name="commodities" serializeAs="String">
<value/>
</setting>
<setting name="printerFastSellInvoice" serializeAs="String">
<value/>
</setting>
<setting name="printerFastSellCashdeskInvoice" serializeAs="String">
<value/>
</setting>
<setting name="printerSell" serializeAs="String">
<value/>
</setting>
<setting name="AcrobatPath" serializeAs="String">
<value/>
</setting>
</Box.My.MySettings>
</userSettings>
<applicationSettings>
<Box.My.MySettings>
<setting name="apiUrl" serializeAs="String">
<value>http://hesabix.ir</value>
</setting>
</Box.My.MySettings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
</configuration>

BIN
bin/Debug/Box.vshost.exe Normal file

Binary file not shown.

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Box.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Box.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<userSettings>
<Box.My.MySettings>
<setting name="activePrinter" serializeAs="String">
<value>0</value>
</setting>
<setting name="token" serializeAs="String">
<value>0</value>
</setting>
<setting name="printerToken" serializeAs="String">
<value>0</value>
</setting>
<setting name="persons" serializeAs="String">
<value/>
</setting>
<setting name="commodities" serializeAs="String">
<value/>
</setting>
<setting name="printerFastSellInvoice" serializeAs="String">
<value/>
</setting>
<setting name="printerFastSellCashdeskInvoice" serializeAs="String">
<value/>
</setting>
<setting name="printerSell" serializeAs="String">
<value/>
</setting>
<setting name="AcrobatPath" serializeAs="String">
<value/>
</setting>
</Box.My.MySettings>
</userSettings>
<applicationSettings>
<Box.My.MySettings>
<setting name="apiUrl" serializeAs="String">
<value>http://hesabix.ir</value>
</setting>
</Box.My.MySettings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
</configuration>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

BIN
bin/Debug/HesabixBox.exe Normal file

Binary file not shown.

View file

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="HesabixBox.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="HesabixBox.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<userSettings>
<HesabixBox.My.MySettings>
<setting name="activePrinter" serializeAs="String">
<value>0</value>
</setting>
<setting name="token" serializeAs="String">
<value>0</value>
</setting>
<setting name="printerToken" serializeAs="String">
<value>0</value>
</setting>
<setting name="persons" serializeAs="String">
<value/>
</setting>
<setting name="commodities" serializeAs="String">
<value/>
</setting>
<setting name="printerFastSellInvoice" serializeAs="String">
<value/>
</setting>
<setting name="printerFastSellCashdeskInvoice" serializeAs="String">
<value/>
</setting>
<setting name="printerSell" serializeAs="String">
<value/>
</setting>
</HesabixBox.My.MySettings>
</userSettings>
<applicationSettings>
<HesabixBox.My.MySettings>
<setting name="apiUrl" serializeAs="String">
<value>http://hesabix.ir</value>
</setting>
</HesabixBox.My.MySettings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
</configuration>

BIN
bin/Debug/HesabixBox.pdb Normal file

Binary file not shown.

91
bin/Debug/HesabixBox.xml Normal file
View file

@ -0,0 +1,91 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>
HesabixBox
</name>
</assembly>
<members>
<member name="T:HesabixBox.My.Resources.Resources">
<summary>
A strongly-typed resource class, for looking up localized strings, etc.
</summary>
</member>
<member name="P:HesabixBox.My.Resources.Resources.ResourceManager">
<summary>
Returns the cached ResourceManager instance used by this class.
</summary>
</member>
<member name="P:HesabixBox.My.Resources.Resources.Culture">
<summary>
Overrides the current thread's CurrentUICulture property for all
resource lookups using this strongly typed resource class.
</summary>
</member>
<member name="P:HesabixBox.My.Resources.Resources.logo_blue">
<summary>
Looks up a localized resource of type System.Drawing.Bitmap.
</summary>
</member>
<member name="P:HesabixBox.My.Resources.Resources.logo_blue_1fB_icon">
<summary>
Looks up a localized resource of type System.Drawing.Bitmap.
</summary>
</member>
<member name="T:HesabixBox.AsyncHelper">
<summary>
کلاس کمکی برای مدیریت عملیات async و threading
</summary>
</member>
<member name="M:HesabixBox.AsyncHelper.RunInBackground(System.Action)">
<summary>
اجرای عملیات در background thread بدون مسدود کردن UI
</summary>
<param name="action">عملیاتی که باید اجرا شود</param>
</member>
<member name="M:HesabixBox.AsyncHelper.RunAsync(System.Func{System.Threading.Tasks.Task})">
<summary>
اجرای عملیات async در background thread
</summary>
<param name="asyncAction">عملیات async که باید اجرا شود</param>
</member>
<member name="M:HesabixBox.AsyncHelper.RunOnUIThread(System.Windows.Forms.Control,System.Action)">
<summary>
اجرای عملیات در UI thread از background thread
</summary>
<param name="control">کنترل UI</param>
<param name="action">عملیاتی که باید در UI thread اجرا شود</param>
</member>
<member name="M:HesabixBox.AsyncHelper.RunOnUIThreadAsync(System.Windows.Forms.Control,System.Func{System.Threading.Tasks.Task})">
<summary>
اجرای عملیات async در UI thread از background thread
</summary>
<param name="control">کنترل UI</param>
<param name="asyncAction">عملیات async که باید در UI thread اجرا شود</param>
</member>
<member name="M:HesabixBox.AsyncHelper.CreateTimeoutToken(System.Int32)">
<summary>
ایجاد CancellationTokenSource با timeout
</summary>
<param name="timeoutMs">مدت timeout به میلی‌ثانیه</param>
<returns>CancellationTokenSource</returns>
</member>
<member name="M:HesabixBox.AsyncHelper.RunWithTimeout(System.Func{System.Threading.Tasks.Task},System.Int32)">
<summary>
اجرای عملیات با timeout
</summary>
<param name="action">عملیاتی که باید اجرا شود</param>
<param name="timeoutMs">مدت timeout به میلی‌ثانیه</param>
<returns>True اگر عملیات موفق باشد، False اگر timeout شود</returns>
</member>
<member name="M:HesabixBox.AsyncHelper.RunWithRetry(System.Func{System.Threading.Tasks.Task},System.Int32,System.Int32)">
<summary>
اجرای عملیات با retry در صورت خطا
</summary>
<param name="action">عملیاتی که باید اجرا شود</param>
<param name="maxRetries">حداکثر تعداد تلاش</param>
<param name="delayMs">تاخیر بین تلاش‌ها به میلی‌ثانیه</param>
<returns>True اگر عملیات موفق باشد</returns>
</member>
</members>
</doc>

BIN
bin/Debug/PdfiumViewer.dll Normal file

Binary file not shown.

1275
bin/Debug/PdfiumViewer.xml Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

BIN
bin/Debug/pdfium.dll Normal file

Binary file not shown.

BIN
bin/Release.rar Normal file

Binary file not shown.

BIN
bin/Release/Box.vshost.exe Normal file

Binary file not shown.

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Box.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="HesabixBox.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<userSettings>
<HesabixBox.My.MySettings>
<setting name="activePrinter" serializeAs="String">
<value>0</value>
</setting>
<setting name="token" serializeAs="String">
<value>0</value>
</setting>
<setting name="printerToken" serializeAs="String">
<value>0</value>
</setting>
<setting name="persons" serializeAs="String">
<value/>
</setting>
<setting name="commodities" serializeAs="String">
<value/>
</setting>
<setting name="printerFastSellInvoice" serializeAs="String">
<value/>
</setting>
<setting name="printerFastSellCashdeskInvoice" serializeAs="String">
<value/>
</setting>
<setting name="printerSell" serializeAs="String">
<value/>
</setting>
<setting name="AcrobatPath" serializeAs="String">
<value/>
</setting>
</HesabixBox.My.MySettings>
</userSettings>
<applicationSettings>
<HesabixBox.My.MySettings>
<setting name="apiUrl" serializeAs="String">
<value>http://hesabix.ir</value>
</setting>
</HesabixBox.My.MySettings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
</configuration>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

BIN
bin/Release/HesabixBox.exe Normal file

Binary file not shown.

View file

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="HesabixBox.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="HesabixBox.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<userSettings>
<HesabixBox.My.MySettings>
<setting name="activePrinter" serializeAs="String">
<value>0</value>
</setting>
<setting name="token" serializeAs="String">
<value>0</value>
</setting>
<setting name="printerToken" serializeAs="String">
<value>0</value>
</setting>
<setting name="persons" serializeAs="String">
<value/>
</setting>
<setting name="commodities" serializeAs="String">
<value/>
</setting>
<setting name="printerFastSellInvoice" serializeAs="String">
<value/>
</setting>
<setting name="printerFastSellCashdeskInvoice" serializeAs="String">
<value/>
</setting>
<setting name="printerSell" serializeAs="String">
<value/>
</setting>
</HesabixBox.My.MySettings>
</userSettings>
<applicationSettings>
<HesabixBox.My.MySettings>
<setting name="apiUrl" serializeAs="String">
<value>http://hesabix.ir</value>
</setting>
</HesabixBox.My.MySettings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
</configuration>

BIN
bin/Release/HesabixBox.pdb Normal file

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="HesabixBox.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="HesabixBox.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<userSettings>
<HesabixBox.My.MySettings>
<setting name="activePrinter" serializeAs="String">
<value>0</value>
</setting>
<setting name="token" serializeAs="String">
<value>0</value>
</setting>
<setting name="printerToken" serializeAs="String">
<value>0</value>
</setting>
<setting name="persons" serializeAs="String">
<value/>
</setting>
<setting name="commodities" serializeAs="String">
<value/>
</setting>
<setting name="printerFastSellInvoice" serializeAs="String">
<value/>
</setting>
<setting name="printerFastSellCashdeskInvoice" serializeAs="String">
<value/>
</setting>
<setting name="printerSell" serializeAs="String">
<value/>
</setting>
</HesabixBox.My.MySettings>
</userSettings>
<applicationSettings>
<HesabixBox.My.MySettings>
<setting name="apiUrl" serializeAs="String">
<value>http://hesabix.ir</value>
</setting>
</HesabixBox.My.MySettings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
</configuration>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

View file

@ -0,0 +1,91 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>
HesabixBox
</name>
</assembly>
<members>
<member name="T:HesabixBox.My.Resources.Resources">
<summary>
A strongly-typed resource class, for looking up localized strings, etc.
</summary>
</member>
<member name="P:HesabixBox.My.Resources.Resources.ResourceManager">
<summary>
Returns the cached ResourceManager instance used by this class.
</summary>
</member>
<member name="P:HesabixBox.My.Resources.Resources.Culture">
<summary>
Overrides the current thread's CurrentUICulture property for all
resource lookups using this strongly typed resource class.
</summary>
</member>
<member name="P:HesabixBox.My.Resources.Resources.logo_blue">
<summary>
Looks up a localized resource of type System.Drawing.Bitmap.
</summary>
</member>
<member name="P:HesabixBox.My.Resources.Resources.logo_blue_1fB_icon">
<summary>
Looks up a localized resource of type System.Drawing.Bitmap.
</summary>
</member>
<member name="T:HesabixBox.AsyncHelper">
<summary>
کلاس کمکی برای مدیریت عملیات async و threading
</summary>
</member>
<member name="M:HesabixBox.AsyncHelper.RunInBackground(System.Action)">
<summary>
اجرای عملیات در background thread بدون مسدود کردن UI
</summary>
<param name="action">عملیاتی که باید اجرا شود</param>
</member>
<member name="M:HesabixBox.AsyncHelper.RunAsync(System.Func{System.Threading.Tasks.Task})">
<summary>
اجرای عملیات async در background thread
</summary>
<param name="asyncAction">عملیات async که باید اجرا شود</param>
</member>
<member name="M:HesabixBox.AsyncHelper.RunOnUIThread(System.Windows.Forms.Control,System.Action)">
<summary>
اجرای عملیات در UI thread از background thread
</summary>
<param name="control">کنترل UI</param>
<param name="action">عملیاتی که باید در UI thread اجرا شود</param>
</member>
<member name="M:HesabixBox.AsyncHelper.RunOnUIThreadAsync(System.Windows.Forms.Control,System.Func{System.Threading.Tasks.Task})">
<summary>
اجرای عملیات async در UI thread از background thread
</summary>
<param name="control">کنترل UI</param>
<param name="asyncAction">عملیات async که باید در UI thread اجرا شود</param>
</member>
<member name="M:HesabixBox.AsyncHelper.CreateTimeoutToken(System.Int32)">
<summary>
ایجاد CancellationTokenSource با timeout
</summary>
<param name="timeoutMs">مدت timeout به میلی‌ثانیه</param>
<returns>CancellationTokenSource</returns>
</member>
<member name="M:HesabixBox.AsyncHelper.RunWithTimeout(System.Func{System.Threading.Tasks.Task},System.Int32)">
<summary>
اجرای عملیات با timeout
</summary>
<param name="action">عملیاتی که باید اجرا شود</param>
<param name="timeoutMs">مدت timeout به میلی‌ثانیه</param>
<returns>True اگر عملیات موفق باشد، False اگر timeout شود</returns>
</member>
<member name="M:HesabixBox.AsyncHelper.RunWithRetry(System.Func{System.Threading.Tasks.Task},System.Int32,System.Int32)">
<summary>
اجرای عملیات با retry در صورت خطا
</summary>
<param name="action">عملیاتی که باید اجرا شود</param>
<param name="maxRetries">حداکثر تعداد تلاش</param>
<param name="delayMs">تاخیر بین تلاش‌ها به میلی‌ثانیه</param>
<returns>True اگر عملیات موفق باشد</returns>
</member>
</members>
</doc>

Binary file not shown.

1275
bin/Release/PdfiumViewer.xml Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bin/Release/pdfium.dll Normal file

Binary file not shown.

49
clsMsg.vb Normal file
View file

@ -0,0 +1,49 @@
Imports System.Text
Imports System.Runtime.InteropServices
Public Class clsMsg
Private Shared mLabels() As String '' Desired new labels
Private Shared mLabelIndex As Integer '' Next caption to update
Public Shared Sub PatchMsgBox(ByVal labels() As String)
''--- Updates message box buttons
mLabels = labels
Application.OpenForms(0).BeginInvoke(New FindWindowDelegate(AddressOf FindMsgBox), GetCurrentThreadId())
End Sub
Private Shared Sub FindMsgBox(ByVal tid As Integer)
''--- Enumerate the windows owned by the UI thread
EnumThreadWindows(tid, AddressOf EnumWindow, IntPtr.Zero)
End Sub
Private Shared Function EnumWindow(ByVal hWnd As IntPtr, ByVal lp As IntPtr) As Boolean
''--- Is this the message box?
Dim sb As New StringBuilder(256)
GetClassName(hWnd, sb, sb.Capacity)
If sb.ToString() <> "#32770" Then Return True
''--- Got it, now find the buttons
mLabelIndex = 0
EnumChildWindows(hWnd, AddressOf FindButtons, IntPtr.Zero)
Return False
End Function
Private Shared Function FindButtons(ByVal hWnd As IntPtr, ByVal lp As IntPtr) As Boolean
Dim sb As New StringBuilder(256)
GetClassName(hWnd, sb, sb.Capacity)
If sb.ToString() = "Button" And mLabelIndex <= UBound(mLabels) Then
''--- Got one, update text
SetWindowText(hWnd, mLabels(mLabelIndex))
mLabelIndex += 1
End If
Return True
End Function
''--- P/Invoke declarations
Private Delegate Sub FindWindowDelegate(ByVal tid As Integer)
Private Delegate Function EnumWindowDelegate(ByVal hWnd As IntPtr, ByVal lp As IntPtr) As Boolean
Private Declare Auto Function EnumThreadWindows Lib "user32.dll" (ByVal tid As Integer, ByVal callback As EnumWindowDelegate, ByVal lp As IntPtr) As Boolean
Private Declare Auto Function EnumChildWindows Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal callback As EnumWindowDelegate, ByVal lp As IntPtr) As Boolean
Private Declare Auto Function GetClassName Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal name As StringBuilder, ByVal maxlen As Integer) As Integer
Private Declare Auto Function GetCurrentThreadId Lib "kernel32.dll" () As Integer
Private Declare Auto Function SetWindowText Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal text As String) As Boolean
End Class

34
copy_pdfium_dll.ps1 Normal file
View file

@ -0,0 +1,34 @@
# اسکریپت کپی فایل pdfium.dll به مسیرهای خروجی
# این اسکریپت باید بعد از هر بار build اجرا شود
# حل کننده مشکلات DllNotFoundException و BadImageFormatException
$sourcePath = "bin\Release\packages\PdfiumViewer.Native.x86_64.no_v8-no_xfa.2018.4.8.256\content\x64\pdfium.dll"
$releaseTarget = "bin\Release\pdfium.dll"
$debugTarget = "bin\Debug\pdfium.dll"
Write-Host "شروع کپی فایل pdfium.dll..."
if (Test-Path $sourcePath) {
# کپی به Release
if (Test-Path "bin\Release") {
Copy-Item $sourcePath $releaseTarget -Force
Write-Host "✓ فایل pdfium.dll به bin\Release کپی شد"
} else {
Write-Host "⚠ پوشه bin\Release یافت نشد"
}
# کپی به Debug
if (Test-Path "bin\Debug") {
Copy-Item $sourcePath $debugTarget -Force
Write-Host "✓ فایل pdfium.dll به bin\Debug کپی شد"
} else {
Write-Host "⚠ پوشه bin\Debug یافت نشد"
}
Write-Host "✅ عملیات کپی با موفقیت انجام شد"
Write-Host ""
Write-Host "نکته: اطمینان حاصل کنید که پروژه با PlatformTarget=x64 کامپایل شده است"
} else {
Write-Host "❌ خطا: فایل منبع یافت نشد: $sourcePath"
Write-Host "لطفاً ابتدا پروژه را build کنید"
}

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

4
mdlPerson.vb Normal file
View file

@ -0,0 +1,4 @@
Public Class mdlPerson
Public Property id As String
Public Property nikename As String
End Class

View file

@ -0,0 +1 @@
C:\Users\babak\Desktop\hesabixBox-master\bin\Debug\Box.exe.config

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more