using BiskLog_Point_Of_Sale.Classes; using BiskLog_Point_Of_Sale.Multiple_Login; using BiskLog_Point_Of_Sale.Properties; 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.Net.Mail; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace BiskLog_Point_Of_Sale.Delivery { public partial class DeliveryManagement : Form { SqlConnection cn; SqlCommand cm; SqlDataReader dr; DatabaseConn conn = new DatabaseConn(); string SelecteddeliveryID, status, fullname, email; int rowSelectedIndex; DeliveryMain main; public DeliveryManagement(DeliveryMain main) { InitializeComponent(); cn = new SqlConnection(conn.MyConnection()); this.main = main; holding.Left = (ClientSize.Width - holding.Width) / 2; } private void AddProducts_Click(object sender, EventArgs e) { NewDelivery newDelivery = new NewDelivery(); newDelivery.BringToFront(); newDelivery.ShowDialog(); } public int LoadPreviousOrders() { try { deliveries.Invoke(new Action(() => { int i = 1; deliveries.Rows.Clear(); cn.Open(); cm = new SqlCommand("Select DH.deliveryID,DH.dateInitiated,DH.destination,DH.dateCompleted,DH.customerID,DH.generatedBy,DH.totalCost,DH.status,DR.fullname,DR.email from " + "tblDeliveryHead DH Inner Join tblDeliveryRecipients DR on DR.deliveryID = DH.deliveryID where DH.branchID = @branchID order by DH.dateInitiated desc", cn); cm.Parameters.AddWithValue("@branchID", Settings.Default.BranchID); cm.ExecuteNonQuery(); dr = cm.ExecuteReader(); while (dr.Read()) { if (!String.IsNullOrEmpty(dr[3].ToString())) { deliveries.Rows.Add(i, dr[0].ToString().ToUpper(), Convert.ToDateTime(dr[1].ToString()).ToLongDateString(), dr[2].ToString(), Convert.ToDateTime(dr[3].ToString()).ToLongDateString(), dr[4].ToString(), dr[5].ToString(), Settings.Default.currrencyCode + " " + dr[6].ToString(), dr[7].ToString(), dr[8].ToString().ToUpper(), dr[9].ToString()); } else { deliveries.Rows.Add(i, dr[0].ToString().ToUpper(), Convert.ToDateTime(dr[1].ToString()).ToLongDateString(), dr[2].ToString(), "-", dr[4].ToString(), dr[5].ToString(), Settings.Default.currrencyCode + " " + dr[6].ToString(), dr[7].ToString() , dr[8].ToString().ToUpper(), dr[9].ToString()); } i++; } cn.Close(); deliveries.ClearSelection(); })); return 1; } catch { cn.Close(); return 0; } } private async void DeliveryManagement_Load(object sender, EventArgs e) { hold.Visible = true; Task task = new Task(LoadPreviousOrders); task.Start(); await task; hold.Visible = false; } private void Deliveries_CellClick(object sender, DataGridViewCellEventArgs e) { //if (e.RowIndex != -1) //{ // string deliveryIdentification = deliveries.Rows[e.RowIndex].Cells[1].Value.ToString(); // this.Invoke(new Action(() => // { // DeliveryDetails delivery = new DeliveryDetails(deliveryIdentification); // delivery.BringToFront(); // delivery.ShowDialog(); // })); //} } private async void REMAILORDERINVOICEToolStripMenuItem_Click(object sender, EventArgs e) { if (!String.IsNullOrEmpty(SelecteddeliveryID)) { hold.Visible = true; string file = Environment.CurrentDirectory + @"\Order Invoice\" + SelecteddeliveryID + ".pdf"; if (File.Exists(file)) { if (!String.IsNullOrEmpty(email)) { if (IsValidEmail(email)) { Task taskO = new Task(sendInvoice); taskO.Start(); int youin = await taskO; if (youin == 1) { string titled = "Invoice Mailed"; string messaged = "Order invoice has been successfully mailed to the customer"; NoAction noActiond = new NoAction(titled, messaged); noActiond.BringToFront(); noActiond.ShowDialog(); } else { string titles = "Invoice not mailed"; string messages = "An error occurred while trying to mail invoice to customer , please make sure you have an active internet " + "connection and try again !!!"; NoAction noActions = new NoAction(titles, messages); noActions.BringToFront(); noActions.ShowDialog(); } } else { string title = "Invalid Email"; string message = "An error occurred while sending order invoice due to an invalid email address entered," + " please correct the email and try again"; NoAction noAction = new NoAction(title, message); noAction.BringToFront(); noAction.ShowDialog(); } } } else { Task task = new Task(() => { RegenerateInvoice.generateFile(SelecteddeliveryID); return 1; }); task.Start(); await task; Task taskO = new Task(sendInvoice); taskO.Start(); int youin = await taskO; if (youin == 1) { string titled = "Invoice Mailed"; string messaged = "Order invoice has been successfully mailed to the customer"; NoAction noActiond = new NoAction(titled, messaged); noActiond.BringToFront(); noActiond.ShowDialog(); } else { string titles = "Invoice not mailed"; string messages = "An error occurred while trying to mail invoice to customer, please try again"; NoAction noActions = new NoAction(titles, messages); noActions.BringToFront(); noActions.ShowDialog(); } } hold.Visible = false; } } bool IsValidEmail(string email) { try { var addr = new MailAddress(email); return addr.Address == email; } catch { return false; } } private void Deliveries_MouseClick(object sender, MouseEventArgs e) { SelecteddeliveryID = ""; try { if (e.Button == MouseButtons.Right) { deliveries.ClearSelection(); DeliveryOptions.Show(deliveries, new Point(e.X, e.Y)); DataGridView.HitTestInfo hitTestInfo = deliveries.HitTest(e.X, e.Y); deliveries.Rows[hitTestInfo.RowIndex].Selected = true; SelecteddeliveryID = deliveries.Rows[hitTestInfo.RowIndex].Cells[1].Value.ToString(); status = deliveries.Rows[hitTestInfo.RowIndex].Cells[8].Value.ToString(); rowSelectedIndex = hitTestInfo.RowIndex; fullname = deliveries.Rows[hitTestInfo.RowIndex].Cells[9].Value.ToString(); email = deliveries.Rows[hitTestInfo.RowIndex].Cells[10].Value.ToString(); } } catch (Exception ex) { ErrorLogging.WriteToFile(ex.ToString()); } } private async void PRINTORDERINVOICEToolStripMenuItem_Click(object sender, EventArgs e) { if (!String.IsNullOrEmpty(SelecteddeliveryID)) { string printerReportDefault = Settings.Default.ReportPrinter; 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)) { string printLocation = folder.SelectedPath + @"\" + SelecteddeliveryID + ".pdf"; holding.Visible = true; Task task = new Task(() => generatePrint(printLocation)); task.Start(); await task; holding.Visible = false; } } else { holding.Visible = true; Task task = new Task(() => generatePrint()); task.Start(); await task; holding.Visible = false; } } } private void ASSIGNTRUCKToolStripMenuItem_Click(object sender, EventArgs e) { if (!String.IsNullOrEmpty(SelecteddeliveryID)) { main.Loadingbay(SelecteddeliveryID); } } private void ORDERREVIEWToolStripMenuItem_Click(object sender, EventArgs e) { if (!String.IsNullOrEmpty(SelecteddeliveryID)) { this.Invoke(new Action(() => { DeliveryDetails delivery = new DeliveryDetails(SelecteddeliveryID, status); delivery.BringToFront(); delivery.ShowDialog(); if (delivery.delivered) { deliveries.Rows[rowSelectedIndex].Cells[8].Value = "DELIVERED"; } else if (delivery.cancelled) { deliveries.Rows[rowSelectedIndex].Cells[8].Value = "CANCELLED"; } })); } } public int sendInvoice() { try { MailMessage mail = new MailMessage(); string client = Settings.Default.smtpServer; string clientPort = Settings.Default.smtpPort; string username = Settings.Default.emailAddress; string password = passwordEncryption.Decrypt(Settings.Default.password); SmtpClient smtpClient = new SmtpClient(client); mail.From = new MailAddress(username); mail.To.Add(email); mail.Subject = "Order invoice"; mail.Body = "Hello " + fullname + " your order invoice has been attached to this mail"; string file = Environment.CurrentDirectory + @"\Order Invoice\" + SelecteddeliveryID + ".pdf"; Attachment attachment = new Attachment(file); mail.Attachments.Add(attachment); smtpClient.Port = int.Parse(clientPort); smtpClient.Credentials = new System.Net.NetworkCredential(username, password); smtpClient.EnableSsl = true; smtpClient.Send(mail); return 1; } catch { return 0; } } public int generatePrint(string printLocation = null) { try { cn.Open(); List deliveryInvoice = new List(); List productsList = new List(); string fullname, address, telephone, email, charges, itemTotal, fromDate, toDate, allTotal; OrderInvoice order = null; cm = new SqlCommand("Declare @totalProduct decimal(19,2) = (Select Sum(cost) from tblDeliveryDetails where deliveryID = @deliveryID) " + "Declare @Addition decimal(19, 2) = case when(Select totalCost from tblDeliveryHead where deliveryID = @deliveryID) - @totalProduct <= 0 then 0 " + "else (Select totalCost from tblDeliveryHead where deliveryID = @deliveryID) - @totalProduct end " + "Select DR.fullname,DR.address,DR.telephone,DR.email,DR.fromDate,DR.toDate,DH.totalCost,DP.product_name,DD.quantity,DD.cost,@totalProduct,@Addition,DD.pcode,u.unitname from " + "tblDeliveryDetails DD Inner Join tblDeliveryRecipients DR on DR.deliveryID = DD.deliveryID Inner Join tblDeliveryHead DH On DH.deliveryID = DD.deliveryID Inner Join " + "tblProduct DP On DP.pcode = DD.pcode Inner Join UnitOfMeasure u On u.unitCode = DD.unit where DD.deliveryID = @deliveryID and DH.branchID = @branchID", cn); cm.Parameters.AddWithValue("@deliveryID", SelecteddeliveryID); cm.Parameters.AddWithValue("@branchID", Settings.Default.BranchID); cm.ExecuteNonQuery(); dr = cm.ExecuteReader(); while (dr.Read()) { fullname = dr[0].ToString().ToUpper(); address = dr[1].ToString().ToUpper(); telephone = dr[2].ToString(); email = dr[3].ToString(); fromDate = dr[4].ToString(); toDate = dr[5].ToString(); charges = Settings.Default.currrencyCode + " " + dr[11].ToString(); itemTotal = Settings.Default.currrencyCode + " " + dr[10].ToString(); allTotal = Settings.Default.currrencyCode + " " + dr[6].ToString(); products p = new products(dr[7].ToString().ToUpper(), dr[8].ToString(), Settings.Default.currrencyCode + " " + dr[9].ToString(),dr[12].ToString()); productsList.Add(p); order = new OrderInvoice( orderDate: DateTime.Now.ToString("yyyy-MM-dd"), beginDate: fromDate, endDate: toDate, ProductsCost: itemTotal, additional: charges, All: allTotal, address: address, email: email, telephone: telephone, branchtelephone: Settings.Default.BranchTelephone, branchLocation: Settings.Default.BranchCity, branchName: Settings.Default.BranchName, orderid: SelecteddeliveryID, companyName: Settings.Default.CompanyName, customer: fullname ); } dr.Close(); cn.Close(); deliveryInvoice.Add(order); LocalReport report = new LocalReport(); string path = Path.GetDirectoryName(Application.ExecutablePath); string fullpath = Path.GetDirectoryName(Application.ExecutablePath).Remove(path.Length - 10) + @"\Delivery\OrderInvoice.rdlc"; report.ReportPath = fullpath; report.DataSources.Add(new ReportDataSource("Details", deliveryInvoice)); report.DataSources.Add(new ReportDataSource("products", productsList)); OrderInvoiceConfig.PrintToPrinter(report, printLocation, Settings.Default.ReportPrinter); return 1; } catch { cn.Close(); return 0; } } } }