private async void button3_Click(object sender, EventArgs e)
        {
            var     ds       = new MonthlyReportDS();
            var     cmd      = DBConn.CreateCommand();
            var     i        = 1;
            decimal income   = 0;
            decimal cost     = 0;
            decimal rate     = 0;
            decimal expenses = 0;

            cmd.CommandText = "SELECT date, place, IF(type = 2, description, name) AS name, SUM(qty), SUM(IF(type=1,qty*tripdetails.selling,0)), SUM(IF(type = 2, tripdetails.selling,qty*tripdetails.buying)), type FROM (trip INNER JOIN tripdetails ON trip.tripID = tripdetails.tripID) LEFT JOIN cashew ON tripdetails.cashID = cashew.cashID WHERE MONTH(date) = @month AND YEAR(date) = @year GROUP BY date, place, name ORDER BY type, date";
            cmd.Parameters.AddWithValue("@month", dtpMonth.Value.Month);
            cmd.Parameters.AddWithValue("@year", dtpMonth.Value.Year);
            var reader = await cmd.ExecuteReaderAsync();

            while (await reader.ReadAsync())
            {
                if (reader.GetValue(2) is DBNull)
                {
                    MessageBox.Show("No records found for this month", "No data", MessageBoxButtons.OK,
                                    MessageBoxIcon.Error);
                    reader.Dispose();
                    return;
                }

                DataRow dr = ds.Tables["Monthly Trip Cashew"].NewRow();
                dr["Index"]       = i++;
                dr["Date"]        = reader.GetFieldValue <DateTime>(0).ToString("dd dddd");
                dr["Trip"]        = reader.GetFieldValue <string>(1);
                dr["Cashew"]      = reader.GetFieldValue <string>(2);
                dr["QTY"]         = reader.GetFieldValue <int>(6) == 1 ? Math.Round(reader.GetFieldValue <decimal>(3), 2) + "Kg" : "-";
                dr["Income"]      = reader.GetFieldValue <int>(6) == 1 ? "Rs. " + Math.Round(reader.GetFieldValue <decimal>(4), 2) : "-";
                dr["Cost"]        = "Rs. " + Math.Round(reader.GetFieldValue <decimal>(5), 2);
                dr["Profit_Rate"] = reader.GetFieldValue <int>(6) == 1 ? Math.Round(((reader.GetFieldValue <decimal>(4) - reader.GetFieldValue <decimal>(5)) / reader.GetFieldValue <decimal>(4)) * 100) + "%" : "-";
                ds.Tables["Monthly Trip Cashew"].Rows.Add(dr);

                income   += reader.GetFieldValue <decimal>(4);
                cost     += reader.GetFieldValue <int>(6) == 1 ? reader.GetFieldValue <decimal>(5) : 0;
                expenses += reader.GetFieldValue <int>(6) == 2 ? reader.GetFieldValue <decimal>(5) : 0;
            }

            rate = ((income - (cost + expenses)) / income) * 100;

            var model = new MonthlyTripCashewModel()
            {
                date     = dtpDate.Value,
                income   = Math.Round(income, 2),
                cost     = Math.Round(cost, 2),
                profit   = Math.Round(income - (cost + expenses), 2),
                expenses = Math.Round(expenses, 2),
                rate     = Math.Round(rate, 2)
            };

            reader.Dispose();

            dataGridView1.DataSource = ds.Tables["Monthly Trip Cashew"];
            var frm = new Monthly_Trip_Cashew(ds, model);

            frm.Show();
        }
 public Monthly_Trip_Cashew(MonthlyReportDS ds, MonthlyTripCashewModel model)
 {
     this.model = model;
     this.ds    = ds;
     InitializeComponent();
 }