using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using Transport.BLL;


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

        public static string company_max_fix_weight { get; set; }
        public static string company_base_price { get; set; }
        public static string company_addition_price { get; set; }
        public static string company_agency_portion { get; set; }


        #region متغیرهای لازم برای دریافت اطلاعات ویرایش بارنامه
        
        public static bool Is_Action_Edit { get; set; }
        private string locally_transport_id = "";
        public static string transport_id { get; set; }
        public static string transport_type { get; set; }
        public static string peyment_type { get; set; }
        public static string company_id { get; set; }
        public static string city_id { get; set; }
        public static string transport_number { get; set; }
        public static string transport_date { get; set; }
        public static string transport_weight { get; set; }
        public static string transport_total_price { get; set; }
        public static string transport_price { get; set; }
        public static string agency_portion { get; set; }
        public static string description { get; set; }
        public static string is_city_agency { get; set; }
        
        #endregion

        #region چند متغیر استاتیک برای نگهداری مقادیر تنظیمات قیمت ها و مسیر ذخیره فایل های پشتیبان


        private static int transport_range = 0;
        private static string Price10 = "";
        private static string Price1 = "";
        private static int city_agency_portion=0;

        #endregion


        // محاسبه سهم نمایندگی
        private void calculate_agency_portion()
        {
            if (txt_transport_weight.Text.Length>0)
            {
                CalculateAgencyPortion();
            }
        }

        //متد محاسبه لحظه ای سهم نمایندگی
        private void CalculateAgencyPortion()
        {
            if (txt_transport_weight.Text != string.Empty)
            {

                if (rdo_transport_out.Checked==true)
                {
                    int weight = 0;
                    weight = Convert.ToInt32(txt_transport_weight.Text);
                    string total_price_holder = txt_transport_total_price.TextValue.ToString();
                    int total_price = Convert.ToInt32(total_price_holder);

                    if (weight <= transport_range)
                    {
                        txt_agency_portion.Text =(total_price-Convert.ToInt32( Price10)).ToString();
                    }
                    else
                    {
                        int weightNumber = Convert.ToInt32(txt_transport_weight.Text);
                        int addedWeight = weightNumber - transport_range;
                        int Price1Number = Convert.ToInt32(Price1);
                        txt_agency_portion.Text = (total_price-(Convert.ToInt32(Price10) + (addedWeight * Price1Number))).ToString();
                    }   
                }
                else
                {
                    int weight = 0;
                    weight = Convert.ToInt32(txt_transport_weight.Text);

                    if (weight <= transport_range)
                    {
                        txt_agency_portion.Text = Price10;
                    }
                    else
                    {
                        int weightNumber = Convert.ToInt32(txt_transport_weight.Text);
                        int addedWeight = weightNumber - transport_range;
                        int Price1Number = Convert.ToInt32(Price1);
                        txt_agency_portion.Text = (Convert.ToInt32(Price10) + (addedWeight * Price1Number)).ToString();
                    }   
                }

                 
                
            }
        }

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

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

        // متد تنظیم دکمه های رادیویی بر اساس تنظیمات برنامه
        public void SetRadioOptions()
        {
            System.Data.DataTable settingsDT = bll_settings.Select_App_Settings();
            if (settingsDT.Rows.Count > 0)
            {
                string transport_type = settingsDT.Rows[0].ItemArray[1].ToString();
                string peyment_type = settingsDT.Rows[0].ItemArray[2].ToString();
                string clear_fields = settingsDT.Rows[0].ItemArray[3].ToString();

                string transport_price_10 = settingsDT.Rows[0].ItemArray[4].ToString();
                string transport_price_1 = settingsDT.Rows[0].ItemArray[5].ToString();
                string backup_Path = settingsDT.Rows[0].ItemArray[6].ToString();

                if (transport_type == "0")
                {
                    rdo_transport_in.Checked = true;
                }
                else
                {
                    rdo_transport_out.Checked = true;
                }

                if (peyment_type == "0")
                {
                    rdo_peyment_pre.Checked = true;
                }
                else
                {
                    rdo_peyment_next.Checked = true;
                }
            }
        }

        // متد تنظیم قیمت ها
        public void SetPrices()
        {
            System.Data.DataTable settingsDT = bll_settings.Select_App_Settings();

            if (settingsDT.Rows.Count > 0)
            {
                
                Price10= settingsDT.Rows[0].ItemArray[4].ToString();
                Price1= settingsDT.Rows[0].ItemArray[5].ToString();
                transport_range =int.Parse( settingsDT.Rows[0].ItemArray[7].ToString()) ;
                city_agency_portion = int.Parse(settingsDT.Rows[0].ItemArray[8].ToString());
            }
        }

        // متد ارزیابی پاک شدن فیلدها بعداز ذخیره یا ویرایش اطلاعات
        public bool  IsClearNeeded()
        {
            
            System.Data.DataTable settingsDT = bll_settings.Select_App_Settings();
            bool ClearResult = false;

            if (settingsDT.Rows.Count > 0)
            {
                string clear_fields = settingsDT.Rows[0].ItemArray[1].ToString();
                
                if (clear_fields=="0")
                {
                    return true;
                }
               
            }

            return ClearResult;
        }

        // متد پاک کردن فیلد ها
        private void ClearFileds()
        {
            txt_transport_number.Text = string.Empty;
            //txt_transport_date.Text = "13__/__/__";
            txt_transport_weight.Text = string.Empty;
            txt_transport_total_price.Text = string.Empty;
            txt_transport_price.Text = string.Empty;
            txt_agency_portion.Text = string.Empty;
            txt_description.Text = string.Empty;
        }

        // متد پرکردن فیلدها با اطلاعات ارسال شده از فرم لیست بارنامه - فرم اصلی برنامه
        public void Fill_Fields_With_Properties()
        {
            locally_transport_id = transport_id;
            
            if (transport_type == "1")
            {
                rdo_transport_in.Checked = true;
            }
            else
            {
                rdo_transport_out.Checked = true;
            }
            
            if (peyment_type=="1")
            {
                rdo_peyment_pre.Checked = true;
            }
            else
            {
                rdo_peyment_next.Checked = true;
            }

            cmb_company.SelectedValue = Convert.ToInt32(company_id);
            txt_transport_number.Text = transport_number;
            txt_transport_date.Text = transport_date;
            txt_transport_weight.Text = transport_weight;
            txt_transport_total_price.Text = transport_total_price;
            txt_transport_price.Text = transport_price;
            txt_agency_portion.Text = agency_portion;
            txt_description.Text = description;



        }
        
        // متد بارگذاری فرم ویرایش بارنامه
        private void edit_trasport_Load(object sender, EventArgs e)
        {
            SetPrices();

            if (Is_Action_Edit)
            {
                FillCompanyComboBox();
                FillCityComboBox();
                Fill_Fields_With_Properties();    
                btn_save.Text = "ثبت تغییرات";
                cmb_company.SelectedValue = company_id;
                cmb_city.SelectedValue = city_id;
            }
            else
            {
                SetRadioOptions();
                FillCompanyComboBox();
                FillCityComboBox();
                btn_save.Text = "ذخیره";
                rdo_transport_in.Focus();
            }
            
            cmb_company.Focus();
            
            if (is_city_agency == "1")
            {
                chk_city_portion.Checked = true;
            }
            else
            {
                chk_city_portion.Checked = false;
            }
          
        }

        // متد دکمه ذخیره یا ویرایش بارنامه      
        private void btn_save_Click(object sender, EventArgs e)
        {
          
            if (btn_save.Text=="ذخیره")
	        {
                bool date_checker = txt_transport_date.Text.Contains("_");

                if (cmb_company.Items.Count < 1)
                {
                    lblMessage.Text = "لطفاً یک شرکت انتخاب کنید";
                    lblMessage.ForeColor = Color.Red;
                }
                else if (cmb_city.Items.Count < 1)
                {
                    lblMessage.Text = "لطفاً یک شهر انتخاب کنید";
                    lblMessage.ForeColor = Color.Red;
                }
                else if (date_checker)
                {
                    lblMessage.ForeColor = Color.Red;
                    lblMessage.Text = "لطفاً تاریخ را صحیح وارد کنید";
                }
                else if (txt_transport_number.Text != "" && txt_transport_weight.Text != "" && txt_transport_total_price.Text != "" && txt_agency_portion.Text != "")
                {

                    //تعریف متغیرهای مورد نیاز برای نگهداری فیلدهای فرم بارنامه
                    string transport_type = "";
                    string peyment_type = "";
                    string company_id = "";
                    string city_id = "";
                    string transport_number = "";
                    string transport_date = "";
                    string transport_weight = "";
                    string transport_total_price = "";
                    string transport_price = "";
                    string agency_portion = "";
                    string description = "";
                    string is_city_agency = "0";
                    string current_agency_portion_price = "";
                    //تنظیم نوع بارنامه که 1 است یا 2
                    if (rdo_transport_in.Checked)
                    {
                        transport_type = "1";
                    }
                    else
                    {
                        transport_type = "2";
                    }


                    //تنظیم نوع پرداخت - 1 یا 2
                    if (rdo_peyment_pre.Checked)
                    {
                        peyment_type = "1";
                    }
                    else
                    {
                        peyment_type = "2";
                    }

                    if (chk_city_portion.Checked)
                    {
                        is_city_agency = "1";
                        current_agency_portion_price = city_agency_portion.ToString();
                    }
                    else
                    {
                        is_city_agency = "0";
                        current_agency_portion_price = "0";
                    }

                    //مقداردهی شماره شرکت
                    company_id = cmb_company.SelectedValue.ToString();

                    //مقداردهی شماره شهر
                    city_id = cmb_city.SelectedValue.ToString();

                    // مقداردهی شماره بارنامه
                    transport_number = txt_transport_number.Text;

                    //مقداردهی تاریخ بارنامه
                    transport_date = txt_transport_date.Text;

                    //مقداردهی ورن بارنامه
                    transport_weight = txt_transport_weight.Text;

                    //مقداردهی مبلغ کل بارنامه
                    string transport_total_price_holder = txt_transport_total_price.TextValue.ToString();
                    transport_total_price = transport_total_price_holder;

                    // مقداردهی مبلغ کرایه حمل
                    string transport_price_holder = txt_transport_price.TextValue.ToString();
                    transport_price = transport_price_holder;

                    //مقداردهی سهم نماینده
                    string agency_portion_holder = txt_agency_portion.TextValue.ToString();
                    agency_portion = agency_portion_holder;

                    //مقداردهی توضیحات
                    description = txt_description.Text;

                    // ایجاد رشته پرس و جو برای ذخیره اطلاعات بارنامه
                    string SQLQuery = string.Format("INSERT INTO tbl_transport (transport_type,peyment_type,company_id,city_id,transport_number,transport_date,transport_weight,transport_total_price,transport_price,agency_portion,transport_description,is_city_agency,current_agency_portion_price) VALUES('{0}','{1}',{2},{3},{4},'{5}','{6}',{7},{8},{9},'{10}','{11}','{12}')", transport_type, peyment_type, company_id, city_id, transport_number, transport_date, transport_weight, transport_total_price, transport_price, agency_portion, description, is_city_agency,current_agency_portion_price);

                    //MessageBoxEx.Show(SQLQuery);
                    //تعریف یک متغیر برای نگهداری نتیجه عملیات ذخیره سازی
                    bool QueryResult = false;
                    QueryResult = bll_transport.RunQuery(SQLQuery);

                    if (QueryResult)
                    {
                        lblMessage.ForeColor = Color.Green;
                        lblMessage.Text = "ذخیره سازی اطلاعات با موفقیت انجام شد";
                        if (IsClearNeeded())
                        {
                            ClearFileds();
                        }
                        txt_transport_number.Focus();
                    }
                    else
                    {
                        lblMessage.ForeColor = Color.Red;
                        lblMessage.Text = "خطا در ذخیره سازی اطلاعات";
                    }
                }
                else
                {
                    lblMessage.Text = "لطفاً اطلاعات الزامی را پر کنید";
                    lblMessage.ForeColor = Color.Red;
                }  
	        }
            else
            {

            bool date_checker = txt_transport_date.Text.Contains("_");

            if (cmb_company.Items.Count < 1)
            {
                lblMessage.Text = "لطفاً یک شرکت انتخاب کنید";
                lblMessage.ForeColor = Color.Red;
            }
            else if (cmb_city.Items.Count < 1)
            {
                lblMessage.Text = "لطفاً یک شهر انتخاب کنید";
                lblMessage.ForeColor = Color.Red;
            }
            else if (date_checker)
            {
                lblMessage.ForeColor = Color.Red;
                lblMessage.Text = "لطفاً تاریخ را صحیح وارد کنید";
            }
            else if (txt_transport_number.Text != "" && txt_transport_weight.Text != "" && txt_transport_total_price.Text != "" &&  txt_agency_portion.Text != "")
            {  
            
            //تعریف متغیرهای مورد نیاز برای نگهداری فیلدهای فرم بارنامه
                string transport_type = "";
                string peyment_type = "";
                string company_id = "";
                string transport_number = "";
                string transport_date = "";
                string transport_weight = "";
                string transport_total_price = "";
                string transport_price = "";
                string agency_portion = "";
                string description = "";

                //تنظیم نوع بارنامه که 1 است یا 2
                if (rdo_transport_in.Checked)
                {
                    transport_type = "1";
                }
                else
                {
                    transport_type = "2";
                }


                //تنظیم نوع پرداخت - 1 یا 2
                if (rdo_peyment_pre.Checked)
                {
                    peyment_type = "1";
                }
                else
                {
                    peyment_type = "2";
                }

                //مقداردهی شماره شرکت
                company_id = cmb_company.SelectedValue.ToString();
                

                // مقداردهی شماره بارنامه
                transport_number = txt_transport_number.Text;
                
                //مقداردهی تاریخ بارنامه
                transport_date = txt_transport_date.Text;

                //مقداردهی ورن بارنامه
                transport_weight = txt_transport_weight.Text;

                //مقداردهی مبلغ کل بارنامه
                string transport_total_price_holder = txt_transport_total_price.TextValue.ToString();
                transport_total_price = transport_total_price_holder;

                // مقداردهی مبلغ کرایه حمل
                string transport_price_holder = txt_transport_price.TextValue.ToString();
                transport_price = transport_price_holder;

                //مقداردهی سهم نماینده
                string agency_portion_holder = txt_agency_portion.TextValue.ToString();
                agency_portion = agency_portion_holder;

                //مقداردهی توضیحات
                description = txt_description.Text;

                // ایجاد رشته پرس و جو برای ذخیره اطلاعات بارنامه
                string SQLQuery = string.Format("UPDATE tbl_transport SET transport_type='{0}',peyment_type='{1}',company_id={2},transport_number={3},transport_date='{4}',transport_weight='{5}',transport_total_price={6},transport_price={7},agency_portion={8},transport_description='{9}' WHERE transport_id={10}", transport_type, peyment_type, company_id, transport_number, transport_date, transport_weight, transport_total_price, transport_price, agency_portion, description,locally_transport_id);

                //MessageBoxEx.Show(SQLQuery);

                //تعریف یک متغیر برای نگهداری نتیجه عملیات ذخیره سازی
                bool QueryResult = false;
                QueryResult= bll_transport.RunQuery(SQLQuery);

                if (QueryResult)
                {
                    lblMessage.ForeColor = Color.Green;
                    lblMessage.Text = "ذخیره سازی اطلاعات با موفقیت انجام شد";
                    txt_transport_number.Focus();
                }
                else
                {
                    lblMessage.ForeColor = Color.Red;
                    lblMessage.Text = "خطا در ذخیره سازی اطلاعات";
                }
            }
            else
            {
                lblMessage.Text = "لطفاً اطلاعات الزامی را پر کنید";
                lblMessage.ForeColor = Color.Red;
            }
        }
        }

        // متد بستن فرم ویرایش بارنامه
        private void btn_back_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        // متد رویداد کی پرس فیلد وزن بارنامه
        private void txt_transport_weight_KeyPress_1(object sender, KeyPressEventArgs e)
        {
            if (!(char.IsNumber(e.KeyChar)) && !(char.IsControl(e.KeyChar)) || (txt_transport_weight.Text.Length == 0 && (Keys)e.KeyChar == Keys.D0))
            {
                e.Handled = true;
            }
            
        }

        // متد رویداد تکست چنج فیلد وزن بارنامه
        private void txt_transport_weight_TextChanged(object sender, EventArgs e)
        {
            if (txt_transport_total_price.Text.Length>0)
            {
                if (txt_transport_weight.Text.Trim().Length > 0 && chk_city_portion.Checked == false)
                {
                    CalculateAgencyPortion();
                }
            }
            else
            {
                txt_transport_weight.Text = string.Empty;
                txt_transport_total_price.Focus();
            }
            
        }

        // متد رویداد کی داوون فیلد وزن بارنامه
        private void txt_transport_weight_KeyDown_1(object sender, KeyEventArgs e)
        {
            if (e.KeyCode==Keys.Enter)
            {
                txt_agency_portion.Focus();
            }
        }

        // متد رویداد تغییر دکمه رادیویی بارنامه 2
        private void rdo_transport_out_CheckedChanged(object sender, EventArgs e)
        {
            if (rdo_transport_out.Checked)
            {
                chk_city_portion.Enabled = true;
                calculate_agency_portion();
            }
            else
            {
                chk_city_portion.Checked = false;
                chk_city_portion.Enabled = false;
            }
        }

        // متد رویداد تغییر دکمه رادیویی سهم نمایندگی شهرستان
        private void chk_city_portion_CheckedChanged(object sender, EventArgs e)
        {
            if (chk_city_portion.Checked)
            {
                if (txt_transport_total_price.Text.Trim()=="")
                {
                    txt_transport_total_price.Focus();
                    chk_city_portion.Checked = false;
                }
                else
                {
                    string total_price_holder = txt_transport_total_price.TextValue.ToString();
                    int total_price = Convert.ToInt32(total_price_holder);
                    int agency_portion = total_price - city_agency_portion;
                    txt_agency_portion.Text = agency_portion.ToString();
                }
                
            }
            else
            {
                if (txt_transport_weight.Text.Length>0)
                {
                    CalculateAgencyPortion();    
                }
                else
                {
                    txt_agency_portion.Text = "0";
                }
                
            }

        }

        // متد رویداد تغییر دکمه رادیویی بارنامه 1
        private void rdo_transport_in_CheckedChanged(object sender, EventArgs e)
        {
            if (rdo_transport_in.Checked==true)
            {
                calculate_agency_portion();
            }
        }

        private void cmb_company_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmb_company.Items.Count>0)
            {
                
            }
        }
    }
}
