using System;
using System.Windows.Forms;
using System.Drawing;
using DevComponents.DotNetBar;
using System.Data;
using Transport.BLL;
using System.Globalization;
using Microsoft.Office.Interop.Excel;

namespace Transport
{
    public partial class main : Office2007Form
    {
        public main()
        {
            InitializeComponent();
        }

       
      

      

     
        private void fillGrid()
        {
          
            System.Data.DataTable ResultTable = bll_transport.SelectAllRecord("tbl_transport");
            dgv_transport.DataSource = ResultTable;

            dgv_transport.Columns[0].Visible = false;
            dgv_transport.Columns[3].Visible = false;
            dgv_transport.Columns[8].Visible = false;
            dgv_transport.Columns[12].Visible = false;
            dgv_transport.Columns[13].Visible = false;
            dgv_transport.Columns[14].Visible = false;
            dgv_transport.Columns[15].Visible = false;
            dgv_transport.Columns[16].Visible = false;
            dgv_transport.Columns[17].Visible = false;
            dgv_transport.Columns[18].Visible = false;
            dgv_transport.Columns[19].Visible = false;
            dgv_transport.Columns[20].Visible = false;
            special_class.setRowNumber(dgv_transport);
        }

        public delegate void _searchOnTransport();
        private void searchOnTransport()
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new _searchOnTransport(searchOnTransport));
                return;
            }

            clearAllLabels();
            string SQLWHERE = string.Format(" WHERE  company_name like '%{0}%' OR transport_number like '%{0}%' OR transport_date like '%{0}%' OR trasport_import_date like '%{0}%' ", txt_fast_search.Text);
            string SQLQuery = "SELECT tbl_transport.transport_id as [شناسه],tbl_transport.transport_date as [تاریخ بارنامه],tbl_transport.transport_number as [شماره بارنامه],tbl_transport.company_id as [شناسه شرکت],tbl_company.company_name as [شرکت],tbl_transport.peyment_type as [نوع پرداخت],tbl_transport.transport_type as [نوع بارنامه],tbl_transport.transport_total_price as [مبلغ بارنامه],tbl_transport.city_id as [کد شهر],tbl_transport.agency_portion as [سهم نمایندگی],tbl_transport.transport_company_portion as [سهم شرکت],tbl_transport.trasport_import_date as [تاریخ ثبت],tbl_transport.transport_weight as [وزن],tbl_transport.transport_price as [کرایه حمل],tbl_transport.transport_description as [توضیحات],tbl_transport.is_city_agency as [آیا نماینده شهرستان است؟],tbl_transport.current_agency_portion_price as [سهم کنونی نماینده شهرستان],tbl_transport.transport_current_max_fix_weight as [حداکثر وزن قیمت ثابت],tbl_transport.transport_current_base_price as [قیمت پایه برای وزن ثابت],tbl_transport.transport_current_addition_price as [قیمت برای هر کیلو بار اضافه],tbl_transport.transport_current_agency_portion as [سهم شرکت برای ارسال شهرستان] " +
                                       " FROM tbl_company INNER JOIN tbl_transport ON tbl_company.company_id = tbl_transport.company_id " + SQLWHERE;

            System.Data.DataTable ResultTable = bll_transport.search_in_transport(SQLQuery);
            dgv_transport.DataSource = ResultTable;
            CalculateEveryThings();
        }

        

        private void clearAllLabels()
        {
            lbl_transport_type.Text = "---";
            lbl_transport_peyment.Text = "---";
            lbl_transport_number.Text = "---";
            lbl_transport_date.Text = "---";
            lbl_transport_weight.Text = "---";
            lbl_transport_total_price.Text = "---";
            lbl_transport_agency_portion.Text = "---";
            lbl_transport_description.Text = "---";
            lbl_transport_import_date.Text = "---";
            lbl_transport_max_weight.Text = "---";
            lbl_transport_base_price.Text = "---";
            lbl_transport_addition_weight.Text = "---";
            lbl_transport_comany_agency_portion.Text = "---";
            lbl_transport_company_portion.Text = "---";
            lbl_company_name.Text = "---";
        }

        private void setLabelsContent()
        {
            try
            {
                clearAllLabels();
                if (dgv_transport.Rows.Count > 0)
                {
                    lbl_transport_id.Text = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[0].Value.ToString();


                    lbl_transport_type.Text = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[6].Value.ToString();
                    lbl_transport_peyment.Text = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[5].Value.ToString();
                    lbl_company_name.Text = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[4].Value.ToString();
                    lbl_transport_number.Text = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[2].Value.ToString();
                    lbl_transport_date.Text = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[1].Value.ToString();
                    lbl_transport_weight.Text = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[12].Value.ToString();
                    lbl_transport_total_price.Text = special_class.ToFormattedThousands(dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[7].Value.ToString());
                    lbl_transport_agency_portion.Text = special_class.ToFormattedThousands(dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[9].Value.ToString());
                    lbl_transport_description.Text = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[14].Value.ToString();
                    lbl_transport_import_date.Text = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[11].Value.ToString();
                    lbl_transport_max_weight.Text = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[17].Value.ToString();
                    lbl_transport_base_price.Text = special_class.ToFormattedThousands(dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[18].Value.ToString());
                    lbl_transport_addition_weight.Text = special_class.ToFormattedThousands(dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[19].Value.ToString());
                    lbl_transport_comany_agency_portion.Text = special_class.ToFormattedThousands(dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[20].Value.ToString());
                    lbl_transport_company_portion.Text = special_class.ToFormattedThousands(dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[10].Value.ToString());
                }
                else
                {
                    clearAllLabels();
                }

                if (dgv_transport.Rows.Count < 1)
                {
                    clearAllLabels();
                }
            }
            catch (Exception)
            {
                clearAllLabels();
            }

        }

      

        // آرایه ای رشته ای برای نگهداری شرط های فیلتر کردن دیتاگرید
        static string[] FilterQuery = new string[6];

        // متد چک کردن خانه های آرایه برای خالی یا پر بودن
        private bool CheckArrayCells(string[] InputArray,int Index)
        {
            for (int i = 0; i <Index ; i++)
            {
                if (InputArray[i] !=string.Empty)
                {
                    return true;
                }
            }
            return false;
        
        }

        // متد خالی کردن مقادیر لیبل های پایین دیتاگرید
        private void SetLabelsEmpty()
        {
            lbl_total_price.Text = "0";
            lbl_sum_city_agency.Text = "0";
            lbl_transport_in_count.Text = "0";
            lbl_transport_out_count.Text = "0";
            lbl_transport_all.Text = "0";
            lbl_peyment_pre_count.Text = "0";
            lbl_peyment_next_count.Text = "0";
            lbl_weight.Text = "0";
            lbl_debt.Text = "0";
            lbl_credit.Text = "0";
            lbl_remain.Text = "0";
            lbl_company.Text = "-";
            lbl_date.Text = "-";
            lbl_sum_kish_agency.Text = "0";
        }

        // متد فیلتر کردن دیتاگرید بر اساس شرط های تعریف شده در بالای دیتاگرید        
        private void FilterDatagrid()
        {
            // ستونهایی که می خواهیم در جدول بارنامه بعد از فیلتر کردن نمایش داده شوند

            string QueryHead = "SELECT tbl_transport.transport_id as [شناسه],tbl_transport.transport_date as [تاریخ بارنامه],tbl_transport.transport_number as [شماره بارنامه],tbl_transport.company_id as [شناسه شرکت],tbl_company.company_name as [شرکت],CASE (peyment_type) WHEN '1' THEN 'نقدی' ELSE 'پس کرایه' END AS [نوع پرداخت], CASE (transport_type) WHEN '1' THEN 'ورودی' ELSE 'خروجی' END AS [نوع بارنامه],tbl_transport.transport_total_price as [مبلغ بارنامه],tbl_transport.city_id as [کد شهر],tbl_transport.agency_portion as [سهم نمایندگی],tbl_transport.transport_company_portion as [سهم شرکت],tbl_transport.trasport_import_date as [تاریخ ثبت],tbl_transport.transport_weight as [وزن],tbl_transport.transport_price as [کرایه حمل],tbl_transport.transport_description as [توضیحات],tbl_transport.is_city_agency as [آیا نماینده شهرستان است؟],tbl_transport.current_agency_portion_price as [سهم کنونی نماینده شهرستان],tbl_transport.transport_current_max_fix_weight as [حداکثر وزن قیمت ثابت],tbl_transport.transport_current_base_price as [قیمت پایه برای وزن ثابت],tbl_transport.transport_current_addition_price as [قیمت برای هر کیلو بار اضافه],tbl_transport.transport_current_agency_portion as [سهم شرکت برای ارسال شهرستان] " +
                                          " FROM tbl_company INNER JOIN tbl_transport ON tbl_company.company_id = tbl_transport.company_id ";
           
            // متغیری برای ذخیره متن جستجو در کادر جستجو
            string search_text_holder = "";

            //اگر نوع بارنامه 1 باشد
            if (rdo_transport_in.Checked)
            {
                FilterQuery[0]= " transport_type='1' ";
            }

            // اگر نوع بارنامه 2 باشد
            if (rdo_transport_out.Checked)
            {
                FilterQuery[0] = " transport_type='2' ";
            }


            // اگر نوع پرداخت 1 باشد
            if (rdo_peyment_pre.Checked)
            {
                // اگر خانه های قبلی آرایه پر شده باشند باید -اند- به ابتدای رشته اضافه گردد
                if (CheckArrayCells(FilterQuery,1))
                {
                    FilterQuery[1] = " AND peyment_type='1' ";    
                }
                else
                {
                    FilterQuery[1] = " peyment_type='1' ";
                }
                
            }


            // اگر نوع پرداخت 2 باشد
            if (rdo_peyment_next.Checked)
            {
                // اگر خانه های قبلی آرایه پر شده باشند باید -اند- به ابتدای رشته اضافه گردد
                if (CheckArrayCells(FilterQuery, 1))
                {
                    FilterQuery[1] = "AND peyment_type='2' ";    
                }
                else
                {
                    FilterQuery[1] = " peyment_type='2' ";    
                }
                
            }


            // اگر کامبو باکس شرکت ها دارای عضو باشد
            if (cmb_company.Items.Count>0)
            {
                // و یک گزینه بجز گزینه -همه- انتخاب شده باشد
                if (cmb_company.SelectedIndex != 0)
                {
                    // اگر خانه های قبلی آرایه پر شده باشند باید -اند- به ابتدای رشته اضافه گردد
                    if (CheckArrayCells(FilterQuery, 2))
                    {
                        FilterQuery[2] = " AND tbl_transport.company_id=" + cmb_company.SelectedValue.ToString() + " ";
                    }
                    else
                    {
                        FilterQuery[2] = " tbl_transport.company_id=" + cmb_company.SelectedValue.ToString() + " ";
                    }
                    
                }    
            }


            // اگر محدوده ی تاریخ ثبت برای فیلتر کردن انتخاب شده باشد
            if (rdo_import_date_range.Checked==true)
            {
                if (txt_import_date_start.Text.Contains("_") || txt_import_date_end.Text.Contains("_"))
                {
                    FMessegeBox.FarsiMessegeBox.Show("لطفاً تاریخ ثبت را صحیح وارد کنید", "خطا", FMessegeBox.FMessegeBoxButtons.Ok, FMessegeBox.FMessegeBoxIcons.Error);
                    return;
                }
                // اگر خانه های قبلی آرایه پر شده باشند باید -اند- به ابتدای رشته اضافه گردد
                if (CheckArrayCells(FilterQuery, 4))
                {
                    FilterQuery[4] = " AND trasport_import_date >= '" + txt_import_date_start.Text + "' AND trasport_import_date <= '" + txt_import_date_end.Text + "'";
                }
                else
                {
                    FilterQuery[4] = " trasport_import_date >= '" + txt_import_date_start.Text + "' AND trasport_import_date <= '" + txt_import_date_end.Text + "'";
                }
            }
            
            // اگر محدوده ی تاریخ برای فیلتر کردن انتخاب شده باشد
            if (rdo_date_range.Checked)
            {
                if (txt_date_start.Text.Contains("_") || txt_date_end.Text.Contains("_"))
                {
                    FMessegeBox.FarsiMessegeBox.Show("لطفاً تاریخ را صحیح وارد کنید", "خطا", FMessegeBox.FMessegeBoxButtons.Ok, FMessegeBox.FMessegeBoxIcons.Error);
                    return;
                }
                // اگر خانه های قبلی آرایه پر شده باشند باید -اند- به ابتدای رشته اضافه گردد
                if (CheckArrayCells(FilterQuery, 4))
                {
                    FilterQuery[4] = " AND transport_date >= '" + txt_date_start.Text + "' AND transport_date <= '" + txt_date_end.Text + "'"; 
                }
                else
                {
                    FilterQuery[4] = " transport_date >= '" + txt_date_start.Text + "' AND transport_date <= '" + txt_date_end.Text + "'"; 
                }
                
                
            }

            // اگر نوع جستجو در متن دلخواه جستجو شامل متن باشد - یعنی هر ستونی که قسمتی از آن مانند متن وارد شده کاربر باشد
            if (rdo_text_contain.Checked)
            {
                search_text_holder = string.Format(" ( transport_id like '%{0}%' OR transport_type like '%{0}%' OR peyment_type like '%{0}%' OR company_name like '%{0}%' OR transport_number like '%{0}%' OR transport_date like '%{0}%' OR transport_weight like '%{0}%' OR transport_total_price like '%{0}%' OR transport_price like '%{0}%' OR agency_portion like '%{0}%' OR transport_description like '%{0}%')", txt_search.Text);

                // اگر خانه های قبلی آرایه پر شده باشند باید -اند- به ابتدای رشته اضافه گردد
                if (CheckArrayCells(FilterQuery, 5))
                {
                    FilterQuery[5] = " AND " +search_text_holder;
                }
                else
                {
                    FilterQuery[5] = search_text_holder;
                }
                
                
            }

            // اگر نوع جستجو در متن دلخواه جستجو باید مانند متن باشد - یعنی هر ستونی که دقیقا مانند متن وارد شده کاربر باشد
            if (rdo_text_same.Checked)
            {
                search_text_holder = string.Format(" ( transport_id like '{0}%' OR transport_type like '{0}%' OR peyment_type like '{0}%' OR company_name like '{0}%' OR transport_number like '{0}%' OR transport_date like '{0}%' OR transport_weight like '{0}%' OR transport_total_price like '{0}%' OR transport_price like '{0}%' OR agency_portion like '{0}%' OR transport_description like '{0}%')", txt_search.Text);

                // اگر خانه های قبلی آرایه پر شده باشند باید -اند- به ابتدای رشته اضافه گردد
                if (CheckArrayCells(FilterQuery, 5))
                {
                    FilterQuery[5] = " AND " + search_text_holder;
                }
                else
                {
                    FilterQuery[5] = search_text_holder;
                }

            }

            string WhereHolder = "";
            
            if (CheckArrayCells(FilterQuery,6))
            {
                WhereHolder += " WHERE ";
                foreach (string item in FilterQuery)
                {
                    WhereHolder += item;
                }    
            }

            string FinalQuery = QueryHead + WhereHolder;

            //MessageBox.Show(FinalQuery);
            dgv_transport.DataSource = bll_transport.search_in_transport(FinalQuery);

            for (int i = 0; i < FilterQuery.Length; i++)
            {
                FilterQuery[i] = string.Empty;
            }

            special_class.setRowNumber(dgv_transport);
        }



        //   متد پر کردن اطلاعات جدول بارنامه ها
        public void FillDataGrid()
        {
            System.Data.DataTable ResultTable = bll_transport.SelectAllRecord("tbl_transport");
            dgv_transport.DataSource = ResultTable;

            dgv_transport.Columns[0].HeaderText = "شناسه";
            dgv_transport.Columns[1].HeaderText = "تاریخ بارنامه";
            dgv_transport.Columns[2].HeaderText = "شماره بارنامه";
            dgv_transport.Columns[3].HeaderText = "شناسه شرکت";
            dgv_transport.Columns[4].HeaderText = "شرکت";
            dgv_transport.Columns[5].HeaderText = "نوع پرداخت";
            dgv_transport.Columns[6].HeaderText = "نوع بارنامه";
            dgv_transport.Columns[7].HeaderText = "مبلغ بارنامه";
            dgv_transport.Columns[8].HeaderText = "کد شهر";
            dgv_transport.Columns[9].HeaderText = "سهم نمایندگی";
            dgv_transport.Columns[10].HeaderText = "سهم شرکت";
            dgv_transport.Columns[11].HeaderText = "تاریخ ثبت";
            dgv_transport.Columns[12].HeaderText = "وزن";
            dgv_transport.Columns[13].HeaderText = "کرایه حمل";
            dgv_transport.Columns[14].HeaderText = "توضیحات";
            dgv_transport.Columns[15].HeaderText = "آیا نماینده شهرستان است؟";
            dgv_transport.Columns[16].HeaderText = "سهم کنونی نماینده شهرستان";
            dgv_transport.Columns[17].HeaderText = "حداکثر وزن قیمت ثابت";
            dgv_transport.Columns[18].HeaderText = "قیمت پایه برای وزن ثابت";
            dgv_transport.Columns[19].HeaderText = "قیمت برای هر کیلو بار اضافه";
            dgv_transport.Columns[20].HeaderText = "سهم شرکت برای ارسال شهرستان";


            dgv_transport.Columns[0].Visible = false;
            dgv_transport.Columns[3].Visible = false;
            dgv_transport.Columns[8].Visible = false;
            dgv_transport.Columns[12].Visible = false;
            dgv_transport.Columns[13].Visible = false;
            dgv_transport.Columns[14].Visible = false;
            dgv_transport.Columns[15].Visible = false;
            dgv_transport.Columns[16].Visible = false;
            dgv_transport.Columns[17].Visible = false;
            dgv_transport.Columns[18].Visible = false;
            dgv_transport.Columns[19].Visible = false;
            dgv_transport.Columns[20].Visible = false;

            special_class.setRowNumber(dgv_transport);
        }

        
        /// <summary>
        /// افزودن گزینه - همه شرکت ها - به ابتدای لیست شرکت ها
        /// </summary>
        /// <param name="InputDatatable">DataTable</param>
        /// <returns>DataTable</returns>
        private System.Data.DataTable AddRowToCompanyDataTable(System.Data.DataTable InputDatatable)
        {

            DataRow dr=InputDatatable.NewRow();
            dr["company_id"]=0;
            dr["company_name"] = "همه شرکت ها";
            //InputDatatable.Rows.Add(dr);
            InputDatatable.Rows.InsertAt(dr, 0);
            return InputDatatable;

        }

        
        /// <summary>
        /// افزودن گزینه - همه شهر ها - به ابتدای لیست شهر ها
        /// </summary>
        /// <param name="InputDatatable">DataTable</param>
        /// <returns>DataTable</returns>
        private System.Data.DataTable AddRowToCityDataTable(System.Data.DataTable InputDatatable)
        {

            DataRow dr = InputDatatable.NewRow();
            dr["city_id"] = 0;
            dr["city_name"] = "همه شهرها";
            //InputDatatable.Rows.Add(dr);
            InputDatatable.Rows.InsertAt(dr, 0);
            return InputDatatable;

        }

        //پر کردن لیست بازشونده شرکت ها
        public void FillCompanyComboBox()
        {
            System.Data.DataTable CompanyList = AddRowToCompanyDataTable(bll_company.SelectCompanyList());
            cmb_company.DataSource = CompanyList;
            cmb_company.ValueMember = "company_id";
            cmb_company.DisplayMember = "company_name";
        }

        //پر کردن لیست بازشونده شهر ها
        //public void FillCityComboBox()
        //{
        //    DataTable CityList =AddRowToCityDataTable( bll_city.SelectCityList());
        //    cmb_city.DataSource = CityList;
        //    cmb_city.ValueMember = "city_id";
        //    cmb_city.DisplayMember = "city_name";
        //}
       


        // متد مقداردهی خاصیت های فرم ویرایش باربری
        public void Fill_EditTransport_Properties()
        {
            if (dgv_transport.Rows.Count > 0)
            {
                // تنظیم شناسه باربری
               edit_trasport.transport_id = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[0].Value.ToString();
                // تنطیم نوع باربری
               edit_trasport.transport_type = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[1].Value.ToString();
               //MessageBox.Show(edit_trasport.transport_type);
                //تنظیم نوع پرداخت
               edit_trasport.peyment_type = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[2].Value.ToString();
               //MessageBox.Show(edit_trasport.peyment_type);
                // تنظیم شماره شرکت
                edit_trasport.company_id= dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[3].Value.ToString();

                // تنظیم شماره شهر
                edit_trasport.city_id = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[5].Value.ToString();

                //تنظیم شماره بارنامه
                edit_trasport.transport_number= dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[7].Value.ToString();

                //تنظیم تاریخ بارنامه
                edit_trasport.transport_date= dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[8].Value.ToString();

                //تنظیم وزن بارنامه
                edit_trasport.transport_weight= dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[9].Value.ToString();

                //تنظیم مبلغ کل بارنامه
                edit_trasport.transport_total_price= dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[10].Value.ToString();

                //تنظیم مبلغ کرایه حمل
                edit_trasport.transport_price= dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[11].Value.ToString();

                //تنظیم سهم نمایندگی
                edit_trasport.agency_portion= dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[12].Value.ToString();

                //تنظیم توضیحات
                edit_trasport.description= dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[13].Value.ToString();

                //تنطیم اینکه نماینده در شهرستان است یا تهران
                if ( dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[14].Value.ToString()=="1")
	            {
                    edit_trasport.is_city_agency = "1";
	            }
                else
                {
                    edit_trasport.is_city_agency = "0";
                }
                
            }
        }


        //متد محاسبه مقادیر و قرار دادن در لیبل های پایین دیتاگرید
        private void CalculateEveryThings()
        {
            if (dgv_transport.Rows.Count>0)
            {
                //مجموع بارنامه ها
                int total_price_sum = 0;
            
                //مجموع اوزان
                double weight_sum = 0;
                
                // تعداد بارنامه های 1
                int transport_in_count = 0;
                
                // تعداد بارنامه های 2
                int trasport_out_count = 0;
                
                // تعداد بارنامه های 1
                int peyment_pre_count = 0;
                
                //تعداد بارنامه های 2
                int peyment_next_count = 0;
                
                // تعداد همه بارنامه ها
                int transport_all = dgv_transport.Rows.Count;

              

                // متغیر نگهدارنده میزان بدهی
                int debt = 0;
                
                // متغیر نگهدارنده میزان طلب
                int credit = 0;
                
                // متغیر نگهدارنده مانده حساب
                int remain = 0;

                int kish_agency = 0;

                int city_agency = 0;

                int kish_agency_sum = 0;

                int city_agency_sum = 0;


                // حلقه به تعداد سطرهای دیتاگریدویو
                    for (int i = 0; i < dgv_transport.Rows.Count; ++i)
                    {
                        
                        // جمع زدن مجموع اوزان
                        weight_sum += Convert.ToDouble( dgv_transport.Rows[i].Cells[12].Value.ToString());

                        //اگر بارنامه 1 باشد
                        if (dgv_transport.Rows[i].Cells[6].Value.ToString().Contains("ورود"))
                        {
                            transport_in_count++;
                        }
                        else
                        {
                            trasport_out_count++;
                        }
                        total_price_sum += Convert.ToInt32(dgv_transport.Rows[i].Cells[7].Value.ToString());
                        kish_agency_sum += Convert.ToInt32(dgv_transport.Rows[i].Cells[9].Value.ToString());
                        debt += Convert.ToInt32(dgv_transport.Rows[i].Cells[10].Value.ToString());
                    }

                    lbl_total_price.Text = special_class.ToFormattedThousands( total_price_sum.ToString());
                    lbl_transport_in_count.Text = transport_in_count.ToString();
                    lbl_transport_out_count.Text = trasport_out_count.ToString();
                    lbl_transport_all.Text = transport_all.ToString();
                    lbl_peyment_pre_count.Text = peyment_pre_count.ToString();
                    lbl_peyment_next_count.Text = peyment_next_count.ToString();
                    lbl_weight.Text = weight_sum.ToString();
                    

                    if (cmb_company.Items.Count>1)
                    {
                        lbl_company.Text = cmb_company.Text;
                    }
                    else
                    {
                        lbl_company.Text = "همه شرکت ها";
                    }

                    if (rdo_date_all.Checked)
                    {
                        lbl_date.Text = "همه تاریخ ها";
                    }
                    else
                    {
                        lbl_date.Text =txt_date_start .Text+"   *   "+ txt_date_end.Text;
                    }

                    sahmekish.Text =special_class.ToFormattedThousands( kish_agency_sum.ToString());
                    sahmetehran.Text = special_class.ToFormattedThousands(debt.ToString());
                    mandeh.Text = special_class.ToFormattedThousands((kish_agency_sum - debt).ToString());
            }
            else
            {
                SetLabelsEmpty();
            }
        }
        
        /// <summary>
        /// متد ایجاد تاریخ شمسی به همراه زمان با فرمت کامل
        /// </summary>
        /// <returns></returns>
        public static string PersianDatetime()
        {
            PersianCalendar pcDate = new PersianCalendar();
            int persianYear = pcDate.GetYear(DateTime.Now);
            int persianMonth = pcDate.GetMonth(DateTime.Now);
            int persianDay = pcDate.GetDayOfMonth(DateTime.Now);

            string CurrentTime = DateTime.Now.ToString("hh-mm-ss");

            string fullPersianDate = persianYear.ToString() + "-" + persianMonth.ToString() + "-" + persianDay.ToString() + "-" + CurrentTime;
            return fullPersianDate;
        }


        // متد تهیه بک آپ از بانک اطلاعاتی - در اصل یک کپی از فایل اکسس را به مسیر تعیین شده در تنظیمات برنامه را انتقال می دهد
        public static void Backup()
        {
            // ----------------------------------- 
            // -- CREATE FILE BACKUP 
            // ----------------------------------- 

            string src = System.Windows.Forms.Application.StartupPath + @"\transportdb.mdb";
            string dst = "";

            System.Data.DataTable settingsDT = bll_settings.Select_App_Settings();
            if (settingsDT.Rows.Count > 0)
            {

                string backup_path = settingsDT.Rows[0].ItemArray[6].ToString();

                if (backup_path == "")
                {
                    dst = "c:/";
                }
                else
                {
                    dst = backup_path;
                }
                dst = dst + "\\" + "transportdb-" + PersianDatetime() + ".mdb";

            }

            try
            {
                System.IO.File.Copy(src, dst, true);
            }
            catch (Exception ee)
            {
                FMessegeBox.FarsiMessegeBox.Show("مسیر پشتیبان گیری برنامه نامعتبر است");
            }


        }
       

        // **************************************************************************************
       
        // متد بارگزاری فرم اصلی برنامه
        private void main_Load(object sender, EventArgs e)
        {

            
           // tiny_lock.CheckLock();
            FillCompanyComboBox();
          
            for (int i = 0; i < FilterQuery.Length; i++)
            {
                FilterQuery[i] = string.Empty;
            }

            fillGrid();

            
            CalculateEveryThings();
        }

        // متد سل اینتر برای قرار دادن مقدار شناسه باربری در لیبل شناسه باربری
        private void dgv_transport_CellEnter(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
        {
            setLabelsContent();
            if (dgv_transport.Rows.Count>0)
            {
                lbl_transport_id.Text = dgv_transport.Rows[dgv_transport.CurrentRow.Index].Cells[0].Value.ToString();    
            }
            
        }

        // متد اکتیویتد فرم اصلی برنامه
        private void main_Activated(object sender, EventArgs e)
        {
       
        }

        // متد دکمه هزینه ها
        private void btn_cost_Click_1(object sender, EventArgs e)
        {
            cost frm_cost = new cost();
            frm_cost.ShowDialog();
        }

        // متد دکمه ایجاد بارنامه جدید
        private void btn_save_Click_1(object sender, EventArgs e)
        {
            transport_in frm_transport_in = new transport_in();
            frm_transport_in.ShowDialog();
        }

        // متد دکمه حذف بارنامه
        private void btn_delete_Click_1(object sender, EventArgs e)
        {
           
            if (dgv_transport.Rows.Count > 0)
            {
                try
                {
                    string Transport_ID = lbl_transport_id.Text;



                    if (FMessegeBox.FarsiMessegeBox.Show("آیا از حذف اطلاعات این بارنامه مطمئن هستید ؟", "تایید حذف اطلاعات", FMessegeBox.FMessegeBoxButtons.YesNo, FMessegeBox.FMessegeBoxIcons.Question) == DialogResult.Yes)
                    {

                        string Query = "DELETE FROM tbl_transport WHERE transport_id=" + Transport_ID;

                        bool result = bll_transport.RunQuery(Query);
                        if (result)
                        {
                            FMessegeBox.FarsiMessegeBox.Show("اطلاعات با موفقيت حذف شد", "پیغام حذف اطلاعات", FMessegeBox.FMessegeBoxButtons.Ok, FMessegeBox.FMessegeBoxIcons.Information);
                        }
                        else
                        {
                            FMessegeBox.FarsiMessegeBox.Show("خطا در حذف اطلاعات.لطفا دوباره سعي نماييد", "خطا در حذف اطلاعات", FMessegeBox.FMessegeBoxButtons.Ok, FMessegeBox.FMessegeBoxIcons.Error) ;
                        }
                        FillDataGrid();
                    }
                }
                catch (Exception)
                {
                    FMessegeBox.FarsiMessegeBox.Show("لطفاً يک رکورد را براي حذف انتخاب کنيد", "خطا در حذف اطلاعات", FMessegeBox.FMessegeBoxButtons.Ok, FMessegeBox.FMessegeBoxIcons.Error) ;
                }
            }
        }

        // متد دکمه تنظیمات
        private void buttonX4_Click(object sender, EventArgs e)
        {
            settings frm_settings = new settings();
            frm_settings.ShowDialog();
        }
        
        // متد دکمه شرکت ها
        private void btn_company_Click_1(object sender, EventArgs e)
        {
            company frm_company = new company();
            frm_company.ShowDialog();
        }

        // متد دکمه شهرها
        private void buttonX2_Click_1(object sender, EventArgs e)
        {
            city frm_city = new city();
            frm_city.ShowDialog();
        }

        // متد دکمه ویرایش بارنامه
        private void buttonX3_Click(object sender, EventArgs e)
        {
            transport_out frm_transport_out = new transport_out();
            frm_transport_out.ShowDialog();
        }

        // متد دکمه خروج از برنامه
        private void btn_back_Click_1(object sender, EventArgs e)
        {
            System.Windows.Forms.Application.Exit();
        }

        // متد تصویر اندیشمندان پارس
        private void reflectionImage1_Click(object sender, EventArgs e)
        {
            about frm_about = new about();
            frm_about.ShowDialog();
        }

        //متد دکمه مشاهده نتیجه - برای فیلتر کردن دیتا گرید
        private void buttonX1_Click_1(object sender, EventArgs e)
        {
            clearAllLabels();

            FilterDatagrid();

            CalculateEveryThings();
        }

        // متد دکمه رادیویی محدوده تاریخ
        private void rdo_date_range_CheckedChanged(object sender, EventArgs e)
        {
            if (rdo_date_range.Checked)
            {
                txt_date_start.Focus();
            }
        }

        // متد فرم کلوزینگ
        private void main_FormClosing(object sender, FormClosingEventArgs e)
        {
           
        }

        /// <summary>
        /// متد ایجاد یک دیتا تیبل برای ارسال به فرم گزارش
        /// </summary>
        /// <returns>DataTable</returns>
        private System.Data.DataTable CreateSortedDatatable()
        {
            System.Data.DataTable dt = new System.Data.DataTable();
            dt.Columns.Add("transport_id");
            dt.Columns.Add("transport_date");
            dt.Columns.Add("transport_number");
            dt.Columns.Add("company_id");
            dt.Columns.Add("company_name");
            dt.Columns.Add("peyment_type");
            dt.Columns.Add("transport_type");
            dt.Columns.Add("transport_total_price");
            dt.Columns.Add("city_id");
            dt.Columns.Add("agency_portion");
            dt.Columns.Add("transport_company_portion");
            dt.Columns.Add("trasport_import_date");
            dt.Columns.Add("transport_weight");
            dt.Columns.Add("transport_price");
            dt.Columns.Add("transport_description");
            dt.Columns.Add("is_city_agency");
            dt.Columns.Add("current_agency_portion_price");
            dt.Columns.Add("transport_current_max_fix_weight");
            dt.Columns.Add("transport_current_base_price");
            dt.Columns.Add("transport_current_addition_price");
            dt.Columns.Add("transport_current_agency_portion");
            
            
            

            foreach (DataGridViewRow row in dgv_transport.Rows)
            {
                DataRow dRow = dt.NewRow();
                foreach (DataGridViewCell cell in row.Cells)
                {
                        dRow[cell.ColumnIndex] = cell.Value;
                }
                dt.Rows.Add(dRow);
            }
            return dt;
        }

        // متد دکمه نسخه چاپی
        private void btn_showreport_Click(object sender, EventArgs e)
        {
            report.all_trasport = lbl_transport_all.Text;
            report.in_trasport = lbl_transport_in_count.Text;
            report.out_trasport = lbl_transport_out_count.Text;
            report.transport_date = lbl_date.Text;
            report.transport_company = lbl_company.Text;
            report.peyment_pre_count = lbl_peyment_pre_count.Text;
            report.peyment_next_count = lbl_peyment_next_count.Text;
            report.transport_weight = lbl_weight.Text;
            report.transport_total_price = lbl_total_price.Text;
            report.transport_debt = sahmetehran.Text;
            report.transport_credit = sahmekish.Text;
            report.transport_remain = mandeh.Text;

            report.ReportDataTable = CreateSortedDatatable();
            report frm_report = new report();
            frm_report.ShowDialog();
        }

       // متد کی داوون فرم برای دکمه اف 3 برای فعال کردن کادر جستجو
        private void main_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode==Keys.F3)
            {
                txt_fast_search.Focus();
            }
            if (e.KeyCode==Keys.Escape)
            {
                this.Close();
            }
        }


        // متد تکست چنج فیلد جستجوی سریع
        private void txt_fast_search_TextChanged(object sender, EventArgs e)
        {
  
        }

        private void btn_back_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void dgv_transport_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            dgv_transport.Columns[10].DefaultCellStyle.Format = "N0";
            dgv_transport.Columns[7].DefaultCellStyle.Format = "N0";
            dgv_transport.Columns[9].DefaultCellStyle.Format = "N0";
        }

        private void chk_import_date_CheckedChanged(object sender, EventArgs e)
        {
         
        }

        private void rdo_import_date_range_CheckedChanged(object sender, EventArgs e)
        {
            if (rdo_import_date_range.Checked==true)
            {
                txt_import_date_start.Focus();
            }
        }

        private void txt_fast_search_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode==Keys.Enter)
            {
                searchOnTransport();
                special_class.setRowNumber(dgv_transport);
            }
        }

        void ExportToExcel()
        {
            try
            {
            saveFileDialog1.Filter = "Execl files (*.xls)|*.xls";
            saveFileDialog1.FilterIndex = 0;
            saveFileDialog1.RestoreDirectory = true;
            saveFileDialog1.Title = " مسیر ذخیره فایل اکسل 2 ";


            string Current_date = PersianDatetime();



            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    System.Threading.Thread.CurrentThread.CurrentCulture =
                    new System.Globalization.CultureInfo("en-US");


                    Microsoft.Office.Interop.Excel.ApplicationClass ExcelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
                    ExcelApp.Application.Workbooks.Add(Type.Missing);
                    ExcelApp.Columns.ColumnWidth = 20;
                   
                            ExcelApp.Cells[1, 1] = dgv_transport.Columns[1].HeaderText;
                            ExcelApp.Cells[1, 2] = dgv_transport.Columns[2].HeaderText;
                            ExcelApp.Cells[1, 3] = dgv_transport.Columns[12].HeaderText;
                            ExcelApp.Cells[1, 4] = dgv_transport.Columns[5].HeaderText;
                            ExcelApp.Cells[1, 5] = dgv_transport.Columns[7].HeaderText;
                            ExcelApp.Cells[1, 6] = dgv_transport.Columns[9].HeaderText;
                            ExcelApp.Cells[1, 7] = dgv_transport.Columns[10].HeaderText;
                 

                    
                        for (int j = 0; j < dgv_transport.Rows.Count; j++)
                        {
                            ExcelApp.Cells[j+2, 1] = dgv_transport.Rows[j].Cells[1].Value.ToString();
                            ExcelApp.Cells[j+2, 2] = dgv_transport.Rows[j].Cells[2].Value.ToString();
                            ExcelApp.Cells[j+2, 3] = dgv_transport.Rows[j].Cells[12].Value.ToString();
                            ExcelApp.Cells[j+2, 4] = dgv_transport.Rows[j].Cells[5].Value.ToString();
                            ExcelApp.Cells[j+2, 5] = dgv_transport.Rows[j].Cells[7].Value.ToString();
                            ExcelApp.Cells[j+2, 6] = dgv_transport.Rows[j].Cells[9].Value.ToString();
                            ExcelApp.Cells[j+2, 7] = dgv_transport.Rows[j].Cells[10].Value.ToString();
                        }
                    

                    ExcelApp.ActiveWorkbook.SaveCopyAs(saveFileDialog1.FileName);
                    ExcelApp.ActiveWorkbook.Saved = true;
                    ExcelApp.Quit();
                    FMessegeBox.FarsiMessegeBox.Show("خروجی اکسل با موفقیت ایجاد شد");
                }
                catch (Exception err)
                {
                    MessageBox.Show(err.ToString());
                }
            }
            }
            catch (Exception)
            {
                FMessegeBox.FarsiMessegeBox.Show("حجم رکوردها برای تبدیل بالاست . برای 2 اکسل حجم رکوردها را متعادل کنید");
            }
        }

        private void btn_excel_Click(object sender, EventArgs e)
        {
            ExportToExcel();
        }

      
    }
}
