FuncsSourceCode.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.IO;
6 using System.Windows.Forms;
7 using System.ComponentModel;
8 using System.Data;
9 using System.Globalization;
10 using EnvDTE;
11 using EnvDTE80;
12 
13 using sage.ew.db;
14 using Sage.Zip;
15 using sage.addons.components;
16 using System.Xml.Serialization;
17 using sage.ew.enumerations;
18 using System.Reflection;
19 
20 namespace sage.addons.components
21 {
25  public class FuncsSourceCode
26  {
27  private string nombreBaseDatos = "";
31  public string NombreBaseDatos
32  {
33  get { return nombreBaseDatos; }
34  set { nombreBaseDatos = value; }
35  }
36 
40  public BindingList<dynamic> CamposNuevoMante = new BindingList<dynamic>();
41 
45  public dynamic ClassMod;
46 
50  public List<string> NombreCamposNuevoMante = new List<string>();
51 
56 
60  public DataTable ListaCampos;
61 
65  public DataTable ListaCamposLineas;
66 
67  // Campos privados
68  private DataTable CamposTabla;
69 
70  // Campos privados
71  private DataTable CamposTablaLineas;
72 
76  public FuncsSourceCode()
77  {
78 
79  }
80 
90  public bool CrearManteTRel(string _manteTRelName, string _nombreTabla, string _nombreUserControl, string _nombreMante, out string messageError)
91  {
92  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
93  bool lbOk = true;
94 
95  messageError = "";
96  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
97 
98  // Modificar la extensión del mantenimiento para cargar el mantetrel
99  string sourceClassName = "ManteExt" + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(_nombreMante.ToLower()).Trim() + AddonsExecute.NombreAddon;
100  string sourceFormName = "FormManteExt" + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(_nombreMante.ToLower()).Trim() + AddonsExecute.NombreAddon;
101  string sourceFileName = sourceClassName + ".cs";
102  string propertyDefName = "ManteTRel" + _manteTRelName;
103  string mantegridName = "mantegrid" + _manteTRelName;
104 
105  ProjectItem prjItem = GetSourceFile(sourceFileName);
106 
107  if (prjItem == null)
108  {
109  messageError += "No se ha encontrado la extensión del mantenimiento de " + _manteTRelName + "." + Environment.NewLine;
110  return false;
111  }
112 
113  string fileName = _manteTRelName + ".cs";
114  string sourceCode = "";
115  string sourceFile = "";
116  string propertyCode = "";
117 
118  StreamWriter streamWriter;
119  StringBuilder modextensionmante = new StringBuilder();
120 
121  ProjectItem projectItem;
122  Window itemWindow;
123 
124  string defstruc = "";
125  string principalkey = "";
126  string keysdefinition = "";
127  string keysproperties = "";
128  string browsertittle = "Buscar " + _manteTRelName;
129 
130  string sourcePropertiesCode = Resources.PropertiesUserControls;
131 
132  string tab = " "; // Tab string 4 spaces
133  Char comilles = new Char();
134  comilles = '"';
135 
136  // Si hay propiedades avanzadas
137  foreach (dynamic anyobjectMante in this.CamposNuevoMante)
138  {
139  if (anyobjectMante is ewCampoTRelAddons)
140  {
141  ewCampoTRelAddons objectManteTRel = (ewCampoTRelAddons)anyobjectMante;
142 
143  string nombreCampo = objectManteTRel._Nombre.Trim();
144  string nombrePropiedad = "_" + nombreCampo;
145  string propertyObject = "";
146  string nombrePropiedadPrivada = "_private" + nombreCampo;
147  string nombreCampoTRelAsignar = "";
148 
149 
150  #region Definición del campoTRel
151 
152  if (objectManteTRel.CampoAgregado)
153  {
154  defstruc += tab + tab + tab + "ewCampoTRel def" + nombrePropiedad + " = this._AddCampoTRel(" + comilles + nombrePropiedad + comilles + ", " + comilles + comilles + ");" + Environment.NewLine;
155  }
156  else
157  {
158  defstruc += tab + tab + tab + "ewCampoTRel def" + nombrePropiedad + " = this._AddCampoTRel(" + comilles + nombrePropiedad + comilles + ", " + comilles + nombreCampo + comilles + ");" + Environment.NewLine;
159  }
160 
161  if (!string.IsNullOrWhiteSpace(objectManteTRel._Validar_Dato_CampoTRel_Asignar))
162  {
163  nombreCampoTRelAsignar = "_" + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(objectManteTRel._Validar_Dato_CampoTRel_Asignar.ToLower()).Trim();
164  }
165 
166  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._AnchoColumna = " + objectManteTRel._AnchoColumna.ToString() + ";" + Environment.NewLine;
167  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._AutoModeSizeColumna = DataGridViewAutoSizeColumnMode." + objectManteTRel._AutoModeSizeColumna.ToString() + ";" + Environment.NewLine;
168  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Editable = " + objectManteTRel._Editable.ToString().ToLower() + ";" + Environment.NewLine;
169  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Error_Duplicados = " + comilles + objectManteTRel._Error_Duplicados.ToString() + comilles + ";" + Environment.NewLine;
170  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Error_Validar_Dato = " + comilles + objectManteTRel._Error_Validar_Dato.ToString() + comilles + ";" + Environment.NewLine;
171  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._ExpandirPunto = " + objectManteTRel._ExpandirPunto.ToString().ToLower() + ";" + Environment.NewLine;
172  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._FormatString = " + comilles + objectManteTRel._FormatString.ToString() + comilles + ";" + Environment.NewLine;
173  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._PermiteDuplicados = " + objectManteTRel._PermiteDuplicados.ToString().ToLower() + ";" + Environment.NewLine;
174  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._TipoColumna = gridColumnsTypes." + objectManteTRel._TipoColumna.ToString() + ";" + Environment.NewLine;
175  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Titulo = " + comilles + objectManteTRel._Titulo.ToString() + comilles + ";" + Environment.NewLine;
176  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Updatable = " + objectManteTRel._Updatable.ToString().ToLower() + ";" + Environment.NewLine;
177  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Validar_Asignar_Cargando = " + objectManteTRel._Validar_Asignar_Cargando.ToString().ToLower() + ";" + Environment.NewLine;
178  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Validar_Dato_BaseDatos = " + comilles + objectManteTRel._Validar_Dato_BaseDatos.ToString() + comilles + ";" + Environment.NewLine;
179  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Validar_Dato_Campos = " + comilles + objectManteTRel._Validar_Dato_Campos.ToString() + comilles + ";" + Environment.NewLine;
180  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Validar_Dato_CampoTRel_Asignar = " + comilles + nombreCampoTRelAsignar + comilles + ";" + Environment.NewLine;
181  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Validar_Dato_Clave = " + comilles + objectManteTRel._Validar_Dato_Clave.ToString() + comilles + ";" + Environment.NewLine;
182  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Validar_Dato_Tabla = " + comilles + objectManteTRel._Validar_Dato_Tabla.ToString() + comilles + ";" + Environment.NewLine;
183  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Visible = " + objectManteTRel._Visible.ToString().ToLower() + ";" + Environment.NewLine;
184 
185  if (char.IsNumber(objectManteTRel._Relleno))
186  {
187  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Relleno = '" + objectManteTRel._Relleno.ToString() + "';" + Environment.NewLine;
188  }
189 
190  // Màscara
191  if (objectManteTRel.Longitud > 0)
192  {
193  string mascara = new string('9', objectManteTRel.Longitud);
194 
195  if (objectManteTRel.NumeroDecimales > 0)
196  {
197  mascara += "." + (new string('9', objectManteTRel.NumeroDecimales));
198  }
199 
200  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Mascara = new ewMascara(" + comilles + mascara + comilles + ");" + Environment.NewLine;
201  }
202 
203  // Browser
204  if (!string.IsNullOrWhiteSpace(objectManteTRel._Validar_Dato_BaseDatos) && !string.IsNullOrWhiteSpace(objectManteTRel._Validar_Dato_Tabla) && !string.IsNullOrWhiteSpace(objectManteTRel._Validar_Dato_Clave))
205  {
206  // Configurem un browser
207  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Browser = new sage.ew.botones.btBrowser();" + Environment.NewLine;
208  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Browser._Campos = " + comilles + "Codigo,Nombre" + comilles + ";" + Environment.NewLine;
209  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Browser._Campo_Predet = " + comilles + "Nombre" + comilles + ";" + Environment.NewLine;
210  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Browser._Clave = " + comilles + objectManteTRel._Validar_Dato_Clave.ToString() + comilles + ";" + Environment.NewLine;
211  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Browser._DataBase = " + comilles + objectManteTRel._Validar_Dato_BaseDatos.ToString() + comilles + ";" + Environment.NewLine;
212  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Browser._Tabla = " + comilles + objectManteTRel._Validar_Dato_Tabla.ToString() + comilles + ";" + Environment.NewLine;
213  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Browser._Titulo = " + comilles + browsertittle + comilles + ";" + Environment.NewLine;
214  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Browser._Titulos_Campos = " + comilles + "Código,Nombre" + comilles + ";" + Environment.NewLine;
215 
216  // Mante
217  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Mante = new sage.ew.botones.btMante();" + Environment.NewLine;
218  defstruc += tab + tab + tab + "def" + nombrePropiedad + "._Mante._NombreManteNet = " + comilles + objectManteTRel._Validar_Dato_Tabla.ToUpper() + comilles + ";" + Environment.NewLine;
219  }
220 
221  defstruc += tab + tab + tab + Environment.NewLine;
222 
223  #endregion Definición del campoTRel
224 
225 
226  #region Claves
227 
228  if (objectManteTRel.EsClave || objectManteTRel.EsFiltro || objectManteTRel.EsCampoLinea)
229  {
230  keysproperties += tab + tab + tab + tab + "/// <summary>" + Environment.NewLine;
231  keysproperties += tab + tab + tab + tab + "/// " + nombreCampo + Environment.NewLine;
232  keysproperties += tab + tab + tab + tab + "/// </summary>" + Environment.NewLine;
233  keysproperties += tab + tab + tab + tab + "public ClaveTRel " + nombrePropiedad + " { get; set; }" + Environment.NewLine;
234  keysproperties += tab + tab + tab + tab + Environment.NewLine;
235 
236  keysdefinition += tab + tab + tab + tab + tab + "// " + nombreCampo + Environment.NewLine;
237  keysdefinition += tab + tab + tab + tab + tab + nombrePropiedad + " = new ClaveTRel();" + Environment.NewLine;
238 
239  if (objectManteTRel.EsCampoLinea)
240  {
241  keysdefinition += tab + tab + tab + tab + tab + nombrePropiedad + "._EsCampoLinea = true;" + Environment.NewLine;
242  }
243  else
244  {
245  if (objectManteTRel.EsFiltro)
246  {
247  principalkey = nombrePropiedad;
248  keysdefinition += tab + tab + tab + tab + tab + nombrePropiedad + "._EsFiltro = true;" + Environment.NewLine;
249  }
250  }
251 
252  keysdefinition += tab + tab + tab + tab + Environment.NewLine;
253  }
254 
255  #endregion Claves
256 
257 
258  #region Definición de las propiedades
259 
260  // TODO. Buscar el tipo de campo a los Schemas?
261  string tipoCampo = "";
262  string empytValue = "";
263  switch (objectManteTRel._TipoColumna)
264  {
265  case sage.ew.ewbase.gridColumnsTypes.Boton:
266  tipoCampo = "string";
267  break;
268  case sage.ew.ewbase.gridColumnsTypes.Combo:
269  tipoCampo = "string";
270  empytValue = "= " + comilles + comilles;
271  break;
272  case sage.ew.ewbase.gridColumnsTypes.ComboEditable:
273  tipoCampo = "string";
274  empytValue = "= " + comilles + comilles;
275  break;
276  case sage.ew.ewbase.gridColumnsTypes.Fecha:
277  tipoCampo = "DateTime";
278  empytValue = "= DateTime.Now";
279  break;
280  case sage.ew.ewbase.gridColumnsTypes.Lógico:
281  tipoCampo = "bool";
282  empytValue = "= false";
283  break;
284  case sage.ew.ewbase.gridColumnsTypes.Número:
285  tipoCampo = "decimal";
286  empytValue = "= 0";
287  break;
288  case sage.ew.ewbase.gridColumnsTypes.Entero:
289  tipoCampo = "Int32";
290  empytValue = "= 0";
291  break;
292  case sage.ew.ewbase.gridColumnsTypes.Texto:
293  tipoCampo = "string";
294  empytValue = "= " + comilles + comilles;
295  break;
296  case sage.ew.ewbase.gridColumnsTypes.TextoFormateado:
297  tipoCampo = "string";
298  empytValue = "= " + comilles + comilles;
299  break;
300  default:
301  tipoCampo = "string";
302  empytValue = "= " + comilles + comilles;
303  break;
304  }
305 
306 
307  // CCR 183138 - Propiedades get/set
308  string propertySet = GetPropertySet(tipoCampo, comilles, objectManteTRel._Validar_Dato_Clave, nombrePropiedad, nombrePropiedadPrivada);
309 
310  // Propiedades de la línea
311  propertyObject = sourcePropertiesCode;
312  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
313  propertyObject = propertyObject.Replace("$privatepropertyname$", nombrePropiedadPrivada);
314  propertyObject = propertyObject.Replace("$propertyset$", propertySet);
315  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
316  propertyObject = propertyObject.Replace("$propertytype$", tipoCampo);
317  propertyObject = propertyObject.Replace("$converto$", "ToString");
318  propertyObject = propertyObject.Replace("$emptyvalue$", empytValue);
319  propertyCode += propertyObject;
320 
321  #endregion Definición de las propiedades
322  }
323  }
324 
325  // Recuparar el codi i substituir parametres per a la classe de negoci
326  sourceCode = Resources.ManteTRelBase;
327  sourceCode = sourceCode.Replace("$projectname$", AddonsExecute.NombreAddon);
328  sourceCode = sourceCode.Replace("$classname$", _manteTRelName);
329  sourceCode = sourceCode.Replace("$databasename$", AddonsExecute.NombreAddon.ToUpper());
330  sourceCode = sourceCode.Replace("$tablename$", _nombreTabla);
331  sourceCode = sourceCode.Replace("$browsertittle$", browsertittle);
332  sourceCode = sourceCode.Replace("$structuredefinition$", defstruc);
333  sourceCode = sourceCode.Replace("$keysproperties$", keysproperties);
334  sourceCode = sourceCode.Replace("$keysdefinition$", keysdefinition);
335  sourceCode = sourceCode.Replace("$principalkey$", principalkey);
336  sourceCode = sourceCode.Replace("$propertieslindefinition$", propertyCode);
337 
338  // Crear el fichero
339  sourceFile = Path.Combine(AddonsExecute.RutaProject, "Negocio\\Clases\\") + fileName;
340  BackupFile(sourceFile);
341  streamWriter = File.CreateText(sourceFile);
342  streamWriter.Write(sourceCode);
343  streamWriter.Close();
344 
345  // Añadirlo al proyecto
346  projectItem = AddonsExecute.PRJAddon.ProjectItems.AddFromFile(sourceFile);
347  itemWindow = projectItem.Open();
348  itemWindow.Activate();
349 
350  // Modificar la extensión del mantenimiento para cargar el mantetrel
351  CodeVariable codeVariable = GetCodeElement<CodeVariable>(propertyDefName, out messageError, prjItem, sourceClassName);
352  if (codeVariable == null)
353  {
354  modextensionmante.AppendLine(tab + tab + "/// <summary>");
355  modextensionmante.AppendLine(tab + tab + "/// Instancia del ManteTRel de " + _nombreTabla);
356  modextensionmante.AppendLine(tab + tab + "/// </summary>");
357  modextensionmante.AppendLine(tab + tab + "public Negocio.Clases." + _manteTRelName + " " + propertyDefName + " = null;");
358  modextensionmante.AppendLine();
359 
360  CodeClass codeClass = GetCodeClass(sourceClassName, out messageError, prjItem);
361 
362  EditPoint editPoint = codeClass.StartPoint.CreateEditPoint();
363  if (!editPoint.FindPattern("#region ManteTRels"))
364  {
365  editPoint = codeClass.StartPoint.CreateEditPoint();
366  }
367 
368  editPoint.LineDown(2);
369  editPoint.Insert(modextensionmante.ToString());
370 
371  modextensionmante.Clear();
372  modextensionmante.AppendLine(tab + tab + tab + "Negocio.Clases." + _manteTRelName + " mtrel" + _manteTRelName + " = new Negocio.Clases." + _manteTRelName + "();");
373  modextensionmante.AppendLine(tab + tab + tab + "this.ManteTRel" + _manteTRelName + " = mtrel" + _manteTRelName + ";");
374  modextensionmante.AppendLine(tab + tab + tab + "this._Mante._AddManteTRel(mtrel" + _manteTRelName + ");");
375  modextensionmante.AppendLine();
376 
377  CodeFunction codeFunction = GetCodeElement<CodeFunction>(sourceClassName, out messageError, prjItem, sourceClassName, 1);
378 
379  if (codeFunction != null)
380  {
381  editPoint = codeFunction.EndPoint.CreateEditPoint();
382  editPoint.StartOfLine();
383  editPoint.Insert(modextensionmante.ToString());
384  }
385  }
386 
387  // Modificar la extensión del mantenimiento para cargar el mantetrel
388  CodeFunction functionFormManteExt = GetCodeElement<CodeFunction>(sourceFormName, out messageError, prjItem, sourceFormName);
389  if (functionFormManteExt != null)
390  {
391  EditPoint editPoint = functionFormManteExt.StartPoint.CreateEditPoint();
392  if (editPoint.FindPattern("extensionMante._Load()"))
393  {
394  editPoint.StartOfLine();
395  editPoint.Indent(null, 3);
396  editPoint.Insert("extensionMante." + propertyDefName + "._Grid = extensionMante.usercontrolTabManteBase.Controls[" + comilles + mantegridName + comilles + "];" + Environment.NewLine);
397  }
398  }
399 
400  // Guardar els canvis al document
401  prjItem.Save();
402 
403  // Guardar cambios al proyecto
404  AddonsExecute.PRJAddon.Save();
405 
406  prjItem = null;
407  projectItem = null;
408 
409  return lbOk;
410  }
411 
419  public bool CrearNuevoUserControlManteTRel(string _nombreControl, string _nombreTabla, out string messageError)
420  {
421  bool lbOk = true;
422 
423  string fileName = _nombreControl + ".cs";
424  string mantegridName = "mantegrid" + _nombreTabla;
425 
426  Char comilles = new Char();
427  comilles = '"';
428 
429  messageError = "";
430  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
431 
432 
433  // Buscar el fichero del usercontrol
434  ProjectItem prjItem = GetSourceFile(fileName);
435 
436  if (prjItem == null)
437  {
438  // Si no existe, crear el user control
439  lbOk = CrearNuevoUserControl(_nombreControl, true, out messageError);
440 
441  // Comprovamos de nuevo
442  prjItem = GetSourceFile(fileName);
443  }
444 
445  if (prjItem == null)
446  {
447  // Ha fallado
448  messageError = "No se ha podido crear el control de usuario";
449  return false;
450  }
451 
452  // Buscar el código de la classe
453  CodeFunction functionFormManteExt = GetCodeElement<CodeFunction>("_BloquearControles", out messageError, prjItem, _nombreControl);
454  if (functionFormManteExt != null)
455  {
456  // Añadir un ManteGrid para la tabla relacionada
457  EditPoint editPoint = functionFormManteExt.EndPoint.CreateEditPoint();
458 
459  if (editPoint != null)
460  {
461  editPoint.LineUp(1);
462  editPoint.Insert("this." + mantegridName + "._ReadOnly = tlReadOnly;" + Environment.NewLine);
463  }
464  }
465 
466  // Buscar el código de la classe
467  functionFormManteExt = null;
468  functionFormManteExt = GetCodeElement<CodeFunction>("InitializeComponent", out messageError, prjItem, _nombreControl);
469  if (functionFormManteExt != null)
470  {
471  // Añadir un ManteGrid para la tabla relacionada
472  EditPoint editPoint = functionFormManteExt.StartPoint.CreateEditPoint();
473 
474  // Añadimos la definición del ManteGrid
475  editPoint.LineUp(1);
476 
477  editPoint.Indent(null, 2);
478  editPoint.Insert("/// <summary>" + Environment.NewLine);
479  editPoint.Indent(null, 2);
480  editPoint.Insert("/// Objeto de Negocio asociado al usercontrol" + Environment.NewLine);
481  editPoint.Indent(null, 2);
482  editPoint.Insert("/// </summary>" + Environment.NewLine);
483  editPoint.Indent(null, 2);
484  editPoint.Insert("public ew.objetos.UserControls.Mantegrid " + mantegridName + ";" + Environment.NewLine);
485 
486  if (editPoint.FindPattern("this.SuspendLayout()"))
487  {
488  editPoint.StartOfLine();
489  editPoint.Insert("this." + mantegridName + " = new sage.ew.objetos.UserControls.Mantegrid();" + Environment.NewLine);
490  editPoint.Indent(null, 3);
491  editPoint.LineDown(1);
492 
493  editPoint.Insert("//" + Environment.NewLine);
494  editPoint.Indent(null, 3);
495  editPoint.Insert("// " + mantegridName + Environment.NewLine);
496  editPoint.Indent(null, 3);
497  editPoint.Insert("//" + Environment.NewLine);
498  editPoint.Indent(null, 3);
499  editPoint.Insert("this." + mantegridName + ".Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));" + Environment.NewLine);
500  editPoint.Indent(null, 3);
501  editPoint.Insert("this." + mantegridName + ".Location = new System.Drawing.Point(0, 0);" + Environment.NewLine);
502  editPoint.Indent(null, 3);
503  editPoint.Insert("this." + mantegridName + ".Name = " + comilles + mantegridName + comilles + ";" + Environment.NewLine);
504  editPoint.Indent(null, 3);
505  editPoint.Insert("this." + mantegridName + ".Size = new System.Drawing.Size(511, 294);" + Environment.NewLine);
506  editPoint.Indent(null, 3);
507  editPoint.Insert("this." + mantegridName + ".TabIndex = 0;" + Environment.NewLine);
508 
509  if (editPoint.FindPattern("this.ResumeLayout"))
510  {
511  editPoint.StartOfLine();
512  editPoint.Insert("this.Controls.Add(this." + mantegridName + ");" + Environment.NewLine);
513  editPoint.Indent(null, 3);
514  }
515 
516  // Guardar els canvis al document
517  prjItem.Save();
518  }
519  }
520 
521  prjItem = null;
522 
523  return lbOk;
524  }
525 
533  public bool CrearNuevoUserControl(string _nombreControl, bool _crearManteTRel, out string messageError)
534  {
535  bool lbOk = true;
536 
537  string fileName = _nombreControl + ".cs";
538  string sourceCode = "";
539  string sourceFile = "";
540 
541  StreamWriter streamWriter;
542  ProjectItem projectItem;
543  Window itemWindow;
544 
545  messageError = "";
546  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
547 
548  string propertyCode = "";
549  string fieldsLoad = "";
550 
551  projectItem = GetSourceFile(fileName);
552 
553  if (projectItem != null)
554  {
555  messageError = "Ya existe un fichero en el proyecto con el nombre indicado. (" + fileName + ")";
556  projectItem = null;
557  return _crearManteTRel;
558  }
559 
560  string bindingsCode = "";
561  string blockCode = "";
562  string instanceObjectsCode = "";
563  string controlsAddCode = "";
564  string controlsDefCode = "";
565  string controlDeclare = "";
566  string paginasAddCode = "";
567 
568  int leftlabel = 37;
569  int leftcontrol = 137;
570  int[] toplabel = new int[] { 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13 };
571  int[] topcontrol = new int[] { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 };
572  int heightcontrol = 24;
573  int widthcontrol = 100;
574  int maxlength = 0;
575  int tabindex = 1;
576 
577  string tab = " "; // Tab string 4 spaces
578 
579  string sourceBindingsCode = Resources.ControlBinding;
580  string sourcePropertiesCode = Resources.PropertiesUserControls;
581  string sourceLabelCode = Resources.FormManteLabel;
582  string sourceTextBoxCode = Resources.FormManteTextBox;
583  string sourceCheckBoxCode = Resources.FormManteCheckBox;
584  string sourceNumericUpDownCode = Resources.FormManteNumericUpDown;
585  string sourceDateTimeCode = Resources.FormManteDateTime;
586  string sourceTxtCodLabelCode = Resources.FormManteTxtCodLabel;
587  string sourceTabPageCode = Resources.FormManteTabPage;
588 
589  string showPageCode = "";
590  string formDefCode = "";
591 
592  Char comilles = new Char();
593  comilles = '"';
594 
595  // Configuramos las páginas
596  if (this.CamposNuevoMante.Count > 0)
597  {
598  ManteProperties manteProperties = this.CamposNuevoMante[0];
599  if (manteProperties.NumTabs > 1)
600  {
601  foreach (dynamic anyobjectMante in this.CamposNuevoMante)
602  {
603  if (anyobjectMante is PaginaManteProperties)
604  {
605  PaginaManteProperties pagina = (PaginaManteProperties)anyobjectMante;
606 
607  string nombrePagina = pagina.Nombre;
608 
609  if (nombrePagina == "tpGeneral")
610  {
611  controlsDefCode += tab + tab + tab + "this.tpGeneral.Text = " + comilles + pagina.Titulo + comilles + ";" + Environment.NewLine;
612  }
613  else
614  {
615  instanceObjectsCode += tab + tab + tab + "this." + nombrePagina + " = new sage.ew.objetos.ewTabPage();" + Environment.NewLine;
616  controlDeclare += tab + tab + "private sage.ew.objetos.ewTabPage " + nombrePagina + ";" + Environment.NewLine;
617 
618  paginasAddCode += tab + tab + tab + "this.ewtcPaginas.Controls.Add(this." + nombrePagina + ");" + Environment.NewLine;
619 
620  string objectDef = sourceTabPageCode;
621  objectDef = objectDef.Replace("$objectname$", nombrePagina);
622  objectDef = objectDef.Replace("$objectcaption$", pagina.Titulo);
623  objectDef = objectDef.Replace("$tabindex$", tabindex.ToString());
624 
625  controlsDefCode += objectDef;
626  tabindex++;
627  }
628 
629  paginasAddCode += tab + tab + tab + "this.ewtcPaginas.Controls.SetChildIndex(this." + nombrePagina + ", 0);" + Environment.NewLine;
630  }
631  }
632 
633  controlsDefCode = paginasAddCode + controlsDefCode;
634  }
635  }
636 
637 
638  // Si hay propiedades avanzadas
639  foreach (dynamic anyobjectMante in this.CamposNuevoMante)
640  {
641  if (anyobjectMante is ObjectsManteProperties)
642  {
643  ObjectsManteProperties objectMante = (ObjectsManteProperties)anyobjectMante;
644 
645  string nombreControl = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(objectMante.Nombre.ToLower()).Trim();
646  string nombreCampo = nombreControl;
647  string nombrePropiedad = "_" + nombreControl;
648  string nombrePropiedadPrivada = "_private" + nombreControl;
649  string tituloCampo = objectMante.TituloCampo + ":";
650 
651  nombreControl = nombreControl + AddonsExecute.NombreAddon;
652 
653  string bindingObject = "";
654  string propertyObject = "";
655  string objectDef = "";
656 
657  //string nomPagina = "this.tpGeneral" + AddonsExecute.NombreAddon;
658  string nomPagina = "this"; // TODO: POR AHORA SIN PÁGINAS
659 
660  if (objectMante.Tab > 1)
661  {
662  nomPagina = "this.tpPagina" + objectMante.Tab.ToString() + AddonsExecute.NombreAddon;
663  }
664 
665  // Hay que mostrar label?
666  if (objectMante.Visible && objectMante.MostrarTitulo)
667  {
668  instanceObjectsCode += tab + tab + tab + "this.ewlabel" + nombreControl + " = new sage.ew.objetos.ewlabel();" + Environment.NewLine;
669 
670  controlsAddCode += tab + tab + tab + nomPagina + ".Controls.Add(this.ewlabel" + nombreControl + ");" + Environment.NewLine;
671 
672  controlDeclare += tab + tab + "private sage.ew.objetos.ewlabel ewlabel" + nombreControl + ";" + Environment.NewLine;
673 
674  objectDef = sourceLabelCode;
675  objectDef = objectDef.Replace("$objectname$", "ewlabel" + nombreControl);
676  objectDef = objectDef.Replace("$objectcaption$", tituloCampo);
677  objectDef = objectDef.Replace("$left$", leftlabel.ToString());
678  objectDef = objectDef.Replace("$top$", toplabel[objectMante.Tab - 1].ToString());
679  objectDef = objectDef.Replace("$tabindex$", tabindex.ToString());
680 
681  controlsDefCode += objectDef;
682  tabindex++;
683  }
684 
685  if (objectMante.ObjectType == ObjectsManteTypes.TextBox)
686  {
687  if (objectMante.Visible)
688  {
689  bindingObject = sourceBindingsCode;
690  bindingObject = bindingObject.Replace("$objectname$", "ewtextbox" + nombreControl);
691  bindingObject = bindingObject.Replace("$propertybinding$", "Text");
692  bindingObject = bindingObject.Replace("$propertyname$", nombrePropiedad);
693  bindingObject = bindingObject.Replace("$negocioclass$", "extensionMante");
694  bindingsCode += bindingObject;
695 
696  blockCode += tab + tab + tab + "ewtextbox" + nombreControl + ".ReadOnly = tlReadOnly;" + Environment.NewLine;
697 
698  instanceObjectsCode += tab + tab + tab + "this.ewtextbox" + nombreControl + " = new sage.ew.objetos.ewtextbox();" + Environment.NewLine;
699 
700  controlsAddCode += tab + tab + tab + nomPagina + ".Controls.Add(this.ewtextbox" + nombreControl + ");" + Environment.NewLine;
701 
702  controlDeclare += tab + tab + "private sage.ew.objetos.ewtextbox ewtextbox" + nombreControl + ";" + Environment.NewLine;
703 
704  objectDef = sourceTextBoxCode;
705  objectDef = objectDef.Replace("$objectname$", "ewtextbox" + nombreControl);
706  objectDef = objectDef.Replace("$left$", leftcontrol.ToString());
707  objectDef = objectDef.Replace("$top$", topcontrol[objectMante.Tab - 1].ToString());
708  objectDef = objectDef.Replace("$width$", widthcontrol.ToString());
709  objectDef = objectDef.Replace("$height$", heightcontrol.ToString());
710  objectDef = objectDef.Replace("$maxlength$", maxlength.ToString());
711  objectDef = objectDef.Replace("$tabindex$", tabindex.ToString());
712 
713  controlsDefCode += objectDef;
714  tabindex++;
715  }
716 
717  propertyObject = sourcePropertiesCode;
718  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
719  propertyObject = propertyObject.Replace("$privatepropertyname$", nombrePropiedadPrivada);
720  propertyObject = propertyObject.Replace("$propertyset$", nombrePropiedadPrivada + " = value");
721  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
722  propertyObject = propertyObject.Replace("$propertytype$", "string");
723  propertyObject = propertyObject.Replace("$converto$", "ToString");
724  propertyObject = propertyObject.Replace("$emptyvalue$", "String.Empty");
725  propertyCode += propertyObject;
726 
727  if (objectMante.EsFiltro)
728  {
729  fieldsLoad += "this." + nombrePropiedad + " = _Mante._Codigo;";
730  }
731  else
732  {
733  fieldsLoad += "this." + nombrePropiedad + " = String.Empty;" + Environment.NewLine;
734  }
735  }
736 
737  if (objectMante.ObjectType == ObjectsManteTypes.CheckBox)
738  {
739  if (objectMante.Visible)
740  {
741  bindingObject = sourceBindingsCode;
742  bindingObject = bindingObject.Replace("$objectname$", "ewcheckbox" + nombreControl);
743  bindingObject = bindingObject.Replace("$propertybinding$", "Checked");
744  bindingObject = bindingObject.Replace("$propertyname$", nombrePropiedad);
745  bindingObject = bindingObject.Replace("$negocioclass$", "extensionMante");
746  bindingsCode += bindingObject;
747 
748  blockCode += tab + tab + tab + "ewcheckbox" + nombreControl + ".Enabled = !tlReadOnly;" + Environment.NewLine;
749 
750  instanceObjectsCode += tab + tab + tab + "this.ewcheckbox" + nombreControl + " = new sage.ew.objetos.ewcheckbox();" + Environment.NewLine;
751 
752  controlsAddCode += tab + tab + tab + nomPagina + ".Controls.Add(this.ewcheckbox" + nombreControl + ");" + Environment.NewLine;
753 
754  controlDeclare += tab + tab + "private sage.ew.objetos.ewcheckbox ewcheckbox" + nombreControl + ";" + Environment.NewLine;
755 
756  objectDef = sourceCheckBoxCode;
757  objectDef = objectDef.Replace("$objectname$", "ewcheckbox" + nombreControl);
758  objectDef = objectDef.Replace("$left$", leftcontrol.ToString());
759  objectDef = objectDef.Replace("$top$", (toplabel[objectMante.Tab - 1] + 1).ToString());
760  objectDef = objectDef.Replace("$width$", widthcontrol.ToString());
761  objectDef = objectDef.Replace("$height$", heightcontrol.ToString());
762  objectDef = objectDef.Replace("$maxlength$", maxlength.ToString());
763  objectDef = objectDef.Replace("$tabindex$", tabindex.ToString());
764  if (objectMante.MostrarTitulo)
765  {
766  objectDef = objectDef.Replace("$objectcaption$", "");
767  }
768  else
769  {
770  objectDef = objectDef.Replace("$objectcaption$", tituloCampo);
771  }
772 
773  controlsDefCode += objectDef;
774  tabindex++;
775  }
776 
777  propertyObject = sourcePropertiesCode;
778  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
779  propertyObject = propertyObject.Replace("$privatepropertyname$", nombrePropiedadPrivada);
780  propertyObject = propertyObject.Replace("$propertyset$", nombrePropiedadPrivada + " = value");
781  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
782  propertyObject = propertyObject.Replace("$converto$", "ToBoolean");
783  propertyObject = propertyObject.Replace("$propertytype$", "bool");
784  propertyObject = propertyObject.Replace("$emptyvalue$", "false");
785  propertyCode += propertyObject;
786 
787  fieldsLoad += "this." + nombrePropiedad + " = false;" + Environment.NewLine;
788  }
789 
790  if (objectMante.ObjectType == ObjectsManteTypes.NumericUpDown)
791  {
792  if (objectMante.Visible)
793  {
794  bindingObject = sourceBindingsCode;
795  bindingObject = bindingObject.Replace("$objectname$", "ewnumericupdown" + nombreControl);
796  bindingObject = bindingObject.Replace("$propertybinding$", "Value");
797  bindingObject = bindingObject.Replace("$propertyname$", nombrePropiedad);
798  bindingObject = bindingObject.Replace("$negocioclass$", "extensionMante");
799  bindingsCode += bindingObject;
800 
801  blockCode += tab + tab + tab + "ewnumericupdown" + nombreControl + ".ReadOnly = tlReadOnly;" + Environment.NewLine;
802 
803  instanceObjectsCode += tab + tab + tab + "this.ewnumericupdown" + nombreControl + " = new sage.ew.objetos.ewnumericupdown();" + Environment.NewLine;
804 
805  controlsAddCode += tab + tab + tab + nomPagina + ".Controls.Add(this.ewnumericupdown" + nombreControl + ");" + Environment.NewLine;
806 
807  controlDeclare += tab + tab + "private sage.ew.objetos.ewnumericupdown ewnumericupdown" + nombreControl + ";" + Environment.NewLine;
808 
809  objectDef = sourceNumericUpDownCode;
810  objectDef = objectDef.Replace("$objectname$", "ewnumericupdown" + nombreControl);
811  objectDef = objectDef.Replace("$left$", leftcontrol.ToString());
812  objectDef = objectDef.Replace("$top$", topcontrol[objectMante.Tab - 1].ToString());
813  objectDef = objectDef.Replace("$width$", widthcontrol.ToString());
814  objectDef = objectDef.Replace("$height$", heightcontrol.ToString());
815  objectDef = objectDef.Replace("$maxlength$", maxlength.ToString());
816  objectDef = objectDef.Replace("$tabindex$", tabindex.ToString());
817  objectDef = objectDef.Replace("$decimalplaces$", objectMante.NumericUpDownDecimals.ToString());
818  objectDef = objectDef.Replace("$maximum$", objectMante.NumericUpDownMaximum.ToString());
819  objectDef = objectDef.Replace("$minimum$", objectMante.NumericUpDownMinimum.ToString());
820  objectDef = objectDef.Replace("$increment$", objectMante.NumericUpDownIncrement.ToString());
821 
822  controlsDefCode += objectDef;
823  tabindex++;
824  }
825 
826  propertyObject = sourcePropertiesCode;
827  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
828  propertyObject = propertyObject.Replace("$privatepropertyname$", nombrePropiedadPrivada);
829  propertyObject = propertyObject.Replace("$propertyset$", nombrePropiedadPrivada + " = value");
830  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
831  propertyObject = propertyObject.Replace("$propertytype$", "decimal"); // TODO: Revisar tipus de dades. Ha de ser el tipus de camp, no d'objecte
832  propertyObject = propertyObject.Replace("$converto$", "ToDecimal");
833  propertyObject = propertyObject.Replace("$emptyvalue$", "0");
834  propertyCode += propertyObject;
835 
836  fieldsLoad += "this." + nombrePropiedad + " = 0;" + Environment.NewLine;
837  }
838 
839  if (objectMante.ObjectType == ObjectsManteTypes.DateTimePicker)
840  {
841  if (objectMante.Visible)
842  {
843  bindingObject = sourceBindingsCode;
844  bindingObject = bindingObject.Replace("$objectname$", "ewdatetime" + nombreControl);
845  bindingObject = bindingObject.Replace("$propertybinding$", "Value");
846  bindingObject = bindingObject.Replace("$propertyname$", nombrePropiedad);
847  bindingObject = bindingObject.Replace("$negocioclass$", "extensionMante");
848  bindingsCode += bindingObject;
849 
850  blockCode += tab + tab + tab + "ewdatetime" + nombreControl + ".Enabled = !tlReadOnly;" + Environment.NewLine;
851 
852  instanceObjectsCode += tab + tab + tab + "this.ewdatetime" + nombreControl + " = new sage.ew.objetos.ewdatetime();" + Environment.NewLine;
853 
854  controlsAddCode += tab + tab + tab + nomPagina + ".Controls.Add(this.ewdatetime" + nombreControl + ");" + Environment.NewLine;
855 
856  controlDeclare += tab + tab + "private sage.ew.objetos.ewdatetime ewdatetime" + nombreControl + ";" + Environment.NewLine;
857 
858  objectDef = sourceDateTimeCode;
859  objectDef = objectDef.Replace("$objectname$", "ewdatetime" + nombreControl);
860  objectDef = objectDef.Replace("$left$", leftcontrol.ToString());
861  objectDef = objectDef.Replace("$top$", topcontrol[objectMante.Tab - 1].ToString());
862  objectDef = objectDef.Replace("$width$", widthcontrol.ToString());
863  objectDef = objectDef.Replace("$height$", heightcontrol.ToString());
864  objectDef = objectDef.Replace("$maxlength$", maxlength.ToString());
865  objectDef = objectDef.Replace("$tabindex$", tabindex.ToString());
866 
867  controlsDefCode += objectDef;
868  tabindex++;
869  }
870 
871  propertyObject = sourcePropertiesCode;
872  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
873  propertyObject = propertyObject.Replace("$privatepropertyname$", nombrePropiedadPrivada);
874  propertyObject = propertyObject.Replace("$propertyset$", nombrePropiedadPrivada + " = value");
875  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
876  propertyObject = propertyObject.Replace("$propertytype$", "DateTime");
877  propertyObject = propertyObject.Replace("$converto$", "ToDateTime");
878  propertyObject = propertyObject.Replace("$emptyvalue$", "DateTime.Now.Date");
879  propertyCode += propertyObject;
880 
881  fieldsLoad += "this." + nombrePropiedad + " = DateTime.Now.Date;" + Environment.NewLine;
882  }
883 
884  if (objectMante.ObjectType == ObjectsManteTypes.TxtCodLabel)
885  {
886  if (objectMante.Visible)
887  {
888  bindingObject = sourceBindingsCode;
889  bindingObject = bindingObject.Replace("$objectname$", "txt" + nombreControl);
890  bindingObject = bindingObject.Replace("$propertybinding$", "_Codigo");
891  bindingObject = bindingObject.Replace("$propertyname$", nombrePropiedad);
892  bindingObject = bindingObject.Replace("$negocioclass$", "extensionMante");
893  bindingsCode += bindingObject;
894 
895  string deftxtcodlabel = objectMante.TxtCodLabel.Trim();
896 
897  blockCode += tab + tab + tab + "txt" + nombreControl + "._ReadOnly = tlReadOnly;" + Environment.NewLine;
898 
899  instanceObjectsCode += tab + tab + tab + "this.txt" + nombreControl + " = new " + deftxtcodlabel + "();" + Environment.NewLine;
900 
901  controlsAddCode += tab + tab + tab + nomPagina + ".Controls.Add(this.txt" + nombreControl + ");" + Environment.NewLine;
902 
903  controlDeclare += tab + tab + "private " + deftxtcodlabel + " txt" + nombreControl + ";" + Environment.NewLine;
904 
905  objectDef = sourceTxtCodLabelCode;
906  objectDef = objectDef.Replace("$objectname$", "txt" + nombreControl);
907  objectDef = objectDef.Replace("$left$", leftcontrol.ToString());
908  objectDef = objectDef.Replace("$top$", topcontrol[objectMante.Tab - 1].ToString());
909  objectDef = objectDef.Replace("$width$", 200.ToString());
910  objectDef = objectDef.Replace("$height$", (heightcontrol + 1).ToString());
911  objectDef = objectDef.Replace("$maxlength$", maxlength.ToString());
912  objectDef = objectDef.Replace("$tabindex$", tabindex.ToString());
913 
914  controlsDefCode += objectDef;
915  tabindex++;
916  }
917 
918  propertyObject = sourcePropertiesCode;
919  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
920  propertyObject = propertyObject.Replace("$privatepropertyname$", nombrePropiedadPrivada);
921  propertyObject = propertyObject.Replace("$propertyset$", nombrePropiedadPrivada + " = value");
922  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
923  propertyObject = propertyObject.Replace("$propertytype$", "string");
924  propertyObject = propertyObject.Replace("$converto$", "ToString");
925  propertyObject = propertyObject.Replace("$emptyvalue$", "String.Empty");
926  propertyCode += propertyObject;
927 
928  fieldsLoad += "this." + nombrePropiedad + " = String.Empty;" + Environment.NewLine;
929  }
930 
931  if (objectMante.Visible)
932  {
933  topcontrol[objectMante.Tab - 1] += heightcontrol + 6;
934  toplabel[objectMante.Tab - 1] += heightcontrol + 6;
935  }
936  }
937  }
938 
939  // Recuparar el codi i substituir parametres per a la classe de negoci
940  sourceCode = Resources.TabManteBase;
941  sourceCode = sourceCode.Replace("$projectname$", AddonsExecute.NombreAddon);
942  sourceCode = sourceCode.Replace("$usercontrolname$", _nombreControl);
943  sourceCode = sourceCode.Replace("$properties$", propertyCode);
944  sourceCode = sourceCode.Replace("$bindings$", bindingsCode);
945  sourceCode = sourceCode.Replace("$bloqueos$", blockCode);
946  sourceCode = sourceCode.Replace("$instanceobjects$", instanceObjectsCode);
947  sourceCode = sourceCode.Replace("$controlsadd$", controlsAddCode);
948  sourceCode = sourceCode.Replace("$showpages$", showPageCode);
949  sourceCode = sourceCode.Replace("$controlsdef$", controlsDefCode);
950  sourceCode = sourceCode.Replace("$formdef$", formDefCode);
951  sourceCode = sourceCode.Replace("$controlsdeclares$", controlDeclare);
952 
953  // Crear el fichero
954  sourceFile = Path.Combine(AddonsExecute.RutaProject, "Visual\\UserControls\\") + fileName;
955  BackupFile(sourceFile);
956  streamWriter = File.CreateText(sourceFile);
957  streamWriter.Write(sourceCode);
958  streamWriter.Close();
959 
960  // Añadirlo al proyecto
961  projectItem = AddonsExecute.PRJAddon.ProjectItems.AddFromFile(sourceFile);
962  itemWindow = projectItem.Open();
963  itemWindow.Activate();
964 
965  projectItem = null;
966 
967  return lbOk;
968  }
969 
977  public CodeClass GetCodeClass(string _className, out string messageError, ProjectItem prjItem = null)
978  {
979  CodeClass codeClass = null;
980  messageError = "";
981  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
982 
983 
984  // Buscamos la clase del modulo
985  if (prjItem == null)
986  {
987  prjItem = AddonsExecute.PRJAddon.ProjectItems.Item("SageAddons.cs");
988  }
989 
990  if (prjItem == null)
991  {
992  messageError = "No se ha encontrado la clase principal del módulo.";
993  return codeClass;
994  }
995 
996  // Tomamos el código contenido
997  FileCodeModel fcm = prjItem.FileCodeModel;
998  if (fcm == null)
999  {
1000  messageError = "No se ha encontrado código dentro de la clase principal del módulo.";
1001  return codeClass;
1002  }
1003 
1004  // Tomamos los elementos del código
1005  CodeElements ces = fcm.CodeElements;
1006 
1007  // Buscamos el namespace que es el que contiene el código de la clase
1008  CodeNamespace cns = null;
1009  foreach (CodeElement ce in ces)
1010  {
1011  if (ce.Kind == vsCMElement.vsCMElementNamespace)
1012  {
1013  cns = ce as CodeNamespace;
1014  break;
1015  }
1016  }
1017  if (cns == null)
1018  {
1019  messageError = "No se ha encontrado el miembro namespace dentro de la clase principal del módulo.";
1020  return codeClass;
1021  }
1022 
1023  ces = cns.Members;
1024  if (ces == null)
1025  {
1026  messageError = "No se ha encontrado ningún miembro dentro del namespace de la clase principal del módulo.";
1027  return codeClass;
1028  }
1029 
1030  // look for the first class
1031  CodeClass cls = null;
1032  foreach (CodeElement ce in ces)
1033  {
1034  if (ce.Kind == vsCMElement.vsCMElementClass)
1035  {
1036  cls = ce as CodeClass;
1037 
1038  if (cls.Name == _className)
1039  {
1040  codeClass = cls;
1041  break;
1042  }
1043  }
1044  }
1045 
1046  return codeClass;
1047  }
1048 
1057  public T GetCodeElement<T>(string _functionName, out string messageError, ProjectItem prjItem = null, string className = "", int parametersNumber = -1)
1058  {
1059  T codeElement = default(T);
1060  messageError = "";
1061  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
1062 
1063 
1064  if (string.IsNullOrWhiteSpace(className))
1065  {
1066  className = AddonsExecute.NombreAddon;
1067  }
1068 
1069  // Buscamos la clase del modulo
1070  if (prjItem == null)
1071  {
1072  prjItem = AddonsExecute.PRJAddon.ProjectItems.Item("SageAddons.cs");
1073  }
1074 
1075  if (prjItem == null)
1076  {
1077  messageError = "No se ha encontrado la clase principal del módulo.";
1078  return codeElement;
1079  }
1080 
1081  CodeClass codeClass = GetCodeClass(className, out messageError, prjItem);
1082  if (codeClass == null)
1083  {
1084  messageError = "No se ha encontrado la clase " + codeClass + " dentro de la clase principal del módulo.";
1085  return default(T);
1086  }
1087 
1088  // Buscamos la funcion indicada
1089  foreach (CodeElement ce in codeClass.Members)
1090  {
1091  if (ce.Name == _functionName)
1092  {
1093  if (ce is CodeFunction)
1094  {
1095  CodeFunction cf = (CodeFunction)ce;
1096 
1097  if (parametersNumber > -1)
1098  {
1099  // Deben conincidir el número de parámetros, si se pasan
1100  if (cf.Parameters.Count == parametersNumber)
1101  {
1102  codeElement = (T)ce;
1103  break;
1104  }
1105  }
1106  else
1107  {
1108  // No hace falta comparar parámetros
1109  codeElement = (T)ce;
1110  break;
1111  }
1112  }
1113  else
1114  {
1115  codeElement = (T)ce;
1116  break;
1117  }
1118  }
1119  }
1120 
1121  return codeElement;
1122  }
1123 
1133  public bool ModificarMante(string _nombreModulo, string _nombreMante, string _nombreTabla, string _nombreConnex, out string _messageError)
1134  {
1135  bool lbOk = false;
1136 
1137  string nombreManteExt = "ManteExt" + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(_nombreMante.ToLower()).Trim() + AddonsExecute.NombreAddon;
1138  string nombreFormManteExt = "Form" + nombreManteExt;
1139 
1140  _messageError = "";
1141  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
1142 
1143  // Busquem les dades a la taula de mantenimients
1144  Dictionary<string, object> regmante = DB.SQLREGValor("mantes", "pantalla", _nombreMante, _nombreConnex);
1145 
1146  if (regmante.Count == 0)
1147  {
1148  _messageError = "No se ha encontrado el mantenimiento " + _nombreMante + " en el módulo " + _nombreModulo + ".";
1149  return false;
1150  }
1151 
1152  // Busquem la classe
1153  string nomClasse = regmante["clase"].ToString().Trim();
1154 
1155  // Obrir la classe principal
1156  ProjectItem prjItem = AddonsExecute.PRJAddon.ProjectItems.Item("SageAddons.cs");
1157 
1158 
1159  #region Mètode _Extension
1160 
1161  CodeFunction codeFunction = GetCodeElement<CodeFunction>("_Extension", out _messageError, prjItem);
1162 
1163  // Si no existe la función, la creamos
1164  if (codeFunction == null)
1165  {
1166  CodeClass codeClass = GetCodeClass(AddonsExecute.NombreClase, out _messageError, prjItem);
1167 
1168  codeFunction = codeClass.AddFunction("_Extension", vsCMFunction.vsCMFunctionFunction, vsCMTypeRef.vsCMTypeRefObject, -1, vsCMAccess.vsCMAccessPublic);
1169  codeFunction.AddParameter("_key", vsCMTypeRef.vsCMTypeRefString);
1170 
1171  EditPoint editPointC = codeFunction.StartPoint.CreateEditPoint();
1172 
1173  // Modificar la definición del método
1174  editPointC.Insert("/// <summary>" + Environment.NewLine);
1175  editPointC.Indent(null, 2);
1176  editPointC.Insert("/// Método para obtener la instancia de la clase de extensiones desde los documentos" + Environment.NewLine);
1177  editPointC.Indent(null, 2);
1178  editPointC.Insert("/// </summary>" + Environment.NewLine);
1179  editPointC.Indent(null, 2);
1180  editPointC.Insert("/// <param name=\"tcKey\"></param>" + Environment.NewLine);
1181 
1182  editPointC.Indent(null, 2);
1183  editPointC.CharRight(7);
1184  editPointC.Insert("override ");
1185 
1186  // Esborrem la línia que s'ha afegit al crear la funció
1187  editPointC.FindPattern("return default(object);");
1188  editPointC.Delete(23);
1189 
1190  // Insertar instruccions
1191  editPointC.Insert("object loInstancia = null;" + Environment.NewLine);
1192  editPointC.Insert(Environment.NewLine);
1193  editPointC.Indent(null, 3);
1194  editPointC.Insert("_key = _key.ToLower().Trim();" + Environment.NewLine);
1195  editPointC.Insert(Environment.NewLine);
1196  editPointC.Indent(null, 3);
1197  editPointC.Insert("switch (_key)" + Environment.NewLine);
1198  editPointC.Indent(null, 3);
1199  editPointC.Insert("{" + Environment.NewLine);
1200  editPointC.Indent(null, 4);
1201  editPointC.Insert("default:" + Environment.NewLine);
1202  editPointC.Indent(null, 5);
1203  editPointC.Insert("break;" + Environment.NewLine);
1204  editPointC.Indent(null, 3);
1205  editPointC.Insert("}" + Environment.NewLine);
1206  editPointC.Insert(Environment.NewLine);
1207  editPointC.Indent(null, 3);
1208  editPointC.Insert("return loInstancia;" + Environment.NewLine);
1209  }
1210 
1211 
1212  // Insertar la intrucció case
1213 
1214  EditPoint editPoint = codeFunction.StartPoint.CreateEditPoint();
1215 
1216  // Montem la instrucció
1217  string sentence = "case \"" + regmante["pantalla"].ToString().Trim().ToLower() + "\":";
1218 
1219  if (!editPoint.FindPattern(sentence))
1220  {
1221  //_messageError = "Ya se ha definido un enlace para el mantenimiento " + _nombreMante + ". Debe reutilizar el existente.";
1222  //return false;
1223  //}
1224 
1225  // Busquem la posició on posar la nova instrucció
1226  if (editPoint.FindPattern("switch (_key)"))
1227  {
1228  if (editPoint.FindPattern("default:"))
1229  {
1230  lbOk = true;
1231  }
1232  else
1233  {
1234  lbOk = editPoint.FindPattern("case ");
1235  }
1236  }
1237 
1238  if (lbOk == false)
1239  {
1240  _messageError = "No se ha podido determinar la posición de inserción de las instrucciones de código en el método _Extension del fichero SageAddons.cs";
1241  return false;
1242  }
1243 
1244  editPoint.Insert(sentence + Environment.NewLine);
1245  editPoint.Indent(null, 5);
1246  editPoint.Insert("loInstancia = new Negocio.Mantes." + nombreManteExt + "(_mantePrincipal);" + Environment.NewLine);
1247 
1248  // El break
1249  editPoint.Indent(null, 5);
1250  editPoint.Insert("break;" + Environment.NewLine);
1251 
1252  // I la tabulació de la instrucció que ja hi havia
1253  editPoint.StartOfLine();
1254  editPoint.Indent(null, 4);
1255  }
1256 
1257  #endregion Mètode _Extension
1258 
1259 
1260  #region Mètode _BindForm
1261 
1262  codeFunction = null;
1263  codeFunction = GetCodeElement<CodeFunction>("_BindForm", out _messageError, prjItem);
1264 
1265  // Si no existe la función, la creamos
1266  if (codeFunction == null)
1267  {
1268  CodeClass codeClass = GetCodeClass(AddonsExecute.NombreClase, out _messageError, prjItem);
1269 
1270  codeFunction = codeClass.AddFunction("_BindForm", vsCMFunction.vsCMFunctionFunction, vsCMTypeRef.vsCMTypeRefVoid, -1, vsCMAccess.vsCMAccessPublic);
1271  codeFunction.AddParameter("_nombreForm", vsCMTypeRef.vsCMTypeRefString);
1272  codeFunction.AddParameter("_formBase", vsCMTypeRef.vsCMTypeRefObject, -1);
1273 
1274  EditPoint editPointC = codeFunction.StartPoint.CreateEditPoint();
1275 
1276  // Modificar la definición del método
1277  editPointC.Insert("/// <summary>" + Environment.NewLine);
1278  editPointC.Indent(null, 2);
1279  editPointC.Insert("/// Vincula los formularios de la aplicación con los del addon" + Environment.NewLine);
1280  editPointC.Indent(null, 2);
1281  editPointC.Insert("/// </summary>" + Environment.NewLine);
1282  editPointC.Indent(null, 2);
1283  editPointC.Insert("/// <param name=\"_nombreForm\"></param>" + Environment.NewLine);
1284  editPointC.Indent(null, 2);
1285  editPointC.Insert("/// <param name=\"_formBase\"></param>" + Environment.NewLine);
1286 
1287  editPointC.Indent(null, 2);
1288  editPointC.CharRight(7);
1289  editPointC.Insert("override ");
1290 
1291  editPointC.CharRight(35);
1292  editPointC.Delete(6);
1293  editPointC.Insert("sage.ew.formul.FormBase");
1294 
1295  // Insertar instruccions
1296  editPointC.LineDown(2);
1297  editPointC.Indent(null, 3);
1298  editPointC.Insert("string nombreForm = _nombreForm.ToLower().Trim();" + Environment.NewLine);
1299  editPointC.Insert(Environment.NewLine);
1300  editPointC.Indent(null, 3);
1301  editPointC.Insert("// Puede que el formulario sea el FormMante base. En ese caso, utilizamos el nombre de _Pantalla" + Environment.NewLine);
1302  editPointC.Indent(null, 3);
1303  editPointC.Insert("if (nombreForm == \"formmante\")" + Environment.NewLine);
1304  editPointC.Indent(null, 4);
1305  editPointC.Insert("nombreForm = _formBase._Pantalla.ToLower().Trim();" + Environment.NewLine);
1306  editPointC.Insert(Environment.NewLine);
1307  editPointC.Indent(null, 3);
1308  editPointC.Insert("switch (nombreForm)" + Environment.NewLine);
1309  editPointC.Indent(null, 3);
1310  editPointC.Insert("{" + Environment.NewLine);
1311  editPointC.Indent(null, 4);
1312  editPointC.Insert("default:" + Environment.NewLine);
1313  editPointC.Indent(null, 5);
1314  editPointC.Insert("break;" + Environment.NewLine);
1315  editPointC.Indent(null, 3);
1316  editPointC.Insert("}" + Environment.NewLine);
1317  }
1318 
1319  // Insertar la intrucció case
1320 
1321  editPoint = codeFunction.StartPoint.CreateEditPoint();
1322 
1323  // Montem la instrucció
1324  if (regmante["pantalla"].ToString().Trim().ToLower() == "proveed")
1325  {
1326  // Fem una exepció per a proveidors que no coincideix el nom de la classe amb el del form
1327  sentence = "case \"frmproveedor\":";
1328  }
1329  else
1330  {
1331  sentence = "case \"" + "frm" + regmante["pantalla"].ToString().Trim().ToLower() + "\":";
1332  }
1333 
1334  if (!editPoint.FindPattern(sentence))
1335  {
1336  // _messageError = "Ya se ha definido un enlace para el formulario de mantenimiento " + _nombreMante + ". Debe reutilizar el existente.";
1337  // return false;
1338  //}
1339 
1340  // Busquem la posició on posar la nova instrucció
1341  if (editPoint.FindPattern("switch (_nombreForm)"))
1342  {
1343  if (editPoint.FindPattern("default:"))
1344  {
1345  lbOk = true;
1346  }
1347  else
1348  {
1349  lbOk = editPoint.FindPattern("case ");
1350  }
1351  }
1352 
1353  if (lbOk == false)
1354  {
1355  _messageError = "No se ha podido determinar la posición de inserción de las instrucciones de código en el método _BindForm del fichero SageAddons.cs";
1356  return false;
1357  }
1358 
1359  // Insertem el cases,
1360  editPoint.Insert(sentence + Environment.NewLine);
1361  // Afegim també el nom de la classe per a els mantes base
1362  editPoint.Indent(null, 5);
1363  editPoint.Insert("case \"" + regmante["pantalla"].ToString().Trim().ToLower() + "\":" + Environment.NewLine);
1364 
1365  // la instrucció,
1366  editPoint.Indent(null, 5);
1367  editPoint.Insert("Negocio.Mantes." + nombreFormManteExt + " " + nombreFormManteExt.ToLower() + " = new Negocio.Mantes." + nombreFormManteExt + "((sage.ew.formul.Forms.FormMante)_formBase, this);" + Environment.NewLine);
1368 
1369  // el break,
1370  editPoint.Indent(null, 5);
1371  editPoint.Insert("break;" + Environment.NewLine);
1372 
1373  // I la tabulació de la instrucció que ja hi havia
1374  editPoint.StartOfLine();
1375  editPoint.Indent(null, 4);
1376  }
1377 
1378  #endregion Mètode _BindForm
1379 
1380 
1381  // Guardar els canvis al document
1382  prjItem.Save();
1383 
1384  // Guardar cambios al proyecto
1385  AddonsExecute.PRJAddon.Save();
1386 
1387  prjItem = null;
1388 
1389  return lbOk;
1390  }
1391 
1401  public bool ModificarManteTRel(string _nombreManteTRel, string _nombreTabla, string _nombreTablaManteTRel, out string _messageError)
1402  {
1403  bool lbOk = false;
1404 
1405  _messageError = "";
1406  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
1407 
1408 
1409  // Obrir la classe principal
1410  ProjectItem prjItem = AddonsExecute.PRJAddon.ProjectItems.Item("SageAddons.cs");
1411 
1412 
1413  #region Mètode _Extension
1414 
1415  CodeFunction codeFunction = GetCodeElement<CodeFunction>("_ExtensionManteTRel", out _messageError, prjItem);
1416 
1417  // Si no existe la función, la creamos
1418  if (codeFunction == null)
1419  {
1420  CodeClass codeClass = GetCodeClass(AddonsExecute.NombreClase, out _messageError, prjItem);
1421 
1422  codeFunction = codeClass.AddFunction("_ExtensionManteTRel", vsCMFunction.vsCMFunctionFunction, vsCMTypeRef.vsCMTypeRefObject, -1, vsCMAccess.vsCMAccessPublic);
1423  codeFunction.AddParameter("_key", vsCMTypeRef.vsCMTypeRefString);
1424 
1425  EditPoint editPointC = codeFunction.StartPoint.CreateEditPoint();
1426 
1427  // Modificar la definición del método
1428  editPointC.Insert("/// <summary>" + Environment.NewLine);
1429  editPointC.Indent(null, 2);
1430  editPointC.Insert("/// Método para obtener las instancias de clases de extensiones de mantenimientos de tablas relacionadas (ManteTRel)" + Environment.NewLine);
1431  editPointC.Indent(null, 2);
1432  editPointC.Insert("/// </summary>" + Environment.NewLine);
1433  editPointC.Indent(null, 2);
1434  editPointC.Insert("/// <param name=\"_key\">Nombre por el que identificar el mantenimiento de relacionado</param>" + Environment.NewLine);
1435  editPointC.Indent(null, 2); editPointC.Insert("/// <param name=\"_manteTRelPrincipal\">Mantenimiento relacionado principal (el que se va a extender)</param>" + Environment.NewLine);
1436  editPointC.Insert("/// <param name=\"_ordenAddon\">Número de orden en que se cargará el addon y sus columnas</param>" + Environment.NewLine);
1437  editPointC.Indent(null, 2);
1438  editPointC.Insert("/// <returns></returns>" + Environment.NewLine);
1439 
1440  editPointC.Indent(null, 2);
1441  editPointC.CharRight(7);
1442  editPointC.Insert("override ");
1443 
1444  // Esborrem la línia que s'ha afegit al crear la funció
1445  editPointC.FindPattern("return default(object);");
1446  editPointC.Delete(23);
1447 
1448  // Insertar instruccions
1449  editPointC.Insert("object loInstancia = null;" + Environment.NewLine);
1450  editPointC.Insert(Environment.NewLine);
1451  editPointC.Indent(null, 3);
1452  editPointC.Insert("_key = _key.ToLower().Trim();" + Environment.NewLine);
1453  editPointC.Insert(Environment.NewLine);
1454  editPointC.Indent(null, 3);
1455  editPointC.Insert("switch (_key)" + Environment.NewLine);
1456  editPointC.Indent(null, 3);
1457  editPointC.Insert("{" + Environment.NewLine);
1458  editPointC.Indent(null, 4);
1459  editPointC.Insert("default:" + Environment.NewLine);
1460  editPointC.Indent(null, 5);
1461  editPointC.Insert("break;" + Environment.NewLine);
1462  editPointC.Indent(null, 3);
1463  editPointC.Insert("}" + Environment.NewLine);
1464  editPointC.Insert(Environment.NewLine);
1465  editPointC.Indent(null, 3);
1466  editPointC.Insert("return loInstancia;" + Environment.NewLine);
1467  }
1468 
1469 
1470  // Insertar la intrucció case
1471 
1472  EditPoint editPoint = codeFunction.StartPoint.CreateEditPoint();
1473 
1474  // Montem la instrucció
1475  string sentence = "case \"" + _nombreTablaManteTRel.ToString().Trim().ToLower() + "\":";
1476 
1477  if (!editPoint.FindPattern(sentence))
1478  {
1479  // _messageError = "Ya se ha definido un enlace para el mantenimiento " + _nombreManteTRel + ". Debe reutilizar el existente.";
1480  // return false;
1481  //}
1482 
1483  // Busquem la posició on posar la nova instrucció
1484  if (editPoint.FindPattern("switch (_key)"))
1485  {
1486  if (editPoint.FindPattern("default:"))
1487  {
1488  lbOk = true;
1489  }
1490  else
1491  {
1492  lbOk = editPoint.FindPattern("case ");
1493  }
1494  }
1495 
1496  if (lbOk == false)
1497  {
1498  _messageError = "No se ha podido determinar la posición de inserción de las instrucciones de código en el método _Extension del fichero SageAddons.cs";
1499  return false;
1500  }
1501 
1502  editPoint.Insert(sentence + Environment.NewLine);
1503  editPoint.Indent(null, 5);
1504  editPoint.Insert("loInstancia = new Negocio.Clases." + _nombreTabla + "(_manteTRelPrincipal, _ordenAddon);" + Environment.NewLine);
1505 
1506  // El break
1507  editPoint.Indent(null, 5);
1508  editPoint.Insert("break;" + Environment.NewLine);
1509 
1510  // I la tabulació de la instrucció que ja hi havia
1511  editPoint.StartOfLine();
1512  editPoint.Indent(null, 4);
1513  }
1514 
1515  #endregion Mètode _Extension
1516 
1517 
1518  // Guardar els canvis al document
1519  prjItem.Save();
1520 
1521  // Guardar cambios al proyecto
1522  AddonsExecute.PRJAddon.Save();
1523 
1524  prjItem = null;
1525 
1526  return lbOk;
1527  }
1528 
1529 
1539  public bool ModificarUrlAyuda(string tcUrl, out string _messageError)
1540  {
1541  bool lbOk = false;
1542 
1543  _messageError = "";
1544  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
1545 
1546 
1547  // Obrir la classe principal
1548  ProjectItem prjItem = AddonsExecute.PRJAddon.ProjectItems.Item("SageAddons.cs");
1549 
1550  CodeFunction codeFunction = GetCodeElement<CodeFunction>(AddonsExecute.NombreAddon, out _messageError, prjItem);
1551 
1552  // Obtener el valor anterior
1553  string tcUrlAnt = GetUrlAyuda(out _messageError);
1554 
1555  // Si existe _UrlAyudaAddon actualizamos el valor
1556  if (!string.IsNullOrWhiteSpace(tcUrlAnt))
1557  {
1558  try
1559  {
1560  EditPoint editPointIni = codeFunction.StartPoint.CreateEditPoint();
1561  EditPoint editPointFin = codeFunction.StartPoint.CreateEditPoint();
1562  editPointIni.StartOfDocument();
1563  editPointFin.EndOfDocument();
1564 
1565  editPointIni.ReplacePattern(editPointFin, $"\"{tcUrlAnt}\"", $"\"{tcUrl}\"");
1566  }
1567  catch (Exception loEx)
1568  {
1569  string lcMsg = loEx.Message;
1570  }
1571  }
1572  else
1573  {
1574  // Buscamos el final del método e insertamos la instrucción
1575  EditPoint editPoint = codeFunction.StartPoint.CreateEditPoint();
1576 
1577  string sentence = "}";
1578  if (editPoint.FindPattern(sentence))
1579  {
1580  editPoint.Indent(null, 1);
1581  editPoint.Insert($"_UrlAyudaAddon = \"{tcUrl}\";" + Environment.NewLine);
1582  editPoint.StartOfLine();
1583  editPoint.Indent(null, 2);
1584  }
1585 
1586  }
1587 
1588  // Guardar els canvis al document
1589  prjItem.Save();
1590 
1591  // Guardar cambios al proyecto
1592  AddonsExecute.PRJAddon.Save();
1593 
1594  prjItem = null;
1595 
1596  return lbOk;
1597  }
1598 
1599 
1605  public string GetUrlAyuda(out string _messageError)
1606  {
1607  string tcUrl = string.Empty;
1608 
1609  _messageError = "";
1610  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
1611 
1612 
1613  // Abrir la clase principal
1614  ProjectItem prjItem = AddonsExecute.PRJAddon.ProjectItems.Item("SageAddons.cs");
1615 
1616  CodeFunction codeFunction = GetCodeElement<CodeFunction>(AddonsExecute.NombreAddon, out _messageError, prjItem);
1617 
1618  EditPoint editPoint = codeFunction.StartPoint.CreateEditPoint();
1619 
1620  string sentence = "_UrlAyudaAddon";
1621  if (editPoint.FindPattern(sentence))
1622  {
1623  string tcText = editPoint.GetText(editPoint.LineLength).Trim();
1624  int lnPosIni = tcText.IndexOf("\"");
1625  int lnPosFin = tcText.LastIndexOf("\"");
1626  if (lnPosIni > 0 && lnPosFin > 0 && lnPosIni < lnPosFin)
1627  {
1628  tcUrl = tcText.Substring(lnPosIni + 1, lnPosFin - lnPosIni - 1);
1629  }
1630  }
1631 
1632  return tcUrl;
1633  }
1634 
1635 
1636 
1646  public bool CrearExtensionMante(string _nombreModulo, string _nombreMante, string _nombreTabla, string _nombreUserControl, bool _sinTabla, out string _messageError)
1647  {
1648  bool lbOk = true;
1649 
1650  _messageError = "";
1651  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
1652 
1653  string nombreManteExt = "ManteExt" + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(_nombreMante.ToLower()).Trim() + AddonsExecute.NombreAddon;
1654  string nombreFormManteExt = "Form" + nombreManteExt;
1655  string nombreUserControl = _nombreUserControl;
1656  string fieldkey = "";
1657  string propertykey = "";
1658  string sqlfields = "";
1659  string sqlvaules = "";
1660  string sqlfieldsvalues = "";
1661  string sqlSelect = "";
1662  string sqlInsert = "";
1663  string sqlUpdate = "";
1664  string sqlDelete = "";
1665  string coma = "";
1666  string comastr = "";
1667  string comillacoma = "";
1668  string propertyObject = "";
1669  string fieldsClear = "";
1670  string fieldsLoad = "";
1671  string propertyCode = "";
1672  string nombreDataTable = _nombreTabla + "result";
1673  string nombreDataBase = AddonsExecute.NombreAddon.ToUpper();
1674 
1675  string tab = " "; // Tab string 4 spaces
1676 
1677  Char comilles = new Char();
1678  comilles = '"';
1679 
1680  if (nombreUserControl.Substring(0, 3).ToLower() == "usr")
1681  {
1682  nombreUserControl = nombreUserControl.Substring(3);
1683  }
1684 
1685  if (GetSourceFile(nombreManteExt + ".cs") != null)
1686  {
1687  _messageError = "El fichero " + nombreManteExt + ".cs" + " ya existe en el proyecto.";
1688  return true;
1689  }
1690 
1691  string sourcePropertiesCode = Resources.PropertiesUserControls;
1692 
1693  // Propiedades de los campos
1694  foreach (dynamic anyobjectMante in this.CamposNuevoMante)
1695  {
1696  if (anyobjectMante is ObjectsManteProperties)
1697  {
1698  ObjectsManteProperties objectMante = (ObjectsManteProperties)anyobjectMante;
1699 
1700  string nombreControl = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(objectMante.Nombre.ToLower()).Trim();
1701  string nombreCampo = nombreControl;
1702  string nombrePropiedad = "_" + nombreControl;
1703  string nombrePropiedadPrivada = "_private" + nombreControl;
1704 
1705  // Configurar filtros
1706  if (objectMante.EsFiltro)
1707  {
1708  fieldkey = nombreCampo;
1709  propertykey = nombrePropiedad;
1710  }
1711 
1712  // Propiedades para consultas
1713  sqlfields += coma + nombreCampo;
1714  sqlvaules += comastr + "DB.SQLString(this." + nombrePropiedad + ")";
1715  sqlfieldsvalues += comillacoma + nombreCampo + " = " + comilles + " + DB.SQLString(this." + nombrePropiedad + ") + ";
1716 
1717  coma = ", ";
1718  comastr = " + " + comilles + ", " + comilles + " + ";
1719  comillacoma = comilles + ", ";
1720 
1721  // Tipos de campo
1722  if (objectMante.ObjectType == ObjectsManteTypes.TextBox)
1723  {
1724  propertyObject = sourcePropertiesCode;
1725  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
1726  propertyObject = propertyObject.Replace("$privatepropertyname$", nombrePropiedadPrivada);
1727  propertyObject = propertyObject.Replace("$propertyset$", nombrePropiedadPrivada + " = value");
1728  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
1729  propertyObject = propertyObject.Replace("$propertytype$", "string");
1730  propertyObject = propertyObject.Replace("$converto$", "ToString");
1731  propertyObject = propertyObject.Replace("$emptyvalue$", " = String.Empty");
1732  propertyCode += propertyObject;
1733 
1734  if (objectMante.EsFiltro)
1735  {
1736  fieldsClear += tab + tab + tab + tab + "this." + nombrePropiedad + " = _Mante._Codigo;" + Environment.NewLine;
1737  }
1738  else
1739  {
1740  fieldsClear += tab + tab + tab + tab + "this." + nombrePropiedad + " = String.Empty;" + Environment.NewLine;
1741  }
1742 
1743  fieldsLoad += tab + tab + tab + tab + "this." + nombrePropiedad + " = Convert.ToString(" + nombreDataTable + ".Rows[0][" + comilles + nombreCampo + comilles + "]);" + Environment.NewLine;
1744  }
1745 
1746  if (objectMante.ObjectType == ObjectsManteTypes.CheckBox)
1747  {
1748  propertyObject = sourcePropertiesCode;
1749  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
1750  propertyObject = propertyObject.Replace("$privatepropertyname$", nombrePropiedadPrivada);
1751  propertyObject = propertyObject.Replace("$propertyset$", nombrePropiedadPrivada + " = value");
1752  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
1753  propertyObject = propertyObject.Replace("$converto$", "ToBoolean");
1754  propertyObject = propertyObject.Replace("$propertytype$", "bool");
1755  propertyObject = propertyObject.Replace("$emptyvalue$", " = false");
1756  propertyCode += propertyObject;
1757 
1758  fieldsClear += tab + tab + tab + tab + "this." + nombrePropiedad + " = false;" + Environment.NewLine;
1759 
1760  fieldsLoad += tab + tab + tab + tab + "this." + nombrePropiedad + " = Convert.ToBoolean(" + nombreDataTable + ".Rows[0][" + comilles + nombreCampo + comilles + "]);" + Environment.NewLine;
1761  }
1762 
1763  if (objectMante.ObjectType == ObjectsManteTypes.NumericUpDown)
1764  {
1765  propertyObject = sourcePropertiesCode;
1766  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
1767  propertyObject = propertyObject.Replace("$privatepropertyname$", nombrePropiedadPrivada);
1768  propertyObject = propertyObject.Replace("$propertyset$", nombrePropiedadPrivada + " = value");
1769  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
1770  propertyObject = propertyObject.Replace("$propertytype$", "decimal");
1771  propertyObject = propertyObject.Replace("$converto$", "ToDecimal");
1772  propertyObject = propertyObject.Replace("$emptyvalue$", " = 0");
1773  propertyCode += propertyObject;
1774 
1775  fieldsClear += tab + tab + tab + tab + "this." + nombrePropiedad + " = 0;" + Environment.NewLine;
1776 
1777  fieldsLoad += tab + tab + tab + tab + "this." + nombrePropiedad + " = Convert.ToDecimal(" + nombreDataTable + ".Rows[0][" + comilles + nombreCampo + comilles + "]);" + Environment.NewLine;
1778  }
1779 
1780  if (objectMante.ObjectType == ObjectsManteTypes.DateTimePicker)
1781  {
1782  propertyObject = sourcePropertiesCode;
1783  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
1784  propertyObject = propertyObject.Replace("$privatepropertyname$", nombrePropiedadPrivada);
1785  propertyObject = propertyObject.Replace("$propertyset$", nombrePropiedadPrivada + " = value");
1786  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
1787  propertyObject = propertyObject.Replace("$propertytype$", "DateTime");
1788  propertyObject = propertyObject.Replace("$converto$", "ToDateTime");
1789  propertyObject = propertyObject.Replace("$emptyvalue$", " = DateTime.Now.Date");
1790  propertyCode += propertyObject;
1791 
1792  fieldsClear += tab + tab + tab + tab + "this." + nombrePropiedad + " = DateTime.Now.Date;" + Environment.NewLine;
1793 
1794  fieldsLoad += tab + tab + tab + tab + "this." + nombrePropiedad + " = Convert.ToDateTime(" + nombreDataTable + ".Rows[0][" + comilles + nombreCampo + comilles + "]);" + Environment.NewLine;
1795  }
1796 
1797  if (objectMante.ObjectType == ObjectsManteTypes.TxtCodLabel)
1798  {
1799  propertyObject = sourcePropertiesCode;
1800  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
1801  propertyObject = propertyObject.Replace("$privatepropertyname$", nombrePropiedadPrivada);
1802  propertyObject = propertyObject.Replace("$propertyset$", nombrePropiedadPrivada + " = value");
1803  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
1804  propertyObject = propertyObject.Replace("$propertytype$", "string");
1805  propertyObject = propertyObject.Replace("$converto$", "ToString");
1806  propertyObject = propertyObject.Replace("$emptyvalue$", " = String.Empty");
1807  propertyCode += propertyObject;
1808 
1809  fieldsClear += tab + tab + tab + tab + "this." + nombrePropiedad + " = String.Empty;" + Environment.NewLine;
1810 
1811  fieldsLoad += tab + tab + tab + tab + "this." + nombrePropiedad + " = Convert.ToString(" + nombreDataTable + ".Rows[0][" + comilles + nombreCampo + comilles + "]);" + Environment.NewLine;
1812  }
1813  }
1814  }
1815 
1816  if (!_sinTabla)
1817  {
1818  // Instrucción Select
1819  sqlSelect += comilles + "Select " + sqlfields + " " + comilles + " + " + Environment.NewLine;
1820  sqlSelect += tab + tab + tab + tab + comilles + "From " + comilles + " + DB.SQLDatabase(this._DataBase, this._Tabla) + " + comilles + " " + comilles + " + " + Environment.NewLine;
1821  sqlSelect += tab + tab + tab + tab + comilles + "Where " + comilles + " + this._Clave + " + comilles + " = " + comilles + " + DB.SQLString(this." + propertykey + ");" + Environment.NewLine;
1822 
1823  // Instrucción Insert
1824  sqlInsert += comilles + "Insert Into " + comilles + " + DB.SQLDatabase(this._DataBase, this._Tabla) + " + comilles + " " + comilles + " + " + Environment.NewLine;
1825  sqlInsert += tab + tab + tab + tab + tab + comilles + "(" + sqlfields + ") " + comilles + " + " + Environment.NewLine;
1826  sqlInsert += tab + tab + tab + tab + tab + comilles + "Values (" + comilles + " + " + sqlvaules + " + " + comilles + ")" + comilles + ";" + Environment.NewLine;
1827 
1828  // Instrucción Update
1829  sqlUpdate += comilles + "Update " + comilles + " + DB.SQLDatabase(this._DataBase, this._Tabla) + " + comilles + " " + comilles + " + " + Environment.NewLine;
1830  sqlUpdate += tab + tab + tab + tab + tab + comilles + "Set " + sqlfieldsvalues + " " + comilles + " " + comilles + " + " + Environment.NewLine;
1831  sqlUpdate += tab + tab + tab + tab + tab + comilles + "Where " + comilles + " + this._Clave + " + comilles + " = " + comilles + " + DB.SQLString(this." + propertykey + ");" + Environment.NewLine;
1832 
1833  // Instrucción Delete
1834  sqlDelete += comilles + "Delete From " + comilles + " + DB.SQLDatabase(this._DataBase, this._Tabla) + " + comilles + " " + comilles + " + " + Environment.NewLine;
1835  sqlDelete += tab + tab + tab + tab + tab + comilles + "Where " + comilles + " + this._Clave + " + comilles + " = " + comilles + " + DB.SQLString(this." + propertykey + ");" + Environment.NewLine;
1836  }
1837  else
1838  {
1839  sqlSelect = comilles + "" + comilles + ";";
1840  sqlInsert = comilles + "" + comilles + ";";
1841  sqlUpdate = comilles + "" + comilles + ";";
1842  sqlDelete = comilles + "" + comilles + ";";
1843 
1844  _nombreTabla = "";
1845  nombreDataBase = "";
1846  }
1847 
1848  #region Crear el fichero de la extensión del mantenimiento
1849 
1850  string sourceCode = "";
1851  sourceCode = Resources.ManteExtBase;
1852  sourceCode = sourceCode.Replace("$projectname$", AddonsExecute.NombreAddon);
1853  sourceCode = sourceCode.Replace("$manteextname$", nombreManteExt);
1854  sourceCode = sourceCode.Replace("$databasename$", nombreDataBase);
1855  sourceCode = sourceCode.Replace("$tablename$", _nombreTabla);
1856  sourceCode = sourceCode.Replace("$datatablename$", nombreDataTable);
1857  sourceCode = sourceCode.Replace("$fieldkey$", fieldkey);
1858  sourceCode = sourceCode.Replace("$formmanteextname$", nombreFormManteExt);
1859  sourceCode = sourceCode.Replace("$usercontrolname$", nombreUserControl);
1860  sourceCode = sourceCode.Replace("$properties$", propertyCode);
1861  sourceCode = sourceCode.Replace("$fieldsclear$", fieldsClear);
1862  sourceCode = sourceCode.Replace("$fieldsload$", fieldsLoad);
1863  sourceCode = sourceCode.Replace("$sqlselect$", sqlSelect);
1864  sourceCode = sourceCode.Replace("$sqlinsert$", sqlInsert);
1865  sourceCode = sourceCode.Replace("$sqlupdate$", sqlUpdate);
1866  sourceCode = sourceCode.Replace("$sqldelete$", sqlDelete);
1867 
1868  // Crear el fichero
1869  string sourceFile = Path.Combine(AddonsExecute.RutaProject, "Negocio\\Mantes\\") + nombreManteExt + ".cs";
1870  BackupFile(sourceFile);
1871  StreamWriter streamWriter = File.CreateText(sourceFile);
1872  streamWriter.Write(sourceCode);
1873  streamWriter.Close();
1874 
1875  // Añadirlo al proyecto
1876  ProjectItem projectItem = AddonsExecute.PRJAddon.ProjectItems.AddFromFile(sourceFile);
1877 
1878  // Mostrar el código
1879  Window itemWindow = projectItem.Open();
1880  itemWindow.Activate();
1881 
1882  #endregion Crear el fichero de la extensión del mantenimiento
1883 
1884 
1885  // Guardar cambios al proyecto
1886  AddonsExecute.PRJAddon.Save();
1887 
1888  projectItem = null;
1889 
1890  return lbOk;
1891  }
1892 
1903  public bool CrearNuevoMantenimiento(string nombreMante, string nombreTabla, string tituloForm, string textoMenu, bool addCeros, out string messageError)
1904  {
1905  bool lbOk = true;
1906 
1907  string nombreEWMante = "";
1908  string nombreFormMante = "";
1909  string nombretxtCodLabel = "txt" + nombreMante;
1910  string nombretxtfiltrodesdehasta = "txt" + nombreMante + "DesdeHasta";
1911  string caracterrelleno = " ";
1912  string tituloMante = "Mantenimiento de " + tituloForm;
1913  string txtcodlabellenght = Convert.ToString(FuncsDataBase.GetLenCampo(AddonsExecute.NombreAddon.ToUpper(), nombreTabla, "codigo"));
1914 
1915  StreamWriter streamWriter;
1916  ProjectItem projectItem;
1917  Window itemWindow;
1918 
1919  messageError = "";
1920  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
1921 
1922 
1923  if (addCeros)
1924  {
1925  caracterrelleno = "0";
1926  }
1927 
1928  // Comprobaciones
1929 
1930  // Existen ficheros con el mismo nombre?
1931  nombreEWMante = nombreMante.Trim() + ".cs";
1932  if (SourceFileExist(nombreEWMante))
1933  {
1934  messageError = "Ya existe un fichero en el proyecto con el nombre indicado. (" + nombreEWMante + ")" + Environment.NewLine;
1935  projectItem = null;
1936  return false;
1937  }
1938 
1939  nombreFormMante = "frm" + nombreMante.Trim();
1940  if (SourceFileExist(nombreFormMante + ".cs"))
1941  {
1942  messageError = "Ya existe un fichero en el proyecto con el nombre indicado. (" + nombreFormMante + ")" + Environment.NewLine;
1943  projectItem = null;
1944  return false;
1945  }
1946 
1947  // Comprobar directorios
1948  if (!SourceFileExist("Mantes"))
1949  {
1950 
1951  }
1952 
1953  string bindingsCode = "";
1954  string blockCode = "";
1955  string propertyCode = "";
1956  string instanceObjectsCode = "";
1957  string controlsAddCode = "";
1958  string controlsDefCode = "";
1959  string controlDeclare = "";
1960  string paginasAddCode = "";
1961 
1962  int leftlabel = 37;
1963  int leftcontrol = 137;
1964  int[] toplabel = new int[] { 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13 };
1965  int[] topcontrol = new int[] { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 };
1966  int heightcontrol = 24;
1967  int widthcontrol = 100;
1968  int maxlength = 0;
1969  int tabindex = 1;
1970 
1971  string ts = " "; // Tab string 4 spaces
1972 
1973  string sourceBindingsCode = Resources.ControlBinding;
1974  string sourcePropertiesCode = Resources.PropertiesMantes;
1975  string sourceLabelCode = Resources.FormManteLabel;
1976  string sourceTextBoxCode = Resources.FormManteTextBox;
1977  string sourceCheckBoxCode = Resources.FormManteCheckBox;
1978  string sourceNumericUpDownCode = Resources.FormManteNumericUpDown;
1979  string sourceDateTimeCode = Resources.FormManteDateTime;
1980  string sourceTxtCodLabelCode = Resources.FormManteTxtCodLabel;
1981  string sourceTabPageCode = Resources.FormManteTabPage;
1982 
1983  string showPageCode = "";
1984  string formDefCode = Resources.FormManteForm;
1985  if (this.CamposNuevoMante.Count > 4)
1986  {
1987  // Si es un mantenimiento de código y nombre no hay que configurar nada. Y evitar configurar algo porque el formulario crece...
1988  formDefCode = Resources.FormManteFormExt;
1989  }
1990  formDefCode = formDefCode.Replace("$mantename$", nombreMante);
1991  formDefCode = formDefCode.Replace("$formname$", nombreFormMante);
1992  formDefCode = formDefCode.Replace("$mantetittle$", tituloMante);
1993  formDefCode = formDefCode.Replace("$caracterrelleno$", caracterrelleno);
1994 
1995  // Configuramos las páginas
1996  if (this.CamposNuevoMante.Count > 0)
1997  {
1998  ManteProperties manteProperties = this.CamposNuevoMante[0];
1999  if (manteProperties.NumTabs > 1)
2000  {
2001  foreach (dynamic anyobjectMante in this.CamposNuevoMante)
2002  {
2003  if (anyobjectMante is PaginaManteProperties)
2004  {
2005  PaginaManteProperties pagina = (PaginaManteProperties)anyobjectMante;
2006 
2007  string nombrePagina = pagina.Nombre;
2008 
2009  if (nombrePagina == "tpGeneral")
2010  {
2011  Char comilles = new Char();
2012  comilles = '"';
2013  controlsDefCode += ts + ts + ts + "this.tpGeneral.Text = " + comilles + pagina.Titulo + comilles + ";" + Environment.NewLine;
2014  }
2015  else
2016  {
2017  instanceObjectsCode += ts + ts + ts + "this." + nombrePagina + " = new sage.ew.objetos.ewTabPage();" + Environment.NewLine;
2018  controlDeclare += ts + ts + "private sage.ew.objetos.ewTabPage " + nombrePagina + ";" + Environment.NewLine;
2019 
2020  paginasAddCode += ts + ts + ts + "this.ewtcPaginas.Controls.Add(this." + nombrePagina + ");" + Environment.NewLine;
2021 
2022  string objectDef = sourceTabPageCode;
2023  objectDef = objectDef.Replace("$objectname$", nombrePagina);
2024  objectDef = objectDef.Replace("$objectcaption$", pagina.Titulo);
2025  objectDef = objectDef.Replace("$tabindex$", tabindex.ToString());
2026 
2027  controlsDefCode += objectDef;
2028  tabindex++;
2029  }
2030 
2031  paginasAddCode += ts + ts + ts + "this.ewtcPaginas.Controls.SetChildIndex(this." + nombrePagina + ", 0);" + Environment.NewLine;
2032  }
2033  }
2034 
2035  controlsDefCode = paginasAddCode + controlsDefCode;
2036  }
2037  }
2038 
2039  // Si hay propiedades avanzadas
2040  foreach (dynamic anyobjectMante in this.CamposNuevoMante)
2041  {
2042  if (anyobjectMante is ObjectsManteProperties)
2043  {
2044  ObjectsManteProperties objectMante = (ObjectsManteProperties)anyobjectMante;
2045 
2046  string nombreCampo = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(objectMante.Nombre.ToLower()).Trim();
2047  string nombrePropiedad = "_" + nombreCampo;
2048  string tituloCampo = objectMante.TituloCampo + ":";
2049 
2050  string bindingObject = "";
2051  string propertyObject = "";
2052  string objectDef = "";
2053 
2054  string nomPagina = "this.tpGeneral";
2055  if (objectMante.Tab > 1)
2056  {
2057  nomPagina = "this.tpPagina" + objectMante.Tab.ToString();
2058  }
2059 
2060  // Hay que mostrar label?
2061  if (objectMante.Visible && objectMante.MostrarTitulo)
2062  {
2063  instanceObjectsCode += ts + ts + ts + "this.ewlabel" + nombreCampo + " = new sage.ew.objetos.ewlabel();" + Environment.NewLine;
2064 
2065  controlsAddCode += ts + ts + ts + nomPagina + ".Controls.Add(this.ewlabel" + nombreCampo + ");" + Environment.NewLine;
2066 
2067  controlDeclare += ts + ts + "private sage.ew.objetos.ewlabel ewlabel" + nombreCampo + ";" + Environment.NewLine;
2068 
2069  objectDef = sourceLabelCode;
2070  objectDef = objectDef.Replace("$objectname$", "ewlabel" + nombreCampo);
2071  objectDef = objectDef.Replace("$objectcaption$", tituloCampo);
2072  objectDef = objectDef.Replace("$left$", leftlabel.ToString());
2073  objectDef = objectDef.Replace("$top$", toplabel[objectMante.Tab - 1].ToString());
2074  objectDef = objectDef.Replace("$tabindex$", tabindex.ToString());
2075 
2076  controlsDefCode += objectDef;
2077  tabindex++;
2078  }
2079 
2080  if (objectMante.ObjectType == ObjectsManteTypes.TextBox)
2081  {
2082  if (objectMante.Visible)
2083  {
2084  bindingObject = sourceBindingsCode;
2085  bindingObject = bindingObject.Replace("$objectname$", "ewtextbox" + nombreCampo);
2086  bindingObject = bindingObject.Replace("$propertybinding$", "Text");
2087  bindingObject = bindingObject.Replace("$propertyname$", nombrePropiedad);
2088  bindingObject = bindingObject.Replace("$negocioclass$", "_ewMante");
2089  bindingsCode += bindingObject;
2090 
2091  blockCode += ts + ts + ts + "ewtextbox" + nombreCampo + ".ReadOnly = bloquearControles;" + Environment.NewLine;
2092 
2093  instanceObjectsCode += ts + ts + ts + "this.ewtextbox" + nombreCampo + " = new sage.ew.objetos.ewtextbox();" + Environment.NewLine;
2094 
2095  controlsAddCode += ts + ts + ts + nomPagina + ".Controls.Add(this.ewtextbox" + nombreCampo + ");" + Environment.NewLine;
2096 
2097  controlDeclare += ts + ts + "private sage.ew.objetos.ewtextbox ewtextbox" + nombreCampo + ";" + Environment.NewLine;
2098 
2099  objectDef = sourceTextBoxCode;
2100  objectDef = objectDef.Replace("$objectname$", "ewtextbox" + nombreCampo);
2101  objectDef = objectDef.Replace("$left$", leftcontrol.ToString());
2102  objectDef = objectDef.Replace("$top$", topcontrol[objectMante.Tab - 1].ToString());
2103  objectDef = objectDef.Replace("$width$", widthcontrol.ToString());
2104  objectDef = objectDef.Replace("$height$", heightcontrol.ToString());
2105  objectDef = objectDef.Replace("$maxlength$", maxlength.ToString());
2106  objectDef = objectDef.Replace("$tabindex$", tabindex.ToString());
2107 
2108  controlsDefCode += objectDef;
2109  tabindex++;
2110  }
2111 
2112  propertyObject = sourcePropertiesCode;
2113  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
2114  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
2115  propertyObject = propertyObject.Replace("$propertytype$", "string");
2116  propertyObject = propertyObject.Replace("$converto$", "ToString");
2117  propertyObject = propertyObject.Replace("$emptyvalue$", "String.Empty");
2118  propertyCode += propertyObject;
2119  }
2120 
2121  if (objectMante.ObjectType == ObjectsManteTypes.CheckBox)
2122  {
2123  if (objectMante.Visible)
2124  {
2125  bindingObject = sourceBindingsCode;
2126  bindingObject = bindingObject.Replace("$objectname$", "ewcheckbox" + nombreCampo);
2127  bindingObject = bindingObject.Replace("$propertybinding$", "Checked");
2128  bindingObject = bindingObject.Replace("$propertyname$", nombrePropiedad);
2129  bindingObject = bindingObject.Replace("$negocioclass$", "_ewMante");
2130  bindingsCode += bindingObject;
2131 
2132  blockCode += ts + ts + ts + "ewcheckbox" + nombreCampo + ".Enabled = !bloquearControles;" + Environment.NewLine;
2133 
2134  instanceObjectsCode += ts + ts + ts + "this.ewcheckbox" + nombreCampo + " = new sage.ew.objetos.ewcheckbox();" + Environment.NewLine;
2135 
2136  controlsAddCode += ts + ts + ts + nomPagina + ".Controls.Add(this.ewcheckbox" + nombreCampo + ");" + Environment.NewLine;
2137 
2138  controlDeclare += ts + ts + "private sage.ew.objetos.ewcheckbox ewcheckbox" + nombreCampo + ";" + Environment.NewLine;
2139 
2140  objectDef = sourceCheckBoxCode;
2141  objectDef = objectDef.Replace("$objectname$", "ewcheckbox" + nombreCampo);
2142  objectDef = objectDef.Replace("$left$", leftcontrol.ToString());
2143  objectDef = objectDef.Replace("$top$", (toplabel[objectMante.Tab - 1] + 1).ToString());
2144  objectDef = objectDef.Replace("$width$", widthcontrol.ToString());
2145  objectDef = objectDef.Replace("$height$", heightcontrol.ToString());
2146  objectDef = objectDef.Replace("$maxlength$", maxlength.ToString());
2147  objectDef = objectDef.Replace("$tabindex$", tabindex.ToString());
2148  if (objectMante.MostrarTitulo)
2149  {
2150  objectDef = objectDef.Replace("$objectcaption$", "");
2151  }
2152  else
2153  {
2154  objectDef = objectDef.Replace("$objectcaption$", tituloCampo);
2155  }
2156 
2157  controlsDefCode += objectDef;
2158  tabindex++;
2159  }
2160 
2161  propertyObject = sourcePropertiesCode;
2162  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
2163  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
2164  propertyObject = propertyObject.Replace("$converto$", "ToBoolean");
2165  propertyObject = propertyObject.Replace("$propertytype$", "bool");
2166  propertyObject = propertyObject.Replace("$emptyvalue$", "false");
2167  propertyCode += propertyObject;
2168  }
2169 
2170  if (objectMante.ObjectType == ObjectsManteTypes.NumericUpDown)
2171  {
2172  if (objectMante.Visible)
2173  {
2174  bindingObject = sourceBindingsCode;
2175  bindingObject = bindingObject.Replace("$objectname$", "ewnumericupdown" + nombreCampo);
2176  bindingObject = bindingObject.Replace("$propertybinding$", "Value");
2177  bindingObject = bindingObject.Replace("$propertyname$", nombrePropiedad);
2178  bindingObject = bindingObject.Replace("$negocioclass$", "_ewMante");
2179  bindingsCode += bindingObject;
2180 
2181  blockCode += ts + ts + ts + "ewnumericupdown" + nombreCampo + ".ReadOnly = bloquearControles;" + Environment.NewLine;
2182 
2183  instanceObjectsCode += ts + ts + ts + "this.ewnumericupdown" + nombreCampo + " = new sage.ew.objetos.ewnumericupdown();" + Environment.NewLine;
2184 
2185  controlsAddCode += ts + ts + ts + nomPagina + ".Controls.Add(this.ewnumericupdown" + nombreCampo + ");" + Environment.NewLine;
2186 
2187  controlDeclare += ts + ts + "private sage.ew.objetos.ewnumericupdown ewnumericupdown" + nombreCampo + ";" + Environment.NewLine;
2188 
2189  objectDef = sourceNumericUpDownCode;
2190  objectDef = objectDef.Replace("$objectname$", "ewnumericupdown" + nombreCampo);
2191  objectDef = objectDef.Replace("$left$", leftcontrol.ToString());
2192  objectDef = objectDef.Replace("$top$", topcontrol[objectMante.Tab - 1].ToString());
2193  objectDef = objectDef.Replace("$width$", widthcontrol.ToString());
2194  objectDef = objectDef.Replace("$height$", heightcontrol.ToString());
2195  objectDef = objectDef.Replace("$maxlength$", maxlength.ToString());
2196  objectDef = objectDef.Replace("$tabindex$", tabindex.ToString());
2197  objectDef = objectDef.Replace("$decimalplaces$", objectMante.NumericUpDownDecimals.ToString());
2198  objectDef = objectDef.Replace("$maximum$", objectMante.NumericUpDownMaximum.ToString());
2199  objectDef = objectDef.Replace("$minimum$", objectMante.NumericUpDownMinimum.ToString());
2200  objectDef = objectDef.Replace("$increment$", objectMante.NumericUpDownIncrement.ToString());
2201 
2202  controlsDefCode += objectDef;
2203  tabindex++;
2204  }
2205 
2206  propertyObject = sourcePropertiesCode;
2207  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
2208  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
2209  propertyObject = propertyObject.Replace("$propertytype$", "decimal");
2210  propertyObject = propertyObject.Replace("$converto$", "ToDecimal");
2211  propertyObject = propertyObject.Replace("$emptyvalue$", "0");
2212  propertyCode += propertyObject;
2213  }
2214 
2215  if (objectMante.ObjectType == ObjectsManteTypes.DateTimePicker)
2216  {
2217  if (objectMante.Visible)
2218  {
2219  bindingObject = sourceBindingsCode;
2220  bindingObject = bindingObject.Replace("$objectname$", "ewdatetime" + nombreCampo);
2221  bindingObject = bindingObject.Replace("$propertybinding$", "Value");
2222  bindingObject = bindingObject.Replace("$propertyname$", nombrePropiedad);
2223  bindingObject = bindingObject.Replace("$negocioclass$", "_ewMante");
2224  bindingsCode += bindingObject;
2225 
2226  blockCode += ts + ts + ts + "ewdatetime" + nombreCampo + ".Enabled = !bloquearControles;" + Environment.NewLine;
2227 
2228  instanceObjectsCode += ts + ts + ts + "this.ewdatetime" + nombreCampo + " = new sage.ew.objetos.ewdatetime();" + Environment.NewLine;
2229 
2230  controlsAddCode += ts + ts + ts + nomPagina + ".Controls.Add(this.ewdatetime" + nombreCampo + ");" + Environment.NewLine;
2231 
2232  controlDeclare += ts + ts + "private sage.ew.objetos.ewdatetime ewdatetime" + nombreCampo + ";" + Environment.NewLine;
2233 
2234  objectDef = sourceDateTimeCode;
2235  objectDef = objectDef.Replace("$objectname$", "ewdatetime" + nombreCampo);
2236  objectDef = objectDef.Replace("$left$", leftcontrol.ToString());
2237  objectDef = objectDef.Replace("$top$", topcontrol[objectMante.Tab - 1].ToString());
2238  objectDef = objectDef.Replace("$width$", widthcontrol.ToString());
2239  objectDef = objectDef.Replace("$height$", heightcontrol.ToString());
2240  objectDef = objectDef.Replace("$maxlength$", maxlength.ToString());
2241  objectDef = objectDef.Replace("$tabindex$", tabindex.ToString());
2242 
2243  controlsDefCode += objectDef;
2244  tabindex++;
2245  }
2246 
2247  propertyObject = sourcePropertiesCode;
2248  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
2249  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
2250  propertyObject = propertyObject.Replace("$propertytype$", "DateTime");
2251  propertyObject = propertyObject.Replace("$converto$", "ToDateTime");
2252  propertyObject = propertyObject.Replace("$emptyvalue$", "DateTime.Now.Date");
2253  propertyCode += propertyObject;
2254  }
2255 
2256  if (objectMante.ObjectType == ObjectsManteTypes.TxtCodLabel)
2257  {
2258  if (objectMante.Visible)
2259  {
2260  bindingObject = sourceBindingsCode;
2261  bindingObject = bindingObject.Replace("$objectname$", "txt" + nombreCampo);
2262  bindingObject = bindingObject.Replace("$propertybinding$", "_Codigo");
2263  bindingObject = bindingObject.Replace("$propertyname$", nombrePropiedad);
2264  bindingObject = bindingObject.Replace("$negocioclass$", "_ewMante");
2265  bindingsCode += bindingObject;
2266 
2267  //objectMante.TxtCodLabel
2268 
2269  blockCode += ts + ts + ts + "txt" + nombreCampo + "._ReadOnly = bloquearControles;" + Environment.NewLine;
2270 
2271  instanceObjectsCode += ts + ts + ts + "this.txt" + nombreCampo + " = new " + objectMante.TxtCodLabel + "();" + Environment.NewLine;
2272 
2273  controlsAddCode += ts + ts + ts + nomPagina + ".Controls.Add(this.txt" + nombreCampo + ");" + Environment.NewLine;
2274 
2275  controlDeclare += ts + ts + "private " + objectMante.TxtCodLabel + " txt" + nombreCampo + ";" + Environment.NewLine;
2276 
2277  objectDef = sourceTxtCodLabelCode;
2278  objectDef = objectDef.Replace("$objectname$", "txt" + nombreCampo);
2279  objectDef = objectDef.Replace("$left$", leftcontrol.ToString());
2280  objectDef = objectDef.Replace("$top$", topcontrol[objectMante.Tab - 1].ToString());
2281  objectDef = objectDef.Replace("$width$", widthcontrol.ToString());
2282  objectDef = objectDef.Replace("$height$", (heightcontrol + 1).ToString());
2283  objectDef = objectDef.Replace("$maxlength$", maxlength.ToString());
2284  objectDef = objectDef.Replace("$tabindex$", tabindex.ToString());
2285 
2286  controlsDefCode += objectDef;
2287  tabindex++;
2288  }
2289 
2290  propertyObject = sourcePropertiesCode;
2291  propertyObject = propertyObject.Replace("$propertyname$", nombrePropiedad);
2292  propertyObject = propertyObject.Replace("$fieldname$", nombreCampo.ToUpper());
2293  propertyObject = propertyObject.Replace("$propertytype$", "string");
2294  propertyObject = propertyObject.Replace("$converto$", "ToString");
2295  propertyObject = propertyObject.Replace("$emptyvalue$", "String.Empty");
2296  propertyCode += propertyObject;
2297  }
2298 
2299  if (objectMante.Visible)
2300  {
2301  topcontrol[objectMante.Tab - 1] += heightcontrol + 6;
2302  toplabel[objectMante.Tab - 1] += heightcontrol + 6;
2303  }
2304  }
2305  }
2306 
2307 
2308  string sourceCode = "";
2309  string sourceFile = "";
2310 
2311  // ewMante
2312  // Recuparar el codi i substituir parametres per a la classe de negoci
2313  sourceCode = Resources.ewMante;
2314  sourceCode = sourceCode.Replace("$projectname$", AddonsExecute.NombreAddon);
2315  sourceCode = sourceCode.Replace("$mantename$", nombreMante);
2316  sourceCode = sourceCode.Replace("$databasename$", AddonsExecute.NombreAddon.ToUpper());
2317  sourceCode = sourceCode.Replace("$tablename$", nombreTabla);
2318  sourceCode = sourceCode.Replace("$mantetittle$", tituloMante);
2319  sourceCode = sourceCode.Replace("$formname$", nombreFormMante);
2320  sourceCode = sourceCode.Replace("$caracterrelleno$", caracterrelleno);
2321  sourceCode = sourceCode.Replace("$properties$", propertyCode);
2322 
2323  // Crear el fichero
2324  sourceFile = Path.Combine(AddonsExecute.RutaProject, "Negocio\\Mantes\\") + nombreEWMante;
2325  BackupFile(sourceFile);
2326  streamWriter = File.CreateText(sourceFile);
2327  streamWriter.Write(sourceCode);
2328  streamWriter.Close();
2329 
2330  // Añadirlo al proyecto
2331  projectItem = AddonsExecute.PRJAddon.ProjectItems.AddFromFile(sourceFile);
2332  itemWindow = projectItem.Open();
2333  itemWindow.Activate();
2334 
2335 
2336  // FormMante
2337  // Recuparar el codi i substituir parametres per al formulari
2338  sourceCode = Resources.FormMante;
2339  sourceCode = sourceCode.Replace("$projectname$", AddonsExecute.NombreAddon);
2340  sourceCode = sourceCode.Replace("$mantename$", nombreMante);
2341  sourceCode = sourceCode.Replace("$databasename$", AddonsExecute.NombreAddon.ToUpper());
2342  sourceCode = sourceCode.Replace("$tablename$", nombreTabla);
2343  sourceCode = sourceCode.Replace("$mantetittle$", tituloMante);
2344  sourceCode = sourceCode.Replace("$formname$", nombreFormMante);
2345  sourceCode = sourceCode.Replace("$caracterrelleno$", caracterrelleno);
2346  sourceCode = sourceCode.Replace("$bindings$", bindingsCode);
2347  sourceCode = sourceCode.Replace("$bloqueos$", blockCode);
2348 
2349  // Crear el fichero
2350  sourceFile = Path.Combine(AddonsExecute.RutaProject, "Visual\\Forms\\") + nombreFormMante + ".cs";
2351  BackupFile(sourceFile);
2352  streamWriter = File.CreateText(sourceFile);
2353  streamWriter.Write(sourceCode);
2354  streamWriter.Close();
2355 
2356  // Añadirlo al proyecto
2357  projectItem = AddonsExecute.PRJAddon.ProjectItems.AddFromFile(sourceFile);
2358 
2359  // Mostrar el código
2360  itemWindow = projectItem.Open();
2361  itemWindow.Activate();
2362 
2363 
2364  // FormMante.Designer
2365  // Recuparar el codi i substituir parametres per al formulari
2366  sourceCode = Resources.FormMante_Designer;
2367  sourceCode = sourceCode.Replace("$projectname$", AddonsExecute.NombreAddon);
2368  sourceCode = sourceCode.Replace("$mantename$", nombreMante);
2369  sourceCode = sourceCode.Replace("$databasename$", AddonsExecute.NombreAddon.ToUpper());
2370  sourceCode = sourceCode.Replace("$tablename$", nombreTabla);
2371  sourceCode = sourceCode.Replace("$mantetittle$", tituloMante);
2372  sourceCode = sourceCode.Replace("$formname$", nombreFormMante);
2373  sourceCode = sourceCode.Replace("$caracterrelleno$", caracterrelleno);
2374  sourceCode = sourceCode.Replace("$instanceobjects$", instanceObjectsCode);
2375  sourceCode = sourceCode.Replace("$controlsadd$", controlsAddCode);
2376  sourceCode = sourceCode.Replace("$showpages$", showPageCode);
2377  sourceCode = sourceCode.Replace("$controlsdef$", controlsDefCode);
2378  sourceCode = sourceCode.Replace("$formdef$", formDefCode);
2379  sourceCode = sourceCode.Replace("$controlsdeclares$", controlDeclare);
2380 
2381  // Crear el fichero
2382  sourceFile = Path.Combine(AddonsExecute.RutaProject, "Visual\\Forms\\") + nombreFormMante + ".Designer.cs";
2383  BackupFile(sourceFile);
2384  streamWriter = File.CreateText(sourceFile);
2385 
2386  // Mostrar el código
2387  streamWriter.Write(sourceCode);
2388  streamWriter.Close();
2389 
2390  // Añadirlo al proyecto
2391  projectItem = AddonsExecute.PRJAddon.ProjectItems.AddFromFile(sourceFile);
2392 
2393 
2394  // txtcodlabel
2395  sourceCode = Resources.txtCodLabel;
2396  sourceCode = sourceCode.Replace("$projectname$", AddonsExecute.NombreAddon);
2397  sourceCode = sourceCode.Replace("$mantename$", nombreMante);
2398  sourceCode = sourceCode.Replace("$nombretxtcodlabel$", nombretxtCodLabel);
2399  sourceCode = sourceCode.Replace("$titulolistado$", tituloForm.ToLower());
2400  sourceCode = sourceCode.Replace("$databasename$", AddonsExecute.NombreAddon.ToUpper());
2401  sourceCode = sourceCode.Replace("$tablename$", nombreTabla);
2402  sourceCode = sourceCode.Replace("$mantetittle$", tituloMante);
2403  sourceCode = sourceCode.Replace("$formname$", nombreFormMante);
2404  sourceCode = sourceCode.Replace("$caracterrelleno$", caracterrelleno);
2405  sourceCode = sourceCode.Replace("$txtcodlabellenght$", txtcodlabellenght);
2406 
2407  // Crear el fichero
2408  sourceFile = Path.Combine(AddonsExecute.RutaProject, "Visual\\UserControls\\") + nombretxtCodLabel + ".cs";
2409  BackupFile(sourceFile);
2410  streamWriter = File.CreateText(sourceFile);
2411 
2412  // Mostrar el código
2413  streamWriter.Write(sourceCode);
2414  streamWriter.Close();
2415 
2416  // Añadirlo al proyecto
2417  projectItem = AddonsExecute.PRJAddon.ProjectItems.AddFromFile(sourceFile);
2418 
2419 
2420  // txtfiltrodesdehasta
2421  sourceCode = Resources.txtFiltroDesdeHasta;
2422  sourceCode = sourceCode.Replace("$projectname$", AddonsExecute.NombreAddon);
2423  sourceCode = sourceCode.Replace("$mantename$", nombreMante);
2424  sourceCode = sourceCode.Replace("$nombretxtcodlabel$", nombretxtCodLabel);
2425  sourceCode = sourceCode.Replace("$nombretxtfiltrodesdehasta$", nombretxtfiltrodesdehasta);
2426  sourceCode = sourceCode.Replace("$titulolistado$", tituloForm.ToLower());
2427  sourceCode = sourceCode.Replace("$databasename$", AddonsExecute.NombreAddon.ToUpper());
2428  sourceCode = sourceCode.Replace("$tablename$", nombreTabla);
2429  sourceCode = sourceCode.Replace("$mantetittle$", tituloMante);
2430  sourceCode = sourceCode.Replace("$formname$", nombreFormMante);
2431  sourceCode = sourceCode.Replace("$caracterrelleno$", caracterrelleno);
2432  sourceCode = sourceCode.Replace("$txtcodlabellenght$", txtcodlabellenght);
2433 
2434  // Crear el fichero
2435  sourceFile = Path.Combine(AddonsExecute.RutaProject, "Visual\\UserControls\\") + nombretxtfiltrodesdehasta + ".cs";
2436  BackupFile(sourceFile);
2437  streamWriter = File.CreateText(sourceFile);
2438 
2439  // Mostrar el código
2440  streamWriter.Write(sourceCode);
2441  streamWriter.Close();
2442 
2443  // Añadirlo al proyecto
2444  projectItem = AddonsExecute.PRJAddon.ProjectItems.AddFromFile(sourceFile);
2445 
2446 
2448  //sourceCode = Resources.txtFiltroDesdeHasta_Designer;
2449  //sourceCode = sourceCode.Replace("$projectname$", AddonsExecute.NombreAddon);
2450  //sourceCode = sourceCode.Replace("$mantename$", nombreMante);
2451  //sourceCode = sourceCode.Replace("$nombretxtcodlabel$", nombretxtCodLabel);
2452  //sourceCode = sourceCode.Replace("$nombretxtfiltrodesdehasta$", nombretxtfiltrodesdehasta);
2453  //sourceCode = sourceCode.Replace("$titulolistado$", tituloForm.ToLower());
2454  //sourceCode = sourceCode.Replace("$databasename$", AddonsExecute.NombreAddon.ToUpper());
2455  //sourceCode = sourceCode.Replace("$tablename$", nombreTabla);
2456  //sourceCode = sourceCode.Replace("$mantetittle$", tituloMante);
2457  //sourceCode = sourceCode.Replace("$formname$", nombreFormMante);
2458  //sourceCode = sourceCode.Replace("$caracterrelleno$", caracterrelleno);
2459  //sourceCode = sourceCode.Replace("$txtcodlabellenght$", txtcodlabellenght);
2460 
2462  //sourceFile = Path.Combine(AddonsExecute.RutaProject, "Visual\\UserControls\\") + nombretxtfiltrodesdehasta + ".Designer.cs";
2463  //streamWriter = File.CreateText(sourceFile);
2464 
2466  //streamWriter.Write(sourceCode);
2467  //streamWriter.Close();
2468 
2470  //projectItem = AddonsExecute.PRJAddon.ProjectItems.AddFromFile(sourceFile);
2471 
2472  // Guardar cambios al proyecto
2473  AddonsExecute.PRJAddon.Save();
2474 
2475  projectItem = null;
2476 
2477  return lbOk;
2478  }
2479 
2485  public bool SourceFileExist(string fileName, ProjectItems projectItems = null)
2486  {
2487  bool exist = false;
2488  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
2489 
2490 
2491  if (projectItems == null)
2492  {
2493  projectItems = AddonsExecute.PRJAddon.ProjectItems;
2494  }
2495 
2496  foreach (ProjectItem prjItem in projectItems )
2497  {
2498  if (prjItem.Name == fileName)
2499  {
2500  exist = true;
2501  }
2502  else
2503  {
2504  if (prjItem.ProjectItems.Count > 0)
2505  {
2506  exist = SourceFileExist(fileName, prjItem.ProjectItems);
2507  }
2508  }
2509 
2510  if (exist == true)
2511  {
2512  break;
2513  }
2514  }
2515 
2516  return exist;
2517  }
2518 
2524  public bool SourceFolderExist(string fileName)
2525  {
2526  bool exist = false;
2527  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
2528 
2529 
2530  foreach (ProjectItem prjItem in AddonsExecute.PRJAddon.ProjectItems)
2531  {
2532  if (prjItem.Name == fileName)
2533  {
2534  exist = true;
2535  break;
2536  }
2537  }
2538 
2539  return exist;
2540  }
2541 
2546  public void BackupFile(string sourcefile)
2547  {
2548  // Renombramos el fichero
2549  string sourcefiletebak = sourcefile + ".bak";
2550 
2551  if (File.Exists(sourcefile))
2552  {
2553  File.Copy(sourcefile, sourcefiletebak, true);
2554  }
2555  }
2556 
2562  public List<string> GetSourceFilesFromPath(string _path)
2563  {
2564  List<string> sourceFiles = new List<string>();
2565  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
2566 
2567 
2568  _path = Path.Combine(AddonsExecute.RutaProject, _path);
2569  ProjectItem projectItem = GetSourcePath(_path);
2570 
2571  if (projectItem != null)
2572  {
2573  foreach (ProjectItem prjItem in projectItem.ProjectItems)
2574  {
2575  sourceFiles.Add(Path.GetFileNameWithoutExtension(prjItem.Name));
2576  }
2577  }
2578 
2579  return sourceFiles;
2580  }
2581 
2588  public ProjectItem GetSourcePath(string _path, ProjectItems projectItems = null)
2589  {
2590  ProjectItem projectItem = null;
2591  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
2592 
2593 
2594  if (projectItems == null)
2595  {
2596  projectItems = AddonsExecute.PRJAddon.ProjectItems;
2597  }
2598 
2599  foreach (ProjectItem prjItem in projectItems)
2600  {
2601  if (prjItem.FileNames[1].ToLower() == _path.ToLower() || Path.GetFileName(prjItem.FileNames[1]).ToLower() == _path.ToLower())
2602  {
2603  projectItem = prjItem;
2604  break;
2605  }
2606  else
2607  {
2608  if (prjItem.ProjectItems.Count > 0)
2609  {
2610  projectItem = GetSourcePath(_path, prjItem.ProjectItems);
2611 
2612  if (projectItem != null)
2613  {
2614  break;
2615  }
2616  }
2617  }
2618  }
2619 
2620  return projectItem;
2621  }
2622 
2629  public ProjectItem GetSourceFile(string sourceName, ProjectItems prjItems = null)
2630  {
2631  ProjectItem sourceFile = null;
2632  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
2633 
2634 
2635  if (prjItems == null)
2636  {
2637  prjItems = AddonsExecute.PRJAddon.ProjectItems;
2638  }
2639 
2640  foreach (ProjectItem prjItem in prjItems)
2641  {
2642  if (Path.GetFileName(prjItem.FileNames[1]).ToLower() == sourceName.ToLower())
2643  {
2644  sourceFile = prjItem;
2645  break;
2646  }
2647  else
2648  {
2649  if (prjItem.ProjectItems.Count > 0)
2650  {
2651  sourceFile = GetSourceFile(sourceName, prjItem.ProjectItems);
2652  if (sourceFile != null)
2653  break;
2654  }
2655  }
2656  }
2657 
2658  return sourceFile;
2659  }
2660 
2664  public void NuevoDocumento(string nombreDoc, string nombreTabla, string tituloForm)
2665  {
2666  CamposNuevoMante.Clear();
2667  NombreCamposNuevoMante.Clear();
2668 
2669  DocumentProperties manteProperties = new DocumentProperties();
2670  manteProperties.Nombre = nombreDoc;
2671  manteProperties.Titulo = tituloForm;
2672  CamposNuevoMante.Add(manteProperties);
2673  NombreCamposNuevoMante.Add(nombreDoc);
2674 
2675  CamposTabla = FuncsDataBase.GetSchemaTable(nombreTabla);
2676  ListaCampos = CamposTabla.DefaultView.ToTable();
2677 
2678  if(ListaCamposLineas!=null)
2679  ListaCamposLineas.Clear();
2680  }
2681 
2686  public void CargarCamposLineas(string nombreTabla)
2687  {
2688  CamposTablaLineas = FuncsDataBase.GetSchemaTable(nombreTabla);
2689  ListaCamposLineas = CamposTablaLineas.DefaultView.ToTable();
2690  }
2691 
2695  public void NuevoMantenimiento(string nombreMante, string nombreTabla, string tituloForm, string textoMenu)
2696  {
2697  CamposNuevoMante.Clear();
2698  NombreCamposNuevoMante.Clear();
2699 
2700  ManteProperties manteProperties = new ManteProperties();
2701  manteProperties.Nombre = nombreMante;
2702  manteProperties.Titulo = tituloForm;
2703  manteProperties.TextoMenu = textoMenu;
2704  CamposNuevoMante.Add(manteProperties);
2705  NombreCamposNuevoMante.Add(nombreMante);
2706 
2707  CamposTabla = FuncsDataBase.GetSchemaTable(nombreTabla);
2708  ListaCampos = CamposTabla.DefaultView.ToTable();
2709  }
2710 
2717  public PaginaManteProperties AddPagina(string _nombrePagina, string _tituloPagina)
2718  {
2719  // Se ha añadido una nueva página al mantenimiento.
2720  PaginaManteProperties tpNovaPagina = new PaginaManteProperties();
2721  tpNovaPagina.Nombre = _nombrePagina;
2722  tpNovaPagina.Titulo = _tituloPagina;
2723  CamposNuevoMante.Add(tpNovaPagina);
2724  NombreCamposNuevoMante.Add(_nombrePagina);
2725 
2726  return tpNovaPagina;
2727  }
2728 
2735  {
2737  newCampo.Nombre = nombreCampo;
2738 
2739  CamposNuevoMante.Add(newCampo);
2740  NombreCamposNuevoMante.Add(nombreCampo);
2741 
2742  // El trec de la llista
2743  DataRow[] deleteRow = ListaCampos.Select("column_name = '" + nombreCampo + "'");
2744  if (deleteRow.Count() > 0)
2745  {
2746  ListaCampos.Rows.Remove(deleteRow[0]);
2747  }
2748 
2749  return newCampo;
2750  }
2751 
2757  public ObjectsManteProperties AddCampoMante(string nombreCampo)
2758  {
2760  newCampo.Nombre = nombreCampo;
2761  newCampo.TituloCampo = nombreCampo;
2762  newCampo.Visible = true;
2763 
2764  CamposNuevoMante.Add(newCampo);
2765  NombreCamposNuevoMante.Add(nombreCampo);
2766 
2767  // El trec de la llista
2768  DataRow[] deleteRow = ListaCampos.Select("column_name = '" + nombreCampo + "'");
2769  if (deleteRow.Count() > 0)
2770  {
2771  ListaCampos.Rows.Remove(deleteRow[0]);
2772  }
2773 
2774  return newCampo;
2775  }
2776 
2782  public ewCampoTRelAddons AddCampoManteTRel(string nombreCampo, bool lineas = false)
2783  {
2784  ewCampoTRelAddons newCampo = new ewCampoTRelAddons();
2785  newCampo._Nombre = nombreCampo;
2786  newCampo._Titulo = nombreCampo;
2787  newCampo._Visible = true;
2788 
2789  CamposNuevoMante.Add(newCampo);
2790  NombreCamposNuevoMante.Add(nombreCampo);
2791 
2792  // El trec de la llista
2793  if (!lineas)
2794  {
2795  DataRow[] deleteRow = ListaCampos.Select("column_name = '" + nombreCampo + "'");
2796  if (deleteRow.Count() > 0)
2797  {
2798  ListaCampos.Rows.Remove(deleteRow[0]);
2799  }
2800  }
2801  else
2802  {
2803  DataRow[] deleteRow = ListaCamposLineas.Select("column_name = '" + nombreCampo + "'");
2804  if (deleteRow.Count() > 0)
2805  {
2806  ListaCamposLineas.Rows.Remove(deleteRow[0]);
2807  }
2808  }
2809 
2810  return newCampo;
2811  }
2812 
2818  public bool RemoveCampoMante(string nombreCampo)
2819  {
2820  bool lbOk = false;
2821 
2822  // No permitimos borrar ni codigo ni nombre
2823  if (nombreCampo == "codigo" || nombreCampo == "nombre")
2824  return false;
2825 
2826  foreach (dynamic objectProperties in CamposNuevoMante)
2827  {
2828  if (objectProperties is ObjectsManteProperties)
2829  {
2830  if (objectProperties.Nombre == nombreCampo)
2831  {
2832  RemoveCampoMante(objectProperties);
2833  lbOk = true;
2834  break;
2835  }
2836  }
2837 
2838  if (objectProperties is ewCampoTRelAddons)
2839  {
2840  if (objectProperties._Nombre == nombreCampo)
2841  {
2842  RemoveCampoMante(objectProperties);
2843  lbOk = true;
2844  break;
2845  }
2846  }
2847 
2848  if (objectProperties is PaginaManteProperties)
2849  {
2850  if (nombreCampo != "tpGeneral")
2851  {
2852  if (objectProperties.Nombre == nombreCampo)
2853  {
2854  // El trec de la llista
2855  CamposNuevoMante.Remove(objectProperties);
2856  NombreCamposNuevoMante.Remove(nombreCampo);
2857 
2858  lbOk = true;
2859  break;
2860  }
2861  }
2862  }
2863  }
2864 
2865  return lbOk;
2866  }
2867 
2873  public bool RemoveCampoMante(ObjectsManteProperties campoObject)
2874  {
2875  bool lbOk = true;
2876  string nombreCampo = campoObject.Nombre;
2877 
2878  // El trec de la llista
2879  CamposNuevoMante.Remove(campoObject);
2880  NombreCamposNuevoMante.Remove(nombreCampo);
2881 
2882  // L'afegeixo al DataTable
2883  DataRow[] campoTabla = CamposTabla.Select("column_name = '" + nombreCampo + "'");
2884  if (campoTabla.Count() > 0)
2885  {
2886  DataRow listaRow = ListaCampos.NewRow();
2887  for (int i = 0; i < ListaCampos.Columns.Count - 1; i++)
2888  {
2889  string columnName = ListaCampos.Columns[i].ColumnName;
2890  listaRow[columnName] = campoTabla[0][columnName];
2891  }
2892 
2893  ListaCampos.Rows.Add(listaRow);
2894  }
2895 
2896  return lbOk;
2897  }
2898 
2904  public bool RemoveCampoMante(ewCampoTRelAddons campoObject)
2905  {
2906  bool lbOk = true;
2907  string nombreCampo = campoObject._Nombre;
2908 
2909  // El trec de la llista
2910  CamposNuevoMante.Remove(campoObject);
2911  NombreCamposNuevoMante.Remove(nombreCampo);
2912 
2913  // L'afegeixo al DataTable
2914  DataRow[] campoTabla = CamposTabla.Select("column_name = '" + nombreCampo + "'");
2915  if (campoTabla.Count() > 0)
2916  {
2917  DataRow listaRow = ListaCampos.NewRow();
2918  for (int i = 0; i < ListaCampos.Columns.Count - 1; i++)
2919  {
2920  string columnName = ListaCampos.Columns[i].ColumnName;
2921  listaRow[columnName] = campoTabla[0][columnName];
2922  }
2923 
2924  ListaCampos.Rows.Add(listaRow);
2925  }
2926 
2927  return lbOk;
2928  }
2929 
2935  public dynamic GetObjectProperties(string nombreObjeto)
2936  {
2937  dynamic objectProperties = null;
2938 
2939  foreach (dynamic objectP in CamposNuevoMante)
2940  {
2941  if (objectP is ewCampoTRelAddons)
2942  {
2943  if (objectP._Nombre == nombreObjeto)
2944  {
2945  objectProperties = objectP;
2946  }
2947  }
2948  else
2949  {
2950  if (objectP.Nombre == nombreObjeto)
2951  {
2952  objectProperties = objectP;
2953  }
2954  }
2955  }
2956 
2957  return objectProperties;
2958  }
2959 
2964  public bool DeleteProject()
2965  {
2966  bool lbOk = true;
2967 
2968  // Tanquem la solució
2969  //AddonsExecute.Solution.Close();
2971 
2972  // Delete LIBRERIA
2973  string libreria = AddonsExecute.DllAddon;
2974  File.Delete(libreria);
2975 
2976  libreria = Path.ChangeExtension(libreria, "pdb");
2977  File.Delete(libreria);
2978 
2979  // Borrar addon
2980  Directory.Delete(AddonsExecute.RutaProject, true);
2981 
2982  return lbOk;
2983  }
2984 
2990  public bool CrearMainProject(string _rutaTerm, string userName, string password, out string _messageError)
2991  {
2992  bool lbOk = true;
2993  _messageError = "";
2994  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
2995 
2996  try
2997  {
2998  // Preparar el directori
2999  string rutaSolution = AddonsExecute.RutaProject + @"\..";
3000  string currentDir = Directory.GetCurrentDirectory();
3001 
3002  Directory.SetCurrentDirectory(rutaSolution);
3003  rutaSolution = Directory.GetCurrentDirectory();
3004 
3005  Directory.SetCurrentDirectory(currentDir);
3006 
3007  // Descomprimir el projecte
3008  string fileZip = Path.Combine(rutaSolution, "main.zip");
3009  File.WriteAllBytes(fileZip, Resources.main);
3010  SageZip loZip = new SageZip();
3011 
3012  loZip.FileName = fileZip;
3013  loZip.Extract(rutaSolution, 1, "", "");
3014 
3015  File.Delete(fileZip);
3016 
3017  // Afegir el projecte a la solució
3018  string projectpath = Path.Combine(rutaSolution, @"main\main.csproj");
3019  Project mainProject = AddonsExecute.Solution.AddFromFile(projectpath);
3020 
3021  // Establir-lo com a projecte d'inici
3022  AddonsExecute.Solution.Properties.Item("StartupProject").Value = "main";
3023 
3024  // Assignar el output path a librerias
3025  ConfigurationManager configManager = mainProject.ConfigurationManager;
3026  Configuration activeConfiguration = configManager.ActiveConfiguration;
3027  activeConfiguration.Properties.Item("OutputPath").Value = Path.Combine(AddonsExecute.RutaEuroserv, "Librerias");
3028 
3029  // Modificar l'inici
3030  ProjectItem prjItem = mainProject.ProjectItems.Item("Program.cs");
3031  CodeFunction codeFunction = GetCodeElement<CodeFunction>("Main", out _messageError, prjItem, "Program");
3032 
3033  EditPoint editPointCopy;
3034  editPointCopy = codeFunction.StartPoint.CreateEditPoint();
3035  editPointCopy.FindPattern("// copiar la libreria del add-on");
3036  editPointCopy.LineDown();
3037  editPointCopy.Insert("FUNCTIONS._CopiarLibreriasAddons(@\"" + AddonsExecute.RutaEuroserv + "\", @\"" + _rutaTerm + "\");");
3038 
3039  EditPoint editPoint;
3040  editPoint = codeFunction.StartPoint.CreateEditPoint();
3041  editPoint.FindPattern("// conexión a Sage 50");
3042  editPoint.LineDown();
3043  editPoint.Insert("main_s50.Connect(@\"" + _rutaTerm + "\", \"" + userName + "\", \"" + password + "\");");
3044 
3045  // Guardar els canvis al document
3046  prjItem.Save();
3047 
3048  // Guardar cambios al proyecto
3049  mainProject.Save();
3050  }
3051  catch (Exception ex)
3052  {
3053  _messageError = Environment.NewLine + Environment.NewLine + ex.Message;
3054  lbOk = false;
3055  }
3056 
3057  return lbOk;
3058  }
3059 
3066  public StringReader GetBlocString(string dumptext, string blocname)
3067  {
3068  StringReader textReader = default(StringReader);
3069  string blocstring = string.Empty;
3070 
3071  int blocpos = 0;
3072  int finblocpos = 0;
3073 
3074  blocpos = dumptext.IndexOf(blocname);
3075  if (blocpos > -1)
3076  {
3077  blocpos += blocname.Length + 3;
3078 
3079  finblocpos = dumptext.IndexOf("/" + blocname, blocpos);
3080  if (finblocpos > -1)
3081  {
3082  finblocpos = finblocpos - blocpos - 2;
3083 
3084  blocstring = dumptext.Substring(blocpos, finblocpos);
3085 
3086  textReader = new StringReader(blocstring);
3087  }
3088  }
3089 
3090  return textReader;
3091  }
3092 
3093 
3103  public string GetPropertySet(string tcTipoCampo, char comilles, string tcValidarDato, string tcNombrePropiedad, string tcNombrePropiedadPrivada)
3104  {
3105  string propertySet = "";
3106  string tab = " "; // Tab string 4 spaces
3107 
3108  if (!string.IsNullOrWhiteSpace(tcValidarDato))
3109  {
3110  if (tcTipoCampo == "string")
3111  {
3112  propertySet += "if (" + tcNombrePropiedadPrivada + ".Trim() != value.Trim())" + Environment.NewLine;
3113  propertySet += tab + tab + tab + tab + "{" + Environment.NewLine;
3114  propertySet += Environment.NewLine;
3115  propertySet += tab + tab + tab + tab + tab + "if (loParent != null)" + Environment.NewLine;
3116  propertySet += tab + tab + tab + tab + tab + "{" + Environment.NewLine;
3117  propertySet += tab + tab + tab + tab + tab + tab + "object loNewValor;" + Environment.NewLine;
3118  propertySet += tab + tab + tab + tab + tab + tab + "if (loParent.CamposTRel_Validar_Valor(" + comilles + tcNombrePropiedad + comilles + ", value, this, out loNewValor))" + Environment.NewLine;
3119  propertySet += tab + tab + tab + tab + tab + tab + "{" + Environment.NewLine;
3120  propertySet += tab + tab + tab + tab + tab + tab + tab + "value = " + tcNombrePropiedadPrivada + ";" + Environment.NewLine;
3121  propertySet += tab + tab + tab + tab + tab + tab + "}" + Environment.NewLine;
3122  propertySet += tab + tab + tab + tab + tab + tab + "else if (loNewValor != null)" + Environment.NewLine;
3123  propertySet += tab + tab + tab + tab + tab + tab + "{" + Environment.NewLine;
3124  propertySet += tab + tab + tab + tab + tab + tab + tab + "value = Convert.ToString(loNewValor);" + Environment.NewLine;
3125  propertySet += tab + tab + tab + tab + tab + tab + "}" + Environment.NewLine;
3126  propertySet += tab + tab + tab + tab + tab + "}" + Environment.NewLine;
3127  propertySet += tab + tab + tab + tab + "}" + Environment.NewLine;
3128  propertySet += Environment.NewLine;
3129  propertySet += tab + tab + tab + tab + "if (" + tcNombrePropiedadPrivada + ".Trim() != value.Trim())" + Environment.NewLine;
3130  propertySet += tab + tab + tab + tab + "{" + Environment.NewLine;
3131  propertySet += tab + tab + tab + tab + tab + tcNombrePropiedadPrivada + " = value;" + Environment.NewLine;
3132  propertySet += tab + tab + tab + tab + tab + "loParent._Exportar_Null();" + Environment.NewLine;
3133  propertySet += tab + tab + tab + tab + "}" + Environment.NewLine;
3134  }
3135  else
3136  {
3137  propertySet += "if (" + tcNombrePropiedadPrivada + " != value)" + Environment.NewLine;
3138  propertySet += tab + tab + tab + tab + "{" + Environment.NewLine;
3139  propertySet += Environment.NewLine;
3140  propertySet += tab + tab + tab + tab + tab + "if (loParent != null)" + Environment.NewLine;
3141  propertySet += tab + tab + tab + tab + tab + "{" + Environment.NewLine;
3142  propertySet += tab + tab + tab + tab + tab + tab + "if (loParent.CamposTRel_Validar_Valor(" + comilles + tcNombrePropiedad + comilles + ", value, this))" + Environment.NewLine;
3143  propertySet += tab + tab + tab + tab + tab + tab + "{" + Environment.NewLine;
3144  propertySet += tab + tab + tab + tab + tab + tab + tab + "value = " + tcNombrePropiedadPrivada + ";" + Environment.NewLine;
3145  propertySet += tab + tab + tab + tab + tab + tab + "}" + Environment.NewLine;
3146  propertySet += tab + tab + tab + tab + tab + "}" + Environment.NewLine;
3147  propertySet += tab + tab + tab + tab + "}" + Environment.NewLine;
3148  propertySet += Environment.NewLine;
3149  propertySet += tab + tab + tab + tab + "if (" + tcNombrePropiedadPrivada + " != value)" + Environment.NewLine;
3150  propertySet += tab + tab + tab + tab + "{" + Environment.NewLine;
3151  propertySet += tab + tab + tab + tab + tab + tcNombrePropiedadPrivada + " = value;" + Environment.NewLine;
3152  propertySet += tab + tab + tab + tab + tab + "loParent._Exportar_Null();" + Environment.NewLine;
3153  propertySet += tab + tab + tab + tab + "}" + Environment.NewLine;
3154  }
3155  }
3156  else
3157  {
3158  propertySet = tcNombrePropiedadPrivada + " = value";
3159  }
3160 
3161  return propertySet;
3162  }
3163 
3164 
3165 
3166 
3167 
3168 
3174  public List<Tuple<string, bool>> _LibreriaReferencias(string tcPathLibreria)
3175  {
3176  Dictionary<string, bool> loDic = new Dictionary<string, bool>();
3177  List<Tuple<string, bool>> loRes = new List<Tuple<string, bool>>();
3178 
3179  if (!tcPathLibreria.EndsWith(".dll")) tcPathLibreria = $"{tcPathLibreria}.dll";
3180 
3181  string lcPathTempBase = Path.Combine(Path.GetTempPath(), "Sage50Sdk");
3182  string lcPathCopia = CopiarLibreria(tcPathLibreria, lcPathTempBase);
3183  lcPathCopia = string.IsNullOrWhiteSpace(lcPathCopia) ? tcPathLibreria : lcPathCopia;
3184 
3185  if (File.Exists(tcPathLibreria) && LibreriaReferencias(tcPathLibreria, lcPathCopia, ref loDic))
3186  {
3187  loDic.ToList().Where(f => f.Key.StartsWith("sage.ew.") || f.Key.StartsWith("Sage.ES.S50.")).ToList().ForEach(f => loRes.Add(new Tuple<string, bool>(f.Key, f.Value)));
3188  }
3189 
3190  EliminarCarpetasLibrerias(tcPathLibreria, lcPathTempBase);
3191 
3192  return loRes;
3193  }
3194 
3201  private string CopiarLibreria(string tcPathLibreria, string tcPathTempBase)
3202  {
3203  CrearCarpeta(tcPathTempBase);
3204  EliminarCarpetasLibrerias(tcPathLibreria, tcPathTempBase);
3205 
3206  string lcPathTemp = Path.Combine(tcPathTempBase, Path.GetFileNameWithoutExtension(tcPathLibreria) + "_" + DateTime.Now.ToString("yyyyMMddhhmmss"));
3207  CrearCarpeta(lcPathTemp);
3208 
3209  string lcFile = Path.Combine(lcPathTemp, Path.GetFileName(tcPathLibreria));
3210  CopiarFichero(tcPathLibreria, lcFile);
3211  string lcFilePdb = Path.Combine(lcPathTemp, Path.GetFileNameWithoutExtension(tcPathLibreria) + ".pdb");
3212  CopiarFichero(Path.Combine(Path.GetDirectoryName(tcPathLibreria), Path.GetFileNameWithoutExtension(tcPathLibreria)) + ".pdb", lcFilePdb);
3213 
3214  return lcFile;
3215  }
3216 
3222  private bool CrearCarpeta(string tcFolder)
3223  {
3224  try
3225  {
3226  Directory.CreateDirectory(tcFolder);
3227  }
3228  catch
3229  {
3230 
3231  }
3232  return true;
3233  }
3234 
3240  private bool EliminarCarpeta(string tcFolder)
3241  {
3242  try
3243  {
3244  Directory.Delete(tcFolder, true);
3245  }
3246  catch
3247  {
3248 
3249  }
3250  return true;
3251  }
3252 
3253 
3261  private bool CopiarFichero(string tcOrigen, string tcDestino, bool tlOverWrite = true)
3262  {
3263  try
3264  {
3265  File.Copy(tcOrigen, tcDestino, tlOverWrite);
3266  }
3267  catch
3268  {
3269 
3270  }
3271  return true;
3272  }
3273 
3274 
3280  private void EliminarCarpetasLibrerias(string tcPathLibreria, string lcPathTempBase)
3281  {
3282  try
3283  {
3284  string lcFile = Path.GetFileNameWithoutExtension(tcPathLibreria);
3285  string[] folders = System.IO.Directory.GetDirectories(lcPathTempBase, lcFile+"*", System.IO.SearchOption.AllDirectories);
3286  foreach (string lcFolder in folders)
3287  EliminarCarpeta(lcFolder);
3288  }
3289  catch
3290  {
3291 
3292  }
3293  }
3294 
3302  private static bool LibreriaReferencias(string tcPathLibreria, string tcPathCopia, ref Dictionary<string, bool> toRes)
3303  {
3304  Assembly assembly = null;
3305  List<AssemblyName> loList;
3306 
3307  string lcFile = !string.IsNullOrWhiteSpace(tcPathCopia) ? tcPathCopia : tcPathLibreria;
3308 
3309  try
3310  {
3311  if (File.Exists(lcFile))
3312  {
3313  assembly = _CreateAssemblyDomain(lcFile, AssemblyType.AnotherDomain);
3314  if (assembly == null) assembly = _CreateAssemblyDomain(lcFile, AssemblyType.ReflectionOnlyLoadFrom);
3315  if (assembly == null) assembly = _CreateAssemblyDomain(lcFile, AssemblyType.FromFile);
3316  if (assembly == null) assembly = _CreateAssemblyDomain(lcFile, AssemblyType.SameDomain);
3317 
3318  if (assembly is Assembly)
3319  {
3320 
3321  //Obtenemos las depencias de librerias de Sage 50
3322  loList = assembly.GetReferencedAssemblies().ToList();
3323 
3324  //Miramos si las dlls de Sage 50 estan firmadas
3325  foreach (AssemblyName loAssemblyName in loList)
3326  {
3327  if (!toRes.ContainsKey(loAssemblyName.FullName))
3328  {
3329  toRes.Add(loAssemblyName.FullName, loAssemblyName.GetPublicKeyToken()?.Length > 0);
3330  //Revisamos las dependencias de las despendencias
3331  LibreriaReferencias(loAssemblyName.CodeBase, "", ref toRes);
3332 
3333  }
3334  }
3335  }
3336  }
3337  }
3338  catch (Exception loEx)
3339  {
3340  DB.Registrar_Error(loEx);
3341  return false;
3342  }
3343 
3344  return true;
3345  }
3346 
3353  public static Assembly _CreateAssemblyDomain(string tcPath, AssemblyType toAssemblyType)
3354  {
3355  AppDomain appNewDomain = null;
3356  Assembly addonAssembly = null;
3357 
3358  try
3359  {
3360  switch (toAssemblyType)
3361  {
3362  case AssemblyType.AnotherDomain:
3363  appNewDomain = AppDomain.CreateDomain(tcPath);
3364  addonAssembly = appNewDomain.Load(File.ReadAllBytes(tcPath));
3365  break;
3366  case AssemblyType.FromFile:
3367  addonAssembly = Assembly.LoadFile(tcPath);
3368  break;
3369  case AssemblyType.ReflectionOnlyLoadFrom:
3370  addonAssembly = Assembly.ReflectionOnlyLoadFrom(tcPath);
3371  break;
3372  default:
3373  addonAssembly = Assembly.LoadFrom(tcPath);
3374  break;
3375  }
3376  }
3377  catch (Exception)
3378  {
3379  addonAssembly = null;
3380  }
3381 
3382  return addonAssembly;
3383  }
3384 
3385 
3386 
3387 
3388 
3389 
3390  }
3391 }
bool ModificarMante(string _nombreModulo, string _nombreMante, string _nombreTabla, string _nombreConnex, out string _messageError)
Modifica el módulo para que cargue el control de usuario al mantenimento indicado ...
bool CrearNuevoMantenimiento(string nombreMante, string nombreTabla, string tituloForm, string textoMenu, bool addCeros, out string messageError)
Crear nuevo mantenimiento
bool EsFiltro
Indica si el campo relacionado actuarà de filtro de la tabla
bool SourceFileExist(string fileName, ProjectItems projectItems=null)
Comprueba si el fichero especifiado existe en el proyecto
int Longitud
Máscara para columnas numéricas
bool _PermiteDuplicados
Indica si se permiten valores duplicados comparando el campo con todos los registros cargados ...
new bool EsClave
Campo de la tabla relacionado
new string _Validar_Dato_CampoTRel_Asignar
Destino del valor recuperado en la consulta de validación
bool ModificarManteTRel(string _nombreManteTRel, string _nombreTabla, string _nombreTablaManteTRel, out string _messageError)
Modifica el módulo para que cargue la extensión al mantenimento relacionado indicado ...
bool CrearMainProject(string _rutaTerm, string userName, string password, out string _messageError)
Crear el proyecto de inicio para depuración
static Assembly _CreateAssemblyDomain(string tcPath, AssemblyType toAssemblyType)
Cargar libreria
new string _Validar_Dato_Tabla
Tabla donde se validará si el dato existe
dynamic GetObjectProperties(string nombreObjeto)
Devuelve el objeto relacionado con el nombre
new string _Validar_Dato_BaseDatos
Base de datos donde se validará si el dato existe
static string DllAddon
Nombre de la base de datos del addon
bool _ExpandirPunto
Introduce 0 en la posición del . hasta la longitud del campo
List< string > GetSourceFilesFromPath(string _path)
Devuelve una lista con los archivos de código de la ruta relativa del proyecto especificada ...
bool CrearManteTRel(string _manteTRelName, string _nombreTabla, string _nombreUserControl, string _nombreMante, out string messageError)
Crea un mantenimiento de tablas relacionadas
static string RutaEuroserv
Ruta del servidor de Sage50c
void NuevoMantenimiento(string nombreMante, string nombreTabla, string tituloForm, string textoMenu)
Prepara para
FuncsSourceCode()
Inicializa una nueva instancia de la clase
new bool EsFiltro
Campo de la tabla relacionado
string TxtCodLabel
txtCodLabel en caso de haber seleccionado el tipo TxtCodLabel
void BackupFile(string sourcefile)
Hace una copia backup del fichero que se le indica
bool ModificarUrlAyuda(string tcUrl, out string _messageError)
Modificar en el sageaddons la propiedad urlayuda
Clase para las acciones en la base de datos
List< Tuple< string, bool > > _LibreriaReferencias(string tcPathLibreria)
Libreria de referencias
bool CrearNuevoUserControlManteTRel(string _nombreControl, string _nombreTabla, out string messageError)
Crea un nuevo control de usuario
Propiedades de los campos código y nombre para el deseño de los mantenimientos
CodigoNombreManteProperties AddCampoCodigoNombreMante(string nombreCampo)
Añade el campo código y nombre al mantenimiento
ProjectItem GetSourcePath(string _path, ProjectItems projectItems=null)
Busca el item en el proyecto y lo devuelve
decimal _AnchoColumna
Permite indicar el ancho en carácteres estándar &#39;A&#39; que va a tener al columna en el grid...
static int GetLenCampo(string nombreDB, string nombreTabla, string nombreCampo)
Devuelve la longitud del campo
FuncsDataBase FuncsDataBase
Funciones para las bases de datos
bool RemoveCampoMante(ObjectsManteProperties campoObject)
Quita el campo del mantenimiento
bool CrearNuevoUserControl(string _nombreControl, bool _crearManteTRel, out string messageError)
Crea un nuevo control de usuario
static string RutaProject
Ruta al proyecto
bool CrearExtensionMante(string _nombreModulo, string _nombreMante, string _nombreTabla, string _nombreUserControl, bool _sinTabla, out string _messageError)
Crear la clase extensión del mantenimiento
static Solution2 Solution
Instancia de la solución
PaginaManteProperties AddPagina(string _nombrePagina, string _tituloPagina)
Crear el objeto página para la nueva página
DataTable ListaCamposLineas
Lista de campos detalle
bool DeleteProject()
Borra la parte de código del proyecto
void CargarCamposLineas(string nombreTabla)
Cargar los campos para las líneas de los documentos
DataTable ListaCampos
Lista de campos
string GetPropertySet(string tcTipoCampo, char comilles, string tcValidarDato, string tcNombrePropiedad, string tcNombrePropiedadPrivada)
Método para obtener propertyset
StringReader GetBlocString(string dumptext, string blocname)
Devuelve el contenido del bloque
bool _Editable
Indica si el campo será editable
CodeClass GetCodeClass(string _className, out string messageError, ProjectItem prjItem=null)
Devuelve la clase indicada en el módulo especificado
Clase para la definición de las páginas del mantenimiento
AssemblyType
Enumerado para el tipo de carga de librerias
Definition: generales.cs:12
static Project PRJAddon
Instancia del proyecto que se modifica
ObjectsManteProperties AddCampoMante(string nombreCampo)
Añade el campo al mantenimiento
Clase para mostrar las propiedades de ewCampoTRel
Propiedades para el deseño de los mantenimientos
Funciones y métodos para crear los componentes
static string NombreAddon
Nombre del addon
bool _Visible
Indica si el campo serà visible cuando se enlaza a un grid
bool _Updatable
Indica si el campo se recupera y guarda en la tabla
gridColumnsTypes _TipoColumna
Tipo de columna para grid o tipo de control enlazado
bool RemoveCampoMante(string nombreCampo)
Quita el campo del mantenimiento
void NuevoDocumento(string nombreDoc, string nombreTabla, string tituloForm)
Prepara para
bool SourceFolderExist(string fileName)
Comprueba si el fichero especifiado existe en el proyecto
Propiedades de objetos para el deseño de los mantenimientos
dynamic ClassMod
Clase que se está utilizando
string _FormatString
Máscara para columnas de tipo TextoFormateado
ProjectItem GetSourceFile(string sourceName, ProjectItems prjItems=null)
Busca en todo el proyecto el fichero con el nombre especificado
ewCampoTRelAddons AddCampoManteTRel(string nombreCampo, bool lineas=false)
Añade el campo al mantenimiento
new string _Validar_Dato_Clave
Clave por la cual se buscará el valor a la tabla de validación
ObjectsManteTypes
Tipos de objetos para enlazar con los campos de los mantenimientos
Funciones para la creación de los ficheros de código
int NumeroDecimales
Máscara para columnas numéricas
Propiedades para el deseño de los mantenimientos
new string _Validar_Dato_Campos
Campos que se recuperarán en la consulta de validación
string _Error_Duplicados
Mensaje de error que se mostrará al insertar un valor duplicado
string GetUrlAyuda(out string _messageError)
Obtener la Url de ayuda
static string NombreClase
Nombre de la clase principal del addon
new bool EsCampoLinea
Campo de la tabla relacionado
bool MostrarTitulo
Muestra u oculta el título del campo
DataGridViewAutoSizeColumnMode _AutoModeSizeColumna
Permite indicar que la columna autoajuste su tamaño
string _Titulo
Título para mostrar en el label asociado o en el encabezado de columna
char _Relleno
Introduce tantos carácteres al inicio del campo hasta la longitud del campo
bool RemoveCampoMante(ewCampoTRelAddons campoObject)
Quita el campo del mantenimiento
bool _Validar_Asignar_Cargando
Indica si se buscará el dato en la tabla correspondiente mientras se ejecuta el _Load() ...
string _Error_Validar_Dato
Mensaje de error que se mostrará al insertar un dato no válido
new bool CampoAgregado
Campo de la tabla relacionado
DataTable GetSchemaTable(string nombreTabla)
Rellena la vista con los campos de la tabla