You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
8.3 KiB
189 lines
8.3 KiB
using BiskLog_Point_Of_Sale.Classes;
|
|
using BiskLog_Point_Of_Sale.Multiple_Login;
|
|
using BiskLog_Point_Of_Sale.OPS_Report.Employee.Classes;
|
|
using BiskLog_Point_Of_Sale.OPS_Report.Products.Classes;
|
|
using BiskLog_Point_Of_Sale.Properties;
|
|
using LiveCharts;
|
|
using LiveCharts.Wpf;
|
|
using Microsoft.Reporting.WinForms;
|
|
using Point_Of_Sale_Managment;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace BiskLog_Point_Of_Sale.OPS_Report.Sales
|
|
{
|
|
public partial class EmployeeSalesChart : Form
|
|
{
|
|
SqlConnection cn;
|
|
SqlCommand cm;
|
|
SqlDataReader dr;
|
|
DatabaseConn conn = new DatabaseConn();
|
|
List<EmployeeSalesClass> employeeSales = new List<EmployeeSalesClass>();
|
|
public EmployeeSalesChart()
|
|
{
|
|
InitializeComponent();
|
|
cn = new SqlConnection(conn.MyConnection());
|
|
headingPanel.Left = (ClientSize.Width - headingPanel.Width) / 2;
|
|
rangePanel.Left = (ClientSize.Width - rangePanel.Width) / 2;
|
|
buttons.Left = (ClientSize.Width - buttons.Width) / 2;
|
|
}
|
|
public void setChart()
|
|
{
|
|
try
|
|
{
|
|
Func<ChartPoint, string> labelPoint = chartPoint => string.Format("{0} ({1:P})", chartPoint.Y, chartPoint.Participation);
|
|
SeriesCollection pieChart = new SeriesCollection();
|
|
foreach (EmployeeSalesClass chart in employeeSales)
|
|
{
|
|
pieChart.Add(
|
|
new PieSeries
|
|
{
|
|
Title = chart.employeename,
|
|
Values = new ChartValues<int> { chart.sold },
|
|
DataLabels = true,
|
|
LabelPoint = labelPoint
|
|
|
|
});
|
|
//chart2.InnerRadius = 25;
|
|
}
|
|
Saleschart.Series = pieChart;
|
|
Saleschart.LegendLocation = LegendLocation.Right;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ErrorLogging.WriteToFile(ex.ToString());
|
|
}
|
|
}
|
|
public int getSales()
|
|
{
|
|
try
|
|
{
|
|
employeeSales.Clear();
|
|
Saleschart.Invoke(new Action(() =>
|
|
{
|
|
int filter = 5;
|
|
if (!String.IsNullOrEmpty(this.filter.Text))
|
|
{
|
|
filter = int.Parse(this.filter.Text);
|
|
}
|
|
title.Text = "Top " + filter.ToString() + " Employee Sales Chart";
|
|
head.Text = "Date : " + dateLower.Value.ToLongDateString() + " to " + dateHigher.Value.ToLongDateString();
|
|
cn.Open();
|
|
cm = new SqlCommand("Select top (@filter) u.firstname,u.surname,Sum(tc.quantity) as number,Sum(tc.price) from tblUsers u Inner Join tblCart tc On tc.cashier = u.username " +
|
|
"where u.branchID = @branchID and(tc.date between @lower and @higher) group by u.firstname, u.surname order by number desc", cn);
|
|
cm.Parameters.AddWithValue("@branchID", Settings.Default.BranchID);
|
|
cm.Parameters.AddWithValue("@lower", dateLower.Value.ToString("yyyy-MM-dd"));
|
|
cm.Parameters.AddWithValue("@higher", dateHigher.Value.ToString("yyyy-MM-dd"));
|
|
cm.Parameters.AddWithValue("@filter", filter);
|
|
cm.ExecuteNonQuery();
|
|
dr = cm.ExecuteReader();
|
|
while (dr.Read())
|
|
{
|
|
EmployeeSalesClass salesClass = new EmployeeSalesClass();
|
|
salesClass.employeename = dr[0].ToString().ToUpper() + " " + dr[1].ToString().ToUpper();
|
|
salesClass.sold = int.Parse(dr[2].ToString());
|
|
salesClass.sales = Settings.Default.currrencyCode + " " + dr[3].ToString();
|
|
salesClass.total = decimal.Parse(dr[3].ToString());
|
|
employeeSales.Add(salesClass);
|
|
}
|
|
dr.Close();
|
|
cn.Close();
|
|
}));
|
|
return 1;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
cn.Close();
|
|
ErrorLogging.WriteToFile(ex.ToString());
|
|
return 0;
|
|
}
|
|
}
|
|
private async void EmployeeSalesChart_Load(object sender, EventArgs e)
|
|
{
|
|
Task<int> task = new Task<int>(getSales);
|
|
EpE.Visible = true;
|
|
holding.Value = 0;
|
|
task.Start();
|
|
var progress = new Progress<int>(percent =>
|
|
{
|
|
holding.Value = percent;
|
|
|
|
});
|
|
await Task.Run(() => Progression.DoSomething(progress));
|
|
int result = await task;
|
|
if (result == 1)
|
|
{
|
|
setChart();
|
|
}
|
|
else
|
|
{
|
|
string title = "Error Occurred";
|
|
string message = "An error occurred while trying to generate report, please try again later";
|
|
NoAction noAction = new NoAction(title, message);
|
|
noAction.BringToFront();
|
|
noAction.ShowDialog();
|
|
}
|
|
EpE.Visible = false;
|
|
}
|
|
|
|
private void Button1_Click(object sender, EventArgs e)
|
|
{
|
|
if (employeeSales.Count > 0)
|
|
{
|
|
string printerReportDefault = Settings.Default.ReportPrinter;
|
|
string printLocation;
|
|
ProductHeaders headers = new ProductHeaders();
|
|
headers.header1 = title.Text;
|
|
headers.header2 = head.Text;
|
|
List<ProductHeaders> reportHeaders = new List<ProductHeaders>();
|
|
reportHeaders.Add(headers);
|
|
if (printerReportDefault == "Microsoft XPS Document Writer" || printerReportDefault == "Microsoft Print to PDF")
|
|
{
|
|
FolderBrowserDialog folder = new FolderBrowserDialog();
|
|
DialogResult result = folder.ShowDialog();
|
|
if (result == DialogResult.OK && !String.IsNullOrEmpty(folder.SelectedPath))
|
|
{
|
|
printLocation = folder.SelectedPath + @"\" + title.Text + @"report" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".pdf";
|
|
LocalReport report = new LocalReport();
|
|
string path = Path.GetDirectoryName(Application.ExecutablePath);
|
|
string fullpath = Path.GetDirectoryName(Application.ExecutablePath).Remove(path.Length - 10) +
|
|
@"\OPS Report\Employee\Reports\EmployeeSalesChart.rdlc";
|
|
report.ReportPath = fullpath;
|
|
report.DataSources.Add(new ReportDataSource("Sales", employeeSales));
|
|
report.DataSources.Add(new ReportDataSource("Header", reportHeaders));
|
|
ReportConfig.PrintToPrinter(report, printLocation, printerReportDefault);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printLocation = "";
|
|
LocalReport report = new LocalReport();
|
|
string path = Path.GetDirectoryName(Application.ExecutablePath);
|
|
string fullpath = Path.GetDirectoryName(Application.ExecutablePath).Remove(path.Length - 10) +
|
|
@"\OPS Report\Employee\Reports\EmployeeSalesChart.rdlc";
|
|
report.ReportPath = fullpath;
|
|
report.DataSources.Add(new ReportDataSource("Sales", employeeSales));
|
|
report.DataSources.Add(new ReportDataSource("Header", reportHeaders));
|
|
ReportConfig.PrintToPrinter(report, printLocation, printerReportDefault);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
string title = "Report Not available";
|
|
string message = "Sorry there was no report generated to complete this action, please try again later.";
|
|
NoAction noAction = new NoAction(title, message);
|
|
noAction.BringToFront();
|
|
noAction.ShowDialog();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|