using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
using System.Reflection;
using DevExpress.XtraReports.Native;
using DevExpress.XtraPrinting;
using DevExpress.XtraReports.UI;
using DevExpress.XtraEditors;
using System.Drawing.Printing;

namespace LLNet.Tienda.MainForms.Forms
{
	public partial class frmIdiomas : LLNet.GUI.FormBases.frmGridToolbarBase
	{
		#region Declaraciones

        private DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit rep_YesNo;
        private DevExpress.XtraEditors.Repository.RepositoryItemLookUpEdit rep_TipoReporte;
		private LLNet.Controls.LLRepAdvancedList rep_Referencia;
		private System.Data.DataView dv_LovRef;
		private DevExpress.XtraBars.Bar bar1;
        private DevExpress.XtraBars.BarButtonItem btnEdit;
		private string m_strDefPrinter = "";
		#endregion

		#region Constantes y Variables
            //public static string repPath = "{0}\\Reports\\";
            //public static string repPathBase = repPath + "rep_{1}.repx";
            //public static string repDataPath = "{0}\\Reports.data\\";
            //public static string repBaseData = repDataPath + "dat_{1}.xml";
	    private DevExpress.XtraEditors.ProgressBarControl  progressBar;
        //private DevExpress.XtraReports.UI.XtraReport objRep = null;
        //private bool bAdding = false;
		#endregion

		#region Constructor

        public frmIdiomas()
		{
			// This call is required by the Windows Form Designer.
			InitializeComponent();
			//BindingContext[dataViewToolbar].PositionChanged +=new EventHandler(frmReportes_PositionChanged);
			//BuildPrinterTable();

			// TODO: Add any initialization after the InitializeComponent call

            GUI.CApp.TraducirForm(this, dbToolbar);
		}
        
		#endregion

		#region Métodos sobreescritos
			public override void Init(object[] pArgs)
			{
                /*this.dsDiccionario1.EnforceConstraints = false;
				this.dbToolbar.btnAdd.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;

                Utils.QueryParams qP = new LLNet.Utils.QueryParams();
                qP.AddReplaceParam("idioma", GUI.CApp.idioma);
                string codigoIdioma = GUI.CApp.bll.GetSingleValue("CodigoIdioma", qP, "Idioma").ToString();

                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("IDIOMA", "1");

                dsDiccionario1.SFA_V_TRADUCCION.Clear();

                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsDiccionario1.GetType(), dsDiccionario1.SFA_V_TRADUCCION.TableName, qp, "Diccionario"), dsDiccionario1);

                this.dataViewToolbar.Table = dsDiccionario1.SFA_V_TRADUCCION;
                this.dbGrid.DataSource = this.dataViewToolbar;

                this.QueryParams = qp;
                base.Init(pArgs);*/

                this.dsTraduccion1.EnforceConstraints = false;
                this.dbToolbar.btnAdd.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;

                Utils.QueryParams qP = new LLNet.Utils.QueryParams();
                qP.AddReplaceParam("idioma", GUI.CApp.idioma);
                string codigoIdioma = GUI.CApp.bll.GetSingleValue("CodigoIdioma", qP, "Idioma").ToString();

                //Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                //qp.AddReplaceParam("IDIOMA", "1");

                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddRecursiveConditionParam(LLNet.Utils.QueryParams.PredefinedTags.AllToolbarsTag, "AND", "IDIOMA", "=", "'"+ codigoIdioma +"'");

                dsTraduccion1.SFA_V_TRADUCCION.Clear();

                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsTraduccion1.GetType(), dsTraduccion1.SFA_V_TRADUCCION.TableName, qp,"Diccionario"), dsTraduccion1);

                this.dataViewToolbar.Table = dsTraduccion1.SFA_V_TRADUCCION;
                this.dbGrid.DataSource = this.dataViewToolbar;

                this.QueryParams = qp;
                base.Init(pArgs);
			}

		#endregion
       
        /*
		#region Operaciones de Archivos

			private string RepName(string RepCode)
			{
				string strFilename = String.Format(repPathBase, GUI.CApp.ExeDir, RepCode );
				return strFilename;
			}

			private string DataName(string RepBase)
			{
				string strFilename = String.Format(repBaseData, GUI.CApp.ExeDir, RepBase );
				return strFilename;
			}

			private void RepDelete(string RepCode)
			{
				string strFileName = RepName(RepCode);
				if ( System.IO.File.Exists(strFileName) )
					System.IO.File.Delete(strFileName);
			}

			private void RepRename(string OldRepCode, string NewRepCode)
			{
			//-- Obtenemos los nombres de los archivos
				string strOldFileName = RepName(OldRepCode);
				string strNewFileName = RepName(NewRepCode);
			//-- Validamos la existencia
				if ( System.IO.File.Exists(strOldFileName) )
					System.IO.File.Move( strOldFileName, strNewFileName );
			}

			private void RepDuplicate(string SourceRepCode, string TargetRepCode)
			{
			//-- Obtenemos los nombres de los archivos
				string strSourceFileName = RepName( SourceRepCode );
				string strTargetFileName = RepName( TargetRepCode );
			//-- Validamos la existencia
				if ( System.IO.File.Exists(strSourceFileName) )
				{
					RepDelete( TargetRepCode );
					System.IO.File.Copy( strSourceFileName, strTargetFileName, true );
				}
			}

			private void RepCreate(string RepCode, string RepBase, string Referencia)
			{
			//-- Inicializacion de variables
				string strFilename = RepName( RepCode );
			//-- Validamos la referencia
				if (Referencia.Length > 0)
				{
					Utils.QueryParams qry = new LLNet.Utils.QueryParams();
					qry.AddReplaceParam("IDREPORTE", Referencia);
					qry.AddReplaceParam("TABLA", "WMS_V_POSDOCTOS");
					string strReference = GUI.CApp.bll.GetSingleValue("CodigoReporte", qry, "Reports").ToString();
					RepLoad(strReference, RepBase);
				}
				else
				{
					Reports.BaseReports.XRBase objRepBase = new LLNet.Reports.BaseReports.XRBase(RepBase);
					if ( !Utils.Helpers.IsNull( objRep ) )	objRep.Dispose();
					objRep = objRepBase.Report;
				}
			//-- Creamos la copia del reporte
				objRep.SaveLayout( strFilename );
			}

			private void RepLoad(string RepCode, string RepBase)
			{
				Reports.BaseReports.XRBase objRepBase = new LLNet.Reports.BaseReports.XRBase(RepBase);
				if ( !Utils.Helpers.IsNull( objRep ) )	objRep.Dispose();
				objRep = objRepBase.Report;
				objRep.Name = RepCode;
				string strFilename = RepName( RepCode );
				if ( System.IO.File.Exists(strFilename) )
					objRep.LoadLayout ( strFilename );
			}
			private void RepPropertiesCreate (string RepCode, string Nombre, string PreImprimir)
			{
				Model.Reports.DsRepBaseDoctos.WMS_V_POSDOCTOSRow  rowp= this.dsRepBaseDoctos1.WMS_V_POSDOCTOS.NewWMS_V_POSDOCTOSRow();
				rowp.CODIGO = GUI.CApp.bll.GetSingleValue("CodigoRandomRep",null,"Reports").ToString();
				rowp.ICONO = 0;
				rowp.NOMBRE = Nombre;
				rowp.DESCRIPCION = "Copia de " + Nombre;
				rowp.MENU = 0;
				rowp.NO_COPIAS = 1;
				rowp.FORMATO = System.Convert.ToDecimal(RepCode);
				rowp.SetTIPONull ();
				rowp.SetIMPRESORANull();
				rowp.PREIMPRESION = PreImprimir;
				rowp.RV_DOMAIN = "DOCUMENTOS POS";
				this.dsRepBaseDoctos1.WMS_V_POSDOCTOS.Rows.Add(rowp);

			}

		#endregion     

		#region Métodos privados

			/// <summary>
			/// Configura la lista de los reportes por referencia
			/// </summary>
			private void setAdvancedLists()
			{
			//-- Declaracion de variables
				Utils.QueryParams qr = new LLNet.Utils.QueryParams();

				try
				{
					if ( dbToolbar.CManager.Count > 0)
					{
					//-- Obtenemos el registro actual
						System.Data.DataRowView dv = (System.Data.DataRowView)dbToolbar.CManager.Current;
						System.Data.DataRow dr = dv.Row;
					//-- Cargamos el reporte actual
						string strTipoReporte = dr["TIPO_REPORTE"].ToString();
						string strIDReporte = dr["IDREPORTE"].ToString();
					//-- Establecemos los parametros
						qr.AddRecursiveConditionParam(Utils.QueryParams.PredefinedTags.AllToolbarsTag, "AND", "TIPO_REPORTE", "=", Utils.Helpers.scm(strTipoReporte) );
						qr.AddRecursiveConditionParam(Utils.QueryParams.PredefinedTags.AllToolbarsTag, "AND", "IDREPORTE", "<>", strIDReporte );
					}
				}
				catch
				{
				}
				finally
				{
				//-- Asignamos los parametros
					this.rep_Referencia.QueryParams = qr;
				}
			}

			private string GetRepCode(string idRep)
			{
				Utils.QueryParams qry = new LLNet.Utils.QueryParams();
				qry.AddReplaceParam("IDREPORTE", idRep);
				qry.AddReplaceParam("TABLA", "WMS_V_POSDOCTOS");
				string strRepCode = Utils.Helpers.Nvl( GUI.CApp.bll.GetSingleValue("CodigoReporte", qry, "Reports"), "" ).ToString();
				return strRepCode;
			}

		#endregion	

		#region Eventos del Grid

			private void gridView1_ShownEditor(object sender, System.EventArgs e)
			{
			//-- Continuar solo si es una celda que contenga como ColumnEdit un LLRepAdvancedList
				if (gridView1.FocusedColumn.ColumnEdit is Controls.LLRepAdvancedList)
				{
					//-- Si no se ha hecho databinding
					if (gridView1.ActiveEditor.DataBindings.Count == 0)
					{
						//-- Crear databinding del editor con la lista de valores
						switch (gridView1.FocusedColumn.Name)
						{
							case "colREFERENCIA" :
								gridView1.ActiveEditor.DataBindings.Add(new System.Windows.Forms.Binding("EditValue", this.dv_LovRef, "CODIGO"));
								gridView1.ActiveEditor.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.dv_LovRef, "IDREPORTE"));
								break;

							default:
								break;
						}
					}
					gridView1.ActiveEditor.EditValue = gridView1.FocusedValue;
				}
			}

			private void gridView1_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
			{
			//-- Declaracion de variables
				System.Data.DataRowView dr = (System.Data.DataRowView)e.Row;
				Utils.QueryParams QueryParams = new LLNet.Utils.QueryParams();
				long v_ocurrencias = 0;
			//-- Verificando codigo alterno
				if (dr["CODIGO"].ToString().Length == 0)
				{
					dr["CODIGO"] = System.Guid.NewGuid().ToString("N");
				}			
			//-- Verificando nombre
				if (dr["NOMBRE"].ToString().Length == 0)
				{
					e.ErrorText = "El nombre del reporte es obligatorio!";
					e.Valid = false;
					return;
				}
			//-- Verificando descripción
				if (dr["DESCRIPCION"].ToString().Length == 0)
				{
					e.ErrorText = "La descripción del reporte es obligatoria!";
					e.Valid = false;
					return;
				}
			//-- Validando codigo alterno
				QueryParams.AddReplaceParam("CODIGO",dr["CODIGO"].ToString());
				QueryParams.AddReplaceParam("IDREPORTE",dr["IDREPORTE"].ToString());
				v_ocurrencias = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("ReporteAlterno",QueryParams,"Reports"));
				if (v_ocurrencias > 0)
				{
					e.ErrorText = "Código ya existente! " + dr["CODIGO"].ToString();
					e.Valid = false;
                    bAdding = false;
				}
			//--Ingresamos las Propiedades del Reporte (cg_ref_codes)
				if (bAdding)
				RepPropertiesCreate(dr["IDREPORTE"].ToString(),dr["CODIGO"].ToString(),"0");
				bAdding = false;
			}

			private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
			{
				bAdding = true;
				gridView1.SetRowCellValue(e.RowHandle, this.colIDREPORTE, GUI.CApp.bll.GetSingleValue("NextReporte","Reports"));
				gridView1.SetRowCellValue(e.RowHandle, this.colTIPO_REPORTE, "XRFacturas");
				gridView1.SetRowCellValue(e.RowHandle, this.colMODULO, "TDA");
			}
        			private void rep_Referencia_BeforeButtonClick()
			{
				setAdvancedLists();
			}

			private void rep_Referencia_AfterButtonClick()
			{
				try 
				{
					if (rep_Referencia.DlgAdvancedList.DialogResult == DialogResult.OK)
					{
					//-- Obtenemos la fila seleccionada
						System.Data.DataRowView dv = (System.Data.DataRowView)this.rep_Referencia.DlgAdvancedList.BindingContext[this.dv_LovRef].Current;
						System.Data.DataRow dr = dv.Row;
					//-- Establecemos los valores
						gridView1.SetRowCellValue(gridView1.FocusedRowHandle, this.colREFERENCIA, dr["CODIGO"]);
						gridView1.SetRowCellValue(gridView1.FocusedRowHandle, this.colIDREFERENCIA, dr["IDREPORTE"]);
					}
				}
				catch
				{
					gridView1.SetRowCellValue(gridView1.FocusedRowHandle, this.colIDREFERENCIA, System.DBNull.Value);
					gridView1.SetRowCellValue(gridView1.FocusedRowHandle, this.colREFERENCIA, System.DBNull.Value);
				}
			}

			private void gridView1_RowUpdated(object sender, DevExpress.XtraGrid.Views.Base.RowObjectEventArgs e)
			{
				try
				{
				//-- Obtenemos la fila que actualmente se está eliminando
					System.Data.DataRowView dv = (System.Data.DataRowView)e.Row;
					System.Data.DataRow dr = dv.Row;
				//-- Procedemos según el caso
					switch ( dr.RowState )
					{
						case DataRowState.Added:
							InsertReport(dr);
							break;

						case DataRowState.Modified:
							SaveReport();
							break;

						default:
							break;
					}
				//-- Cambiamos el flag
					bAdding = false;
				}
				catch
				{
				}
			}

			private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
			{
			//-- Validaciones iniciales
				try
				{
					if ( bAdding ) return;
					if ( e.Column.UnboundType != DevExpress.Data.UnboundColumnType.Bound ) return;
					if ( e.Column.FieldName == "REFERENCIA" ) return;
				//-- Obtenemos la fila que actualmente se está actualizando
					System.Data.DataRowView dv = (System.Data.DataRowView)dbToolbar.CManager.Current;
					System.Data.DataRow dr = dv.Row;
					bool bUpdate = true;
				//-- Procedemos
					if ( (dr.RowState == DataRowState.Modified) || (dr.RowState == DataRowState.Unchanged) ) 
					{
						//-- Procedemos según sea el caso
						switch(	e.Column.FieldName.ToUpper() )
						{
							case "TIPO_REPORTE":
								bUpdate = UpdateReportType(dr);
								break;

							case "IDREFERENCIA":
							//-- Actualizamos las referencias
								bUpdate = UpdateReportReference(dr);
								break;

							case "CODIGO":
								//-- Obtenemos los valores
								string strOldRepCode = dr["CODIGO", DataRowVersion.Original ].ToString();
								string strNewRepCode = dr["CODIGO"].ToString();
								RepRename( strOldRepCode, strNewRepCode );
								break;

							default:
								break;
						}
						//-- Guardamos los cambios
						if ( bUpdate )
						{
							dr.EndEdit();
							dr.BeginEdit();
							SaveReport(false);
						}
					}
				}
				catch
				{
				}
			}

		#endregion

		#region Eventos del Toolbar

			private void dbToolbar_OnDeleting(ref bool cancel)
			{
				//-- Obtenemos la fila que actualmente se está eliminando
				System.Data.DataRowView dv = (System.Data.DataRowView)dbToolbar.CManager.Current;
				System.Data.DataRow dr = dv.Row;
				string strMessage = "No se puede eliminar un reporte del sistema {0} !";
				string strConfirm = "¿Desea eliminar el reporte {0} permanentemente?";
				//-- Validamos que no sea del sistema
				if ( Utils.Helpers.Nvl( dr["SISTEMA"], "" ).ToString() == "X" )
				{
					cancel = true;
					XtraMessageBox.Show( String.Format(strMessage, dr["CODIGO"]) , this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation ); 
				}
				else
				{
					DialogResult dlg;
					dlg = XtraMessageBox.Show( String.Format(strConfirm, dr["CODIGO"]) , this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation ); 
					if ( dlg == DialogResult.Yes )
						RepDelete( dr["CODIGO"].ToString() );
					else
						cancel = true;
				}
			}

			private void dbToolbar_OnDeleted(DevExpress.XtraBars.BarItem buttonClicked)
			{
				SaveReport();
			}
            void dbToolbar_OnUpdating(ref bool cancel)
            {
                vGridControl1.PostEditor();
                vGridControl1.UpdateFocusedRecord();
                vGridControl1.FocusFirst();
            }

		#endregion

		#region Eventos de Manejo de Registros

			private bool InsertReport(DataRow dr)
			{
				bool bResult = true;
				try
				{
					RepCreate( dr["CODIGO"].ToString(), dr["TIPO_REPORTE"].ToString(), Utils.Helpers.Nvl( dr["IDREFERENCIA"], "" ).ToString() );
					bResult = SaveReport();
				}
				catch
				{
					bResult = false;
				}
				return bResult;
			}

			private bool UpdateReportReference(DataRow dr)
			{
			//-- Declaracion de variables
				DialogResult r;
				string strMsg = "";
				string strOldTemplate = "";
				string strNewTemplate = "";
				object descOldTemplate = System.DBNull.Value;
				object descNewTemplate = System.DBNull.Value;
				bool bResult = true;

				try
				{
				//-- Obtenemos las referencias
					strOldTemplate = Utils.Helpers.Nvl( dr["IDREFERENCIA", DataRowVersion.Original], "").ToString();
					strNewTemplate = Utils.Helpers.Nvl( dr["IDREFERENCIA"], "").ToString();
				//-- Validaciones iniciales
					if (strOldTemplate == strNewTemplate)
						return false;
				//-- Validamos que el nuevo template exista
					if (strNewTemplate.Length > 0)
					{
					//-- Procedemos según el caso
						if (strOldTemplate.Length == 0)	//-- No teniamos referencia
						{
							descNewTemplate = GetRepCode( dr["IDREFERENCIA"].ToString() );
							strMsg = "¿Desea cambiar al template {0}?\nRecuerde perderá todos sus cambios.";
							strMsg = String.Format(strMsg, descNewTemplate);
						}
						else	//-- Si teniamos referencia
						{
							descOldTemplate = GetRepCode( dr["IDREFERENCIA", DataRowVersion.Original].ToString() );
							descNewTemplate = GetRepCode( dr["IDREFERENCIA"].ToString() );
							strMsg = "¿Desea cambiar el template de {0} a {1}?\nRecuerde perderá todos sus cambios.";
							strMsg = String.Format(strMsg, descOldTemplate, descNewTemplate);
						}
					//-- Preguntamos al usuario
						r = XtraMessageBox.Show( strMsg, this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Hand ); 
					//-- Procedemos según el caso
						if ( r == DialogResult.Yes ) //-- Cambiamos los templates
						{
							RepDuplicate( dr["REFERENCIA"].ToString(), dr["CODIGO"].ToString() );
						}
						else //-- Restauramos valores originales
						{
							gridView1.SetRowCellValue( gridView1.FocusedRowHandle, this.colIDREFERENCIA, dr["IDREFERENCIA", DataRowVersion.Original]);
							gridView1.SetRowCellValue( gridView1.FocusedRowHandle, this.colREFERENCIA, descOldTemplate);
							gridView1.FocusedColumn = this.colPREIMPRIMIR;
							gridView1.FocusedColumn = this.colIDREFERENCIA;
							bResult = false;
						}
					}
				}
				catch
				{
					bResult = false;
				}
				return bResult;
			}

			private bool UpdateReportType(DataRow dr)
			{
			//-- Declaracion de variables
				DialogResult r;
				string strMsg = "";
				string strOldType = "";
				string strNewType = "";
				bool bResult = true;

				try
				{
				//-- Obtenemos las referencias
					strOldType = GUI.CApp.GetMeaning( "TIPO REPORTES", dr["TIPO_REPORTE", DataRowVersion.Original].ToString() );
					strNewType = GUI.CApp.GetMeaning( "TIPO REPORTES", dr["TIPO_REPORTE"].ToString() );
				//-- Validaciones iniciales
					if (strOldType == strNewType)
						return false;
				//-- String de informacion
					strMsg = "Todos los cambios se perderán.\n¿Desea continuar cambiando el tipo de reporte de {0} a {1}?";
					strMsg = String.Format(strMsg, strOldType, strNewType);
				//-- Preguntamos al usuario
					r = XtraMessageBox.Show( strMsg, this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Hand ); 
				//-- Procedemos según el caso
					if ( r == DialogResult.Yes ) //-- Cambiamos los templates
					{
						RepCreate( dr["CODIGO"].ToString(), dr["TIPO_REPORTE"].ToString(), "");
						gridView1.SetRowCellValue( gridView1.FocusedRowHandle, this.colREFERENCIA, System.DBNull.Value );
						gridView1.SetRowCellValue( gridView1.FocusedRowHandle, this.colIDREFERENCIA, System.DBNull.Value );
					}
					else //-- Restauramos valores originales
					{
						gridView1.SetRowCellValue( gridView1.FocusedRowHandle, this.colTIPO_REPORTE, dr["TIPO_REPORTE", DataRowVersion.Original]);
						gridView1.FocusedColumn = this.colPREIMPRIMIR;
						gridView1.FocusedColumn = this.colTIPO_REPORTE;
						bResult = false;
					}
				}
				catch
				{
					bResult = false;
				}
				return bResult;
			}

			private bool SaveReport()
			{
				return SaveReport(true);
			}

			private bool SaveReport(bool Refresh)
			{
				bool bResult = true;
				try
				{
					DataSet ds = dsRepBaseDoctos1.GetChanges();
					if ( !Utils.Helpers.IsNull( ds ) )
					{
						GUI.CApp.bll.updateDataSet( ds );
						dsRepBaseDoctos1.AcceptChanges();
					}
				}
				catch(System.Exception ex)
				{
					XtraMessageBox.Show( ex.ToString(), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation );
					dsRepBaseDoctos1.RejectChanges();
					bResult = false;
				}
				finally
				{
					if ( Refresh )
						dbToolbar.Refresh();
				}
				return bResult;
			}

			private bool LoadCurReport(bool Edit)
			{
				bool bResult = false;
				if (dbToolbar.CManager.Count > 0)
				{
				//-- Obtenemos el registro actual
					System.Data.DataRowView dv = (System.Data.DataRowView)dbToolbar.CManager.Current;
					System.Data.DataRow dr = dv.Row;
					string strBase = dr["TIPO_REPORTE"].ToString();
					string strCodigo = dr["CODIGO"].ToString();
					Reports.BaseReports.XRBase objReport = new LLNet.Reports.BaseReports.XRBase( strBase, strCodigo, this.progressBar );   
				//-- Validamos
					if (objReport.Report == null)
						return false;
				//-- Inicializamos valores
					objReport.ExePath = GUI.CApp.ExeDir;
				//-- Procedemos según el caso
					if ( Edit )		//-- Editamos el reporte
					{
						objReport.EditReport();
					}
					else			//-- Preimprimos el reporte
					{
						objReport.PreviewReport();
					}
					bResult = true;
				}
				return bResult;
			}

		#endregion

		#region Eventos de Manejo de Reportes

			private void btnEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
			{
				LoadCurReport(true);
			}

			private void btnPreview_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
			{
				LoadCurReport(false);
			}

			private void btnDuplicate_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
			{
				if (dbToolbar.CManager.Count > 0)
				{
				//-- Obtenemos el registro actual
					System.Data.DataRowView dv = (System.Data.DataRowView)dbToolbar.CManager.Current;
					System.Data.DataRow dr = dv.Row;
				//-- Creamos la nueva fila
					System.Data.DataRow row = this.dsRepBaseDoctos1.REP_BASEDOCTOS.NewRow();
					
					string IdReporte =GUI.CApp.bll.GetSingleValue("NextReporte","Reports").ToString(); 
					row["IDREPORTE"] = IdReporte;
					row["CODIGO"] = System.Guid.NewGuid().ToString("N");
					row["NOMBRE"] = row["CODIGO"];
					row["DESCRIPCION"] = "Copia de " + dr["CODIGO"];
					row["TIPO_REPORTE"] = dr["TIPO_REPORTE"];
					row["PREIMPRIMIR"] = dr["PREIMPRIMIR"];
					row["IDREFERENCIA"] = dr["IDREPORTE"];
					row["MODULO"] = dr["MODULO"];
					this.dsRepBaseDoctos1.REP_BASEDOCTOS.Rows.Add( row );
			
				//-- Creamos la copia del reporte

					RepCreate( row["CODIGO"].ToString(), dr["TIPO_REPORTE"].ToString(), dr["IDREPORTE"].ToString()  );
					RepPropertiesCreate(IdReporte,row["CODIGO"].ToString(),row["PREIMPRIMIR"].ToString());
				//-- Guardamos el reporte
					SaveReport();
					
				}
			}

		#endregion

        */

		private void frmReportes_PositionChanged(object sender, EventArgs e)
		{
			/*if (!bAdding )
            //if (!gridView1.IsNewItemRow(gridView1.FocusedRowHandle ) && gridView1.RowCount > 0)
			{
				DataRowView  MasterRow = BindingContext[dataViewToolbar].Current as DataRowView;
				Utils.QueryParams qParams = new LLNet.Utils.QueryParams();
				string fieldValue;
				foreach (DataColumn col in MasterRow.Row.Table.PrimaryKey)
				{
					fieldValue = MasterRow.Row[col.ColumnName,DataRowVersion.Original].ToString();
					if (col.DataType == typeof(string))
						fieldValue = "'" + fieldValue + "'";
					qParams.AddRecursiveConditionParam(Utils.QueryParams.PredefinedTags.AllToolbarsTag,"AND",col.ColumnName,"=",fieldValue);
				}							
				this.dsRepBaseDoctos1.WMS_V_POSDOCTOS.Clear();
				Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsRepBaseDoctos1.GetType(),dsRepBaseDoctos1.WMS_V_POSDOCTOS.TableName,qParams ),dsRepBaseDoctos1);
				//if (this.dsRepBaseDoctos1.WMS_V_WMSDOCTOS.Rows.Count <1)
					//RepPropertiesCreate(MasterRow.Row["IDREPORTE"].ToString(),MasterRow.Row["CODIGO"].ToString(),"0");
			}
			//rowICONO.Properties.Value = 12;
             */
		}

		private void BuildPrinterTable()
		{
			//-- Declaracion de variables
		/*	System.Data.DataTable tb = new System.Data.DataTable("Impresoras");
			tb.Columns.Add("NOMBRE");
			//-- Obtenemos la impresora predeterminada
			PrintDocument prtdoc = new PrintDocument();
			m_strDefPrinter = prtdoc.PrinterSettings.PrinterName;
			//-- Agregamos el listado de impresoras
			foreach(String strPrinter in PrinterSettings.InstalledPrinters) 
			{
				tb.Rows.Add( new object[] { strPrinter } );
			}
			this.repImpresoras.DataSource = tb;
			this.repImpresoras.NullText = "";
			this.repImpresoras.Columns.AddRange(new DevExpress.XtraEditors.Controls.LookUpColumnInfo[] 
			{
				new DevExpress.XtraEditors.Controls.LookUpColumnInfo("NOMBRE", "Impresora", 120, DevExpress.Utils.FormatType.None, "", true, DevExpress.Utils.HorzAlignment.Near),}
			);
			this.repImpresoras.DisplayMember = "NOMBRE";
			this.repImpresoras.ValueMember = "NOMBRE";*/
		}

		private void BuildIconList()
		{
			//foreach(Image Imagen  in this.dbToolbar.ilsSmall.Images  ) 
			/*for(int i = 0; i < this.dbToolbar.ilsSmall.Images.Count; i++ )
			{
				this.repIconos.Items.AddRange(new object[]{ new DevExpress.XtraEditors.Controls.ImageComboBoxItem(i,i)});		
				//this.repIconos.Items.Add( new DevExpress.XtraEditors.Controls.ImageComboBoxItem(i.ToString(),i));		
			}*/
		}

		private void gridView1_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)
		{
           // e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.NoAction;
		}

        private void frmReportes_FormClosing(object sender, FormClosingEventArgs e)
        {
            Program.FrmLogin.Show();
        }

        private void dbGrid_Click(object sender, EventArgs e)
        {

        }

        private void btnEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            try
            {
                GUI.Idioma idioma = new LLNet.GUI.Idioma(GUI.CApp.idioma);
                DataSet ds = new DataSet();
                Utils.QueryParams qP = new LLNet.Utils.QueryParams();
                qP.Clear();
                qP.AddReplaceParam("idioma", GUI.CApp.idioma);
                string codigoIdioma = GUI.CApp.bll.GetSingleValue("CodigoIdioma", qP, "Idioma").ToString();

                ds = idioma.exportarXML(codigoIdioma);

                ds.WriteXml(GUI.CApp.ExeDir + GUI.CApp.idioma + ".xml");

                GUI.CApp.ShowMessage("Proceso realizado con éxito", "Éxito", true);
            }
            catch
            {

            }
        }
	}
}

