Browse Source

Отметка посещения пользователя

Вячеслав Терешенко 2 years ago
parent
commit
2b2330a068

+ 112 - 35
ImpulseVision/FormGuard.Designer.cs

@@ -51,12 +51,14 @@
             this.BtnReject = new System.Windows.Forms.Button();
             this.PbxSourceImage = new System.Windows.Forms.PictureBox();
             this.DgbInput = new System.Windows.Forms.DataGridView();
-            this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
             this.RPanelForButton = new ImpulseVision.RPanel();
             this.DgbOutput = new System.Windows.Forms.DataGridView();
-            this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
             this.SplitContainer = new System.Windows.Forms.SplitContainer();
             this.SplitContainerForPbxEtherAndDgb = new System.Windows.Forms.SplitContainer();
+            this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.rPanel1 = new ImpulseVision.RPanel();
+            this.rPanel2 = new ImpulseVision.RPanel();
             ((System.ComponentModel.ISupportInitialize)(this.PbxEther)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.BsStaffs)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.impulseVisionAppDataSet1)).BeginInit();
@@ -73,13 +75,16 @@
             this.SplitContainerForPbxEtherAndDgb.Panel1.SuspendLayout();
             this.SplitContainerForPbxEtherAndDgb.Panel2.SuspendLayout();
             this.SplitContainerForPbxEtherAndDgb.SuspendLayout();
+            this.rPanel1.SuspendLayout();
+            this.rPanel2.SuspendLayout();
             this.SuspendLayout();
             // 
             // RbtIn
             // 
             this.RbtIn.AutoSize = true;
             this.RbtIn.Checked = true;
-            this.RbtIn.Location = new System.Drawing.Point(12, 26);
+            this.RbtIn.ForeColor = System.Drawing.Color.Black;
+            this.RbtIn.Location = new System.Drawing.Point(18, 0);
             this.RbtIn.Name = "RbtIn";
             this.RbtIn.Size = new System.Drawing.Size(66, 25);
             this.RbtIn.TabIndex = 6;
@@ -90,7 +95,8 @@
             // RbtOut
             // 
             this.RbtOut.AutoSize = true;
-            this.RbtOut.Location = new System.Drawing.Point(84, 26);
+            this.RbtOut.ForeColor = System.Drawing.Color.Black;
+            this.RbtOut.Location = new System.Drawing.Point(86, 0);
             this.RbtOut.Name = "RbtOut";
             this.RbtOut.Size = new System.Drawing.Size(78, 25);
             this.RbtOut.TabIndex = 7;
@@ -111,7 +117,8 @@
             // Lblus
             // 
             this.Lblus.AutoSize = true;
-            this.Lblus.Location = new System.Drawing.Point(376, 30);
+            this.Lblus.ForeColor = System.Drawing.Color.Black;
+            this.Lblus.Location = new System.Drawing.Point(14, 2);
             this.Lblus.Name = "Lblus";
             this.Lblus.Size = new System.Drawing.Size(124, 21);
             this.Lblus.TabIndex = 11;
@@ -121,7 +128,8 @@
             // 
             this.LblRecognizeUser.AutoSize = true;
             this.LblRecognizeUser.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.BsStaffs, "FIO", true));
-            this.LblRecognizeUser.Location = new System.Drawing.Point(506, 30);
+            this.LblRecognizeUser.ForeColor = System.Drawing.Color.Black;
+            this.LblRecognizeUser.Location = new System.Drawing.Point(144, 2);
             this.LblRecognizeUser.Name = "LblRecognizeUser";
             this.LblRecognizeUser.Size = new System.Drawing.Size(103, 21);
             this.LblRecognizeUser.TabIndex = 13;
@@ -198,9 +206,9 @@
             this.LblID.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
             this.LblID.AutoSize = true;
             this.LblID.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.BsStaffs, "ID", true));
-            this.LblID.Location = new System.Drawing.Point(229, 33);
+            this.LblID.Location = new System.Drawing.Point(379, 9);
             this.LblID.Name = "LblID";
-            this.LblID.Size = new System.Drawing.Size(66, 21);
+            this.LblID.Size = new System.Drawing.Size(50, 13);
             this.LblID.TabIndex = 20;
             this.LblID.Text = "idStaffs";
             // 
@@ -247,24 +255,18 @@
             this.DgbInput.Dock = System.Windows.Forms.DockStyle.Fill;
             this.DgbInput.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(235)))), ((int)(((byte)(235)))));
             this.DgbInput.Location = new System.Drawing.Point(0, 0);
+            this.DgbInput.MultiSelect = false;
             this.DgbInput.Name = "DgbInput";
             this.DgbInput.ReadOnly = true;
             this.DgbInput.RowHeadersVisible = false;
+            this.DgbInput.RowTemplate.DefaultCellStyle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(73)))), ((int)(((byte)(104)))), ((int)(((byte)(112)))));
+            this.DgbInput.RowTemplate.DefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(229)))), ((int)(((byte)(233)))));
+            this.DgbInput.RowTemplate.DefaultCellStyle.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(43)))));
             this.DgbInput.RowTemplate.Height = 25;
             this.DgbInput.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
             this.DgbInput.Size = new System.Drawing.Size(201, 155);
             this.DgbInput.TabIndex = 15;
             // 
-            // Column1
-            // 
-            this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
-            dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.TopCenter;
-            dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
-            this.Column1.DefaultCellStyle = dataGridViewCellStyle1;
-            this.Column1.HeaderText = "Вход";
-            this.Column1.Name = "Column1";
-            this.Column1.ReadOnly = true;
-            // 
             // RPanelForButton
             // 
             this.RPanelForButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
@@ -279,6 +281,7 @@
             this.RPanelForButton.BorderColorOnHoverEnabled = true;
             this.RPanelForButton.Controls.Add(this.BtnReject);
             this.RPanelForButton.Controls.Add(this.BtnSkip);
+            this.RPanelForButton.Controls.Add(this.LblID);
             this.RPanelForButton.Cursor = System.Windows.Forms.Cursors.Default;
             this.RPanelForButton.Font = new System.Drawing.Font("Verdana", 8.25F);
             this.RPanelForButton.ForeColor = System.Drawing.Color.White;
@@ -306,25 +309,19 @@
             this.DgbOutput.Dock = System.Windows.Forms.DockStyle.Fill;
             this.DgbOutput.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(235)))), ((int)(((byte)(235)))));
             this.DgbOutput.Location = new System.Drawing.Point(0, 0);
+            this.DgbOutput.MultiSelect = false;
             this.DgbOutput.Name = "DgbOutput";
             this.DgbOutput.ReadOnly = true;
             this.DgbOutput.RowHeadersVisible = false;
+            this.DgbOutput.RowTemplate.DefaultCellStyle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(229)))), ((int)(((byte)(233)))));
+            this.DgbOutput.RowTemplate.DefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(229)))), ((int)(((byte)(233)))));
+            this.DgbOutput.RowTemplate.DefaultCellStyle.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(43)))));
             this.DgbOutput.RowTemplate.Height = 25;
             this.DgbOutput.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
             this.DgbOutput.Size = new System.Drawing.Size(201, 152);
             this.DgbOutput.TabIndex = 15;
             this.DgbOutput.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.DgbOutput_CellContentClick);
             // 
-            // dataGridViewTextBoxColumn1
-            // 
-            this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
-            dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.TopCenter;
-            dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
-            this.dataGridViewTextBoxColumn1.DefaultCellStyle = dataGridViewCellStyle2;
-            this.dataGridViewTextBoxColumn1.HeaderText = "Выход";
-            this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1";
-            this.dataGridViewTextBoxColumn1.ReadOnly = true;
-            // 
             // SplitContainer
             // 
             this.SplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
@@ -363,20 +360,93 @@
             this.SplitContainerForPbxEtherAndDgb.SplitterDistance = 530;
             this.SplitContainerForPbxEtherAndDgb.TabIndex = 25;
             // 
+            // Column1
+            // 
+            this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
+            dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.TopCenter;
+            dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+            this.Column1.DefaultCellStyle = dataGridViewCellStyle1;
+            this.Column1.HeaderText = "Вход";
+            this.Column1.Name = "Column1";
+            this.Column1.ReadOnly = true;
+            this.Column1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
+            // 
+            // dataGridViewTextBoxColumn1
+            // 
+            this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
+            dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.TopCenter;
+            dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+            this.dataGridViewTextBoxColumn1.DefaultCellStyle = dataGridViewCellStyle2;
+            this.dataGridViewTextBoxColumn1.HeaderText = "Выход";
+            this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1";
+            this.dataGridViewTextBoxColumn1.ReadOnly = true;
+            this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
+            // 
+            // rPanel1
+            // 
+            this.rPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(187)))), ((int)(((byte)(210)))));
+            this.rPanel1.BackColorAdditional = System.Drawing.Color.Gray;
+            this.rPanel1.BackColorGradientEnabled = false;
+            this.rPanel1.BackColorGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Horizontal;
+            this.rPanel1.BorderColor = System.Drawing.Color.Tomato;
+            this.rPanel1.BorderColorEnabled = false;
+            this.rPanel1.BorderColorOnHover = System.Drawing.Color.Tomato;
+            this.rPanel1.BorderColorOnHoverEnabled = false;
+            this.rPanel1.Controls.Add(this.RbtIn);
+            this.rPanel1.Controls.Add(this.RbtOut);
+            this.rPanel1.Cursor = System.Windows.Forms.Cursors.Default;
+            this.rPanel1.Font = new System.Drawing.Font("Segoe UI Variable Small Semibol", 12F, System.Drawing.FontStyle.Bold);
+            this.rPanel1.ForeColor = System.Drawing.Color.White;
+            this.rPanel1.Location = new System.Drawing.Point(3, 28);
+            this.rPanel1.Name = "rPanel1";
+            this.rPanel1.RippleColor = System.Drawing.Color.Black;
+            this.rPanel1.RoundingEnable = true;
+            this.rPanel1.Size = new System.Drawing.Size(187, 25);
+            this.rPanel1.TabIndex = 26;
+            this.rPanel1.TextHover = null;
+            this.rPanel1.UseDownPressEffectOnClick = false;
+            this.rPanel1.UseRippleEffect = true;
+            this.rPanel1.UseZoomEffectOnHover = false;
+            // 
+            // rPanel2
+            // 
+            this.rPanel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.rPanel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(187)))), ((int)(((byte)(210)))));
+            this.rPanel2.BackColorAdditional = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(187)))), ((int)(((byte)(210)))));
+            this.rPanel2.BackColorGradientEnabled = false;
+            this.rPanel2.BackColorGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Horizontal;
+            this.rPanel2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(187)))), ((int)(((byte)(210)))));
+            this.rPanel2.BorderColorEnabled = false;
+            this.rPanel2.BorderColorOnHover = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(187)))), ((int)(((byte)(210)))));
+            this.rPanel2.BorderColorOnHoverEnabled = false;
+            this.rPanel2.Controls.Add(this.Lblus);
+            this.rPanel2.Controls.Add(this.LblRecognizeUser);
+            this.rPanel2.Cursor = System.Windows.Forms.Cursors.Default;
+            this.rPanel2.Font = new System.Drawing.Font("Segoe UI Variable Small Semibol", 12F, System.Drawing.FontStyle.Bold);
+            this.rPanel2.ForeColor = System.Drawing.Color.White;
+            this.rPanel2.Location = new System.Drawing.Point(196, 28);
+            this.rPanel2.Name = "rPanel2";
+            this.rPanel2.RippleColor = System.Drawing.Color.White;
+            this.rPanel2.RoundingEnable = true;
+            this.rPanel2.Size = new System.Drawing.Size(527, 25);
+            this.rPanel2.TabIndex = 27;
+            this.rPanel2.TextHover = null;
+            this.rPanel2.UseDownPressEffectOnClick = false;
+            this.rPanel2.UseRippleEffect = true;
+            this.rPanel2.UseZoomEffectOnHover = false;
+            // 
             // FormGuard
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 21F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(253)))), ((int)(((byte)(255)))), ((int)(((byte)(252)))));
             this.ClientSize = new System.Drawing.Size(735, 414);
+            this.Controls.Add(this.rPanel2);
+            this.Controls.Add(this.rPanel1);
             this.Controls.Add(this.SplitContainerForPbxEtherAndDgb);
             this.Controls.Add(this.RPanelForButton);
-            this.Controls.Add(this.LblID);
             this.Controls.Add(this.toolStrip1);
-            this.Controls.Add(this.LblRecognizeUser);
-            this.Controls.Add(this.Lblus);
-            this.Controls.Add(this.RbtOut);
-            this.Controls.Add(this.RbtIn);
             this.DoubleBuffered = true;
             this.Font = new System.Drawing.Font("Segoe UI Variable Small Semibol", 12F, System.Drawing.FontStyle.Bold);
             this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
@@ -395,6 +465,7 @@
             ((System.ComponentModel.ISupportInitialize)(this.PbxSourceImage)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.DgbInput)).EndInit();
             this.RPanelForButton.ResumeLayout(false);
+            this.RPanelForButton.PerformLayout();
             ((System.ComponentModel.ISupportInitialize)(this.DgbOutput)).EndInit();
             this.SplitContainer.Panel1.ResumeLayout(false);
             this.SplitContainer.Panel2.ResumeLayout(false);
@@ -404,6 +475,10 @@
             this.SplitContainerForPbxEtherAndDgb.Panel2.ResumeLayout(false);
             ((System.ComponentModel.ISupportInitialize)(this.SplitContainerForPbxEtherAndDgb)).EndInit();
             this.SplitContainerForPbxEtherAndDgb.ResumeLayout(false);
+            this.rPanel1.ResumeLayout(false);
+            this.rPanel1.PerformLayout();
+            this.rPanel2.ResumeLayout(false);
+            this.rPanel2.PerformLayout();
             this.ResumeLayout(false);
             this.PerformLayout();
 
@@ -426,14 +501,16 @@
         private System.Windows.Forms.Label LblID;
         private System.Windows.Forms.Timer TimerCam;
         private System.Windows.Forms.Button BtnReject;
-        private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
         private System.Windows.Forms.PictureBox PbxSourceImage;
         private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
         private System.Windows.Forms.ToolStripLabel TslDate;
         private RPanel RPanelForButton;
         private System.Windows.Forms.DataGridView DgbOutput;
-        private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1;
         private System.Windows.Forms.SplitContainer SplitContainer;
         private System.Windows.Forms.SplitContainer SplitContainerForPbxEtherAndDgb;
+        private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
+        private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1;
+        private RPanel rPanel1;
+        private RPanel rPanel2;
     }
 }

+ 49 - 11
ImpulseVision/FormGuard.cs

@@ -65,7 +65,7 @@ namespace ImpulseVision
 
         public struct VisitInput
         {
-            public string FIO, TimeEntrance;
+            public string FIO, TimeEntrance, TimeExit;
         }
         List<VisitInput> LstVisitInput = new List<VisitInput>();
 
@@ -569,7 +569,8 @@ namespace ImpulseVision
             this.staffsTableAdapter.Fill(this.impulseVisionAppDataSet1.Staffs);
             GetCams();
 
-            Task.Factory.StartNew(() => { PbxEther.Image = Properties.Resources.loading_7;
+            Task.Factory.StartNew(() => { 
+                PbxEther.Image = Properties.Resources.loading_7;
                 PbxSourceImage.Image = Properties.Resources.loading_7;
             });
             //if (VideoCapture != null)
@@ -594,7 +595,7 @@ namespace ImpulseVision
             Capture.SetCaptureProperty(CapProp.FrameWidth, 370);
             CaptureTimer.Start();
 
-            GetVisitsIn();
+            GetVisits();
         }
 
 
@@ -699,30 +700,56 @@ namespace ImpulseVision
         /// <param name="e"></param>
         private void BtnSkip_Click(object sender, EventArgs e)
         {
+            if (!IsRecognized)
+            {
+                MessageBox.Show("Убедитесь, что лицо находится в кадре и обведено красным прямоугольником!", "Ошибка распознавания!");
+                return;
+            }
+
             if (RbtIn.Checked)
             {
-                if (!IsRecognized)
-                {
-                    MessageBox.Show("Убедитесь, что лицо находится в кадре и обведено красным прямоугольником!", "Ошибка распознавания!");
-                    return;
-                }
                 SCon.Open();
                 string QueryAddVisit = $@"set dateformat dmy insert into UserTraffic (UserID,TimeEntrance,Identification,[Date])
 values ('{CurrentUserID}','{DateTime.Now.ToString("HH:mm:ss")}','1','{DateTime.Now.ToString("dd.MM.yyyy")}')";
                 SqlCommand Cmd = new SqlCommand(QueryAddVisit, SCon);
                 Cmd.ExecuteNonQuery();
                 SCon.Close();
+            }
+            else
+            {
+                SCon.Open();
+                string QueryCheckRecord = $@"set dateformat dmy
+select *
+from UserTraffic
+where UserID = '{CurrentUserID}' and [Date] = cast(GETDATE() as date) and TimeExit is null
+";
+                SqlCommand CmdCheck = new SqlCommand(QueryCheckRecord, SCon);
+                SqlDataReader Res = CmdCheck.ExecuteReader();
+                if(!Res.HasRows)
+                {
+                    MessageBox.Show("Нельзя отметить выход пользователя, если он ещё не входил!", "ImpulseVision", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
+                    SCon.Close();
+                    return;
+                }
+                SCon.Close();
 
-                GetVisitsIn();
+                SCon.Open();
+                string QueryTimeExit = $@"update UserTraffic
+set TimeExit = '{DateTime.Now.ToString("HH:mm:ss")}'
+where UserID = '{CurrentUserID}' and [Date] = cast(GETDATE() as date)";
+                SqlCommand Cmd = new SqlCommand(QueryTimeExit, SCon);
+                Cmd.ExecuteNonQuery();
+                SCon.Close();
             }
+            GetVisits();
         }
         /// <summary>
         /// получение списка посещений за текущую дату
         /// </summary>
-        private void GetVisitsIn()
+        private void GetVisits()
         {
             SCon.Open();
-            string QueryGetVisits = $@"select Users.Lastname+' '+Users.Firstname + ' ' + Users.Patronymic as FIO, TimeEntrance
+            string QueryGetVisits = $@"select Users.Lastname+' '+Users.Firstname + ' ' + Users.Patronymic as FIO, TimeEntrance,TimeExit
 from UserTraffic ut join Users on ut.UserID = Users.ID
 where ut.[Date] = cast(GETDATE() as date)";
 
@@ -736,6 +763,7 @@ where ut.[Date] = cast(GETDATE() as date)";
                     VisitInput visit = new VisitInput();
                     visit.FIO = Res["FIO"].ToString();
                     visit.TimeEntrance = Res["TimeEntrance"].ToString();
+                    visit.TimeExit = Res["TimeExit"].ToString();
                     LstVisitInput.Add(visit);
                 }
             }
@@ -746,6 +774,16 @@ where ut.[Date] = cast(GETDATE() as date)";
             {
                 DgbInput.Rows.Add(item.FIO + $"  {item.TimeEntrance}");
             }
+            DgbOutput.Rows.Clear();
+            string STime = string.Empty;
+            foreach (VisitInput item in LstVisitInput)
+            {
+                STime = item.TimeExit;
+                if (STime != string.Empty)
+                {
+                    DgbOutput.Rows.Add(item.FIO + $"  {STime}");
+                }
+            }
         }
     }
 }

BIN
ImpulseVision/bin/Debug/ImpulseVision.exe