using BiskLog_Point_Of_Sale.Classes; using BiskLog_Point_Of_Sale.Multiple_Login; using BiskLog_Point_Of_Sale.OPS_Report.Products.Classes; using BiskLog_Point_Of_Sale.Properties; using ClosedXML.Excel; 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.Drawing.Imaging; 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 PriceAdjustment : Form { SqlConnection cn; SqlCommand cm; SqlDataReader dr; DatabaseConn conn = new DatabaseConn(); List prices = new List(); public PriceAdjustment() { InitializeComponent(); cn = new SqlConnection(conn.MyConnection()); headingPanel.Left = (ClientSize.Width - headingPanel.Width) / 2; rangePanel.Left = (ClientSize.Width - rangePanel.Width) / 2; groupBox1.Left = (ClientSize.Width - groupBox1.Width) / 2; EpE.Left = (ClientSize.Width - EpE.Width) / 2; EpE.Top = (ClientSize.Height - EpE.Height) / 2; } public int getPrices() { try { sellers.Invoke(new Action(() => { int filter = 100; if (!String.IsNullOrEmpty(textBox1.Text)) { filter = int.Parse(textBox1.Text); } prices.Clear(); sellers.Rows.Clear(); head.Text = "Date : " + dateLower.Value.ToLongDateString() + " to " + dateHigher.Value.ToLongDateString(); cn.Open(); cm = new SqlCommand("Select top(@filter) pc.change_date,p.product_name,pc.previous_price,pc.current_price,(pc.current_price - pc.previous_price) " + "from tblPriceChanges pc Inner Join tblProduct p On p.pcode = pc.pcode where pc.branchID = @branchID and (pc.change_date between " + "(@lower) and(@higher))", cn); cm.Parameters.AddWithValue("@branchID", Settings.Default.BranchID); cm.Parameters.AddWithValue("@lower", dateLower.Value); cm.Parameters.AddWithValue("@higher", dateHigher.Value); cm.Parameters.AddWithValue("@filter", filter); cm.ExecuteNonQuery(); dr = cm.ExecuteReader(); while (dr.Read()) { PriceAdjustments adjustments = new PriceAdjustments(); adjustments.changeDate = Convert.ToDateTime(dr[0].ToString()).ToLongDateString(); adjustments.productName = dr[1].ToString(); adjustments.initialPrice = Settings.Default.currrencyCode + " " + dr[2].ToString(); adjustments.newPrice = Settings.Default.currrencyCode + " " + dr[3].ToString(); adjustments.difference = decimal.Parse(dr[4].ToString()); if (adjustments.difference > 0) { string path = Path.GetDirectoryName(Application.ExecutablePath); string fullpath = Path.GetDirectoryName(Application.ExecutablePath) + @"\Resources\arrow-133-16.png"; Image image; image = Image.FromFile(fullpath); MemoryStream ms = new MemoryStream(); image.Save(ms, ImageFormat.Png); byte[] imageBytes = ms.ToArray(); adjustments.image = Convert.ToBase64String(imageBytes); } else if (adjustments.difference < 0) { string path = Path.GetDirectoryName(Application.ExecutablePath); string fullpath = Path.GetDirectoryName(Application.ExecutablePath) + @"\Resources\arrow-195-16-2.png"; Image image; image = Image.FromFile(fullpath); MemoryStream ms = new MemoryStream(); image.Save(ms, ImageFormat.Png); byte[] imageBytes = ms.ToArray(); adjustments.image = Convert.ToBase64String(imageBytes); } else { string path = Path.GetDirectoryName(Application.ExecutablePath); string fullpath = Path.GetDirectoryName(Application.ExecutablePath) + @"\Resources\minus-2-16.png"; Image image; image = Image.FromFile(fullpath); MemoryStream ms = new MemoryStream(); image.Save(ms, ImageFormat.Png); byte[] imageBytes = ms.ToArray(); adjustments.image = Convert.ToBase64String(imageBytes); } prices.Add(adjustments); } dr.Close(); cn.Close(); })); return 1; } catch (Exception ex) { cn.Close(); ErrorLogging.WriteToFile(ex.ToString()); return 0; } } private async void PriceAdjustment_Load(object sender, EventArgs e) { Task task = new Task(getPrices); EpE.Visible = true; holding.Value = 0; task.Start(); var progress = new Progress(percent => { holding.Value = percent; }); await Task.Run(() => Progression.DoSomething(progress)); int result = await task; if (result == 1) { foreach (PriceAdjustments varseller in prices) { if (varseller.difference > 0) { sellers.Rows.Add(varseller.changeDate, varseller.productName, varseller.initialPrice, varseller.newPrice, Settings.Default.currrencyCode + " " + varseller.difference, Properties.Resources.incrementArrow); } else if (varseller.difference < 0) { sellers.Rows.Add(varseller.changeDate, varseller.productName, varseller.initialPrice, varseller.newPrice, Settings.Default.currrencyCode + " " + varseller.difference, Properties.Resources.decrementArrow); } else { sellers.Rows.Add(varseller.changeDate, varseller.productName, varseller.initialPrice, varseller.newPrice, Settings.Default.currrencyCode + " " + varseller.difference, Properties.Resources.stableArrow); } } } 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 (prices.Count > 0) { string printerReportDefault = Settings.Default.ReportPrinter; string printLocation; ProductHeaders headers = new ProductHeaders(); headers.header1 = title.Text; headers.header2 = head.Text; List reportHeaders = new List(); 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\Products\Reports\PriceReport.rdlc"; report.ReportPath = fullpath; report.EnableExternalImages = true; report.DataSources.Add(new ReportDataSource("Prices", prices)); 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\Products\Reports\PriceReport.rdlc"; report.ReportPath = fullpath; report.EnableExternalImages = true; report.DataSources.Add(new ReportDataSource("Prices", prices)); 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(); } } private int GenerateExcel(List publish, string filepath) { try { var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add(title.Text); int i = 4; worksheet.Cell("A1").Value = title.Text; worksheet.Cell("A3").Value = "DATE"; worksheet.Cell("B3").Value = "PRODUCT NAME"; worksheet.Cell("C3").Value = "PREVIOUS PRICE"; worksheet.Cell("D3").Value = "NEW PRICE"; worksheet.Cell("E3").Value = "DIFFERENCE"; worksheet.Range("A1:E1").Row(1).Merge(); worksheet.Range("A2:E2").Row(1).Merge(); worksheet.Range("A1:E1").Style.Fill.BackgroundColor = XLColor.FromArgb(10, 10, 56); worksheet.Range("A2:E2").Style.Fill.BackgroundColor = XLColor.FromArgb(10, 10, 56); worksheet.Range("A3:E3").Style.Fill.BackgroundColor = XLColor.FromArgb(10, 10, 56); worksheet.Range("A1:E1").Style.Font.FontColor = XLColor.White; worksheet.Range("A2:E2").Style.Font.FontColor = XLColor.White; worksheet.Range("A3:E3").Style.Font.FontColor = XLColor.White; foreach (PriceAdjustments row in publish) { worksheet.Cell("A" + i).Style.Border.SetLeftBorder(XLBorderStyleValues.Thick); worksheet.Cell("E" + i).Style.Border.SetRightBorder(XLBorderStyleValues.Thick); worksheet.Cell("A" + i).Value = row.changeDate; worksheet.Cell("B" + i).Value = row.productName; worksheet.Cell("C" + i).Value = row.initialPrice; worksheet.Cell("D" + i).Value = row.newPrice; worksheet.Cell("E" + i).Value = row.difference; worksheet.Cell("A" + i).Style.Border.SetBottomBorder(XLBorderStyleValues.Thin); worksheet.Cell("B" + i).Style.Border.SetOutsideBorder(XLBorderStyleValues.Thin); worksheet.Cell("C" + i).Style.Border.SetOutsideBorder(XLBorderStyleValues.Thin); worksheet.Cell("D" + i).Style.Border.SetOutsideBorder(XLBorderStyleValues.Thin); worksheet.Cell("E" + i).Style.Border.SetOutsideBorder(XLBorderStyleValues.Thin); i++; } worksheet.Cell("A1").Style.Border.SetLeftBorder(XLBorderStyleValues.Thick); worksheet.Cell("E1").Style.Border.SetRightBorder(XLBorderStyleValues.Thick); worksheet.Cell("A2").Style.Border.SetLeftBorder(XLBorderStyleValues.Thick); worksheet.Cell("E2").Style.Border.SetRightBorder(XLBorderStyleValues.Thick); worksheet.Cell("A3").Style.Border.SetLeftBorder(XLBorderStyleValues.Thick); worksheet.Cell("E3").Style.Border.SetRightBorder(XLBorderStyleValues.Thick); worksheet.Cell("A3").Style.Border.SetBottomBorder(XLBorderStyleValues.Thick); worksheet.Cell("B3").Style.Border.SetBottomBorder(XLBorderStyleValues.Thick); worksheet.Cell("C3").Style.Border.SetBottomBorder(XLBorderStyleValues.Thick); worksheet.Cell("D3").Style.Border.SetBottomBorder(XLBorderStyleValues.Thick); worksheet.Cell("E3").Style.Border.SetBottomBorder(XLBorderStyleValues.Thick); worksheet.Cells().Style.Alignment.Vertical = XLAlignmentVerticalValues.Center; worksheet.Cells().Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; worksheet.Row(1).Height = 20.0; worksheet.Row(2).Height = 20.0; worksheet.Columns().AdjustToContents(); worksheet.Column(1).Width = 30.43; workbook.SaveAs(filepath); return 1; } catch (Exception ex) { ErrorLogging.WriteToFile(ex.ToString()); return 0; } } private async void button2_Click(object sender, EventArgs e) { if (prices.Count > 0) { string filelocation = ""; DialogResult result = excelExport.ShowDialog(); if (result == DialogResult.OK) { filelocation = excelExport.FileName; Task task = new Task(() => GenerateExcel(prices, filelocation)); EpE.Visible = true; holding.Value = 0; task.Start(); var progress = new Progress(percent => { holding.Value = percent; }); await Task.Run(() => Progression.DoSomething(progress)); int report = await task; if (report == 1) { string title = "Success"; string message = "Excel report exported successfully"; NoAction noAction = new NoAction(title, message); noAction.BringToFront(); noAction.ShowDialog(); } else { string title = "Error Occurred"; string message = "An error occurred while exporting the excel report, please try again later."; NoAction noAction = new NoAction(title, message); noAction.BringToFront(); noAction.ShowDialog(); } EpE.Visible = false; } } 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(); } } } }