ReportTemplates.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using sage.ew.enumerations;
5 using System.Data;
6 using sage.ew.db;
7 using sage.ew.formul.Forms;
8 using sage.ew.global;
9 using sage.ew.reports;
10 using System.IO;
11 using sage.ew.ewbase.Clases;
12 using sage.ew.docscompra;
13 using sage.ew.docsven;
14 using sage.ew.docventatpv;
15 using sage.ew.cliente;
16 using System.Windows.Forms;
17 using sage.ew.functions;
18 using sage.ew.objetos;
19 using sage.ew.interficies;
20 using Sage.ES.S50.Addons;
21 
22 namespace sage.ew.ewbase
23 {
24 
28  public class TipoReport
29  : ITipoReport
30  {
31  private int _nCodigo;
32  private string _cDescripcion;
33  private string _cReportBase;
34  private bool _bCrearRegistroDefecto = true;
35 
39  public int _Codigo
40  {
41  get
42  {
43  return _nCodigo;
44  }
45  }
46 
50  public string _Descripcion
51  {
52  get
53  {
54  return _cDescripcion;
55  }
56  }
57 
61  public string _ReportBase
62  {
63  get
64  {
65  return _cReportBase;
66  }
67  }
68 
72  public bool _CrearRegistroDefecto
73  {
74  get
75  {
76  return _bCrearRegistroDefecto;
77  }
78  set
79  {
80  _bCrearRegistroDefecto = value;
81  }
82  }
83 
90  public TipoReport(int tnCodigo, string tcDescripcion, string tcReportBase)
91  {
92  _nCodigo = tnCodigo;
93  _cDescripcion = tcDescripcion;
94  _cReportBase = tcReportBase;
95  }
96  }
97 
103  {
104  private ReportPath _oReportPath = null;
105  private List<ITipoReport> _oListadoTiposReport = null;
106 
110  public List<ITipoReport> _ListadoTiposReport
111  {
112  get
113  {
114  if (_oListadoTiposReport == null)
115  {
116  _oListadoTiposReport = new List<ITipoReport>();
117 
118  foreach (int lnVal in Enum.GetValues(typeof(TiposReport)))
119  {
120  TiposReport loTipo = (TiposReport)Enum.Parse(typeof(TiposReport), Convert.ToString(lnVal));
121 
122  TipoReport loTipoReport = new TipoReport(lnVal, loTipo.__GetDescription(), loTipo.ToString().ToUpper().Trim())
123  {
124  _CrearRegistroDefecto = loTipo != TiposReport.SinDefinir
125  };
126 
127  _oListadoTiposReport.Add(loTipoReport);
128  }
129  }
130 
131  return _oListadoTiposReport;
132  }
133  }
134 
142  public ReportTPV _GetReportTPV(int tnTipo, string tcFichero, dynamic toDoc)
143  {
144  bool lDocCamposAdi = true;
145  DataTable loDataTable;
146  ReportTPV loReport = null;
147  DataTrasp loDataTrasp = new DataTrasp();
148  TipoDocumento loTipo = new TipoDocumento();
149  dynamic loDocument = null;
150  var admiteFiltros = true;
151  var tipoReport = Report.TipoReport.Informe; //Defecto
152  var directorioTipoEtiqueta = "";
153  var campoReportNonVisibleFields = true;
154 
155  //PE-103473
156  switch (tnTipo)
157  {
158  case (int)TiposReport.Pediven:
159  loDocument = new ewDocVentaPED();
160  loTipo = new TipoDocumento(TipoDocumento.eTipoDocumento.Pediven);
161  break;
162  case (int)TiposReport.Albaven:
163  loDocument = new ewDocVentaTPV();
164  loTipo = new TipoDocumento(TipoDocumento.eTipoDocumento.Albaven);
165  break;
166  case (int)TiposReport.Ticket:
167  loDocument = new ewDocVentaTPV();
168  loDocument._Cabecera._Tipo_Doc = Convert.ToInt32(eTipoDocumento.Ticket);
169  loTipo = new TipoDocumento(TipoDocumento.eTipoDocumento.Ticket);
170  break;
171  case (int)TiposReport.Factuven:
172  loDocument = new ewDocVentaFRA();
173  loTipo = new TipoDocumento(TipoDocumento.eTipoDocumento.Factuven);
174  lDocCamposAdi = false;
175  break;
176  case (int)TiposReport.Depoven:
177  loDocument = new ewDocVentaDEPOSITO();
178  loTipo = new TipoDocumento(TipoDocumento.eTipoDocumento.Depoven);
179  break;
180  case (int)TiposReport.Presuven:
181  loDocument = new ewDocVentaPRESUP();
182  loTipo = new TipoDocumento(TipoDocumento.eTipoDocumento.Presuven);
183  break;
184  case (int)TiposReport.Depocom:
185  loDocument = new ewDocCompraDEPOSITO();
186  loTipo = new TipoDocumento(TipoDocumento.eTipoDocumento.Depocom);
187  break;
188  case (int)TiposReport.Pedicom:
189  loDocument = new ewDocCompraPEDIDO();
190  loTipo = new TipoDocumento(TipoDocumento.eTipoDocumento.Pedicom);
191  break;
192  case (int)TiposReport.Precom:
193  loDocument = new ewDocCompraPROPUESTA();
194  loTipo = new TipoDocumento(TipoDocumento.eTipoDocumento.Precom);
195  break;
196  case (int)TiposReport.Albacom:
197  loDocument = new ewDocCompraALBARAN();
198  loTipo = new TipoDocumento(TipoDocumento.eTipoDocumento.Albacom);
199  break;
200  case (int)TiposReport.Factucom:
201  loDocument = new ewDocCompraFACTURA();
202  loTipo = new TipoDocumento(TipoDocumento.eTipoDocumento.Factucom);
203  lDocCamposAdi = false;
204  break;
205 
206  case (int)TiposReport.Envio:
207  loDocument = new EtiquetasEnvio();
208  ((EtiquetasEnvio)loDocument)._TipoImpresion = EtiquetasEnvio.TipoImpresion.Etiquetas;
209  loTipo = new TipoDocumento(TipoDocumento.eTipoDocumento.Envio);
210  directorioTipoEtiqueta = "envioeti"; //Se usa para construir el path del template.
211  lDocCamposAdi = false;
212  admiteFiltros = false;
213  tipoReport = Report.TipoReport.Etiqueta;
214  campoReportNonVisibleFields = false;
215  break;
216 
217  case (int)TiposReport.Hoja_rep:
218  //Por la ubicación del report es un informe pese a compartir clase con etiquetas de envio
219  loDocument = new EtiquetasEnvio();
220  ((EtiquetasEnvio)loDocument)._TipoImpresion = EtiquetasEnvio.TipoImpresion.HojaReparto;
221  loTipo = new TipoDocumento(TipoDocumento.eTipoDocumento.Hoja_rep);
222  lDocCamposAdi = false;
223  admiteFiltros = false;
224  campoReportNonVisibleFields = false;
225 
226  break;
227  }
228 
229  if (loDocument != null)
230  {
231  //Preparamos los datos por defecto del report
232  Dictionary<string, object> ldicParametrosReport = new Dictionary<string, object>();
233 
234  loDataTable = loDocument._Obtener_Datos_SageReports(ldicParametrosReport);
235  if (toDoc is ISageReportsEditDataProvider) loDataTable = ((ISageReportsEditDataProvider)toDoc)._Modificar_Datos_SageReports(loDataTable, ldicParametrosReport);
236 
237  Dictionary<string, object> ldicFiltrosReport = null;
238  if(admiteFiltros)
239  ldicFiltrosReport = loDocument._Obtener_Filtros_SageReports(ldicParametrosReport);
240 
241  loReport = new ReportTPV(loDocument._ReportBase, $"{tcFichero}.report", loDataTable, null, ldicFiltrosReport, tipoReport)
242  {
243  _TipoDocumento = loTipo
244  };
245  loDataTrasp._DocumentName = loDocument._ReportTitlePreview;
246 
247  DataTrasp.Config loConfig = new DataTrasp.Config(loTipo, EW_GLOBAL._Empresa._CamposAdicionalesDocumentos && lDocCamposAdi)
248  {
249  _ConnectionString = DB.Conexion,
250  _Comunes = DB.DbComunes,
251  _TablaCamposAdicionales = DB.SQLDatabase("GESTION", "MCAMPOS") //Campos adicionales
252  };
253 
254 
255  if (tipoReport == Report.TipoReport.Etiqueta) //Para genericas
256  {
257  ((ReportEtiquetaPath)loReport._Path)._TipoEtiqueta = directorioTipoEtiqueta;
258 
259  }
260  else
261  {
262  if (campoReportNonVisibleFields)
263  {
264  loConfig._ReportNonVisibleFields = loDocument._ReportNonVisibleFields;
265  }
266  }
267 
268 
270 
271  loDataTrasp._DataTraspConfig = loConfig;
272  loDataTrasp._GlobalVar = EW_GLOBAL._GetAllVariable();
273  loReport._DataTrasp = loDataTrasp;
274  }
275 
276  return loReport;
277 
278  }
279 
285  {
286  if(_oReportPath == null) _oReportPath = new ReportPath();
287  return _oReportPath;
288  }
289 
293  public String _DB
294  {
295  get
296  {
297  return "COMUNES";
298  }
299  }
300 
306  public ReportTemplatesBase _GetReportTemplates(String tcEmpresa)
307  {
308  return new ReportTemplates(tcEmpresa);
309  }
310 
317  public ReportTemplatesBase _GetReportTemplates(String tcEmpresa, String tcIdioma)
318  {
319  return new ReportTemplates(tcEmpresa, tcIdioma);
320  }
321  }
322 
323 
327  public class ReportTemplate:
328  ewMante
329  {
333  public enum TipoBase
334  {
338  Formato = 1,
342  Idioma = 2
343  }
344 
345  private dynamic _oLink;
346  private bool _bIsNew = false;
347  private ITipoReport _oTipoReport;
348  private string _cIdioma, _cEmpresa;
349  private ReportTemplate _oTemplateBase = null;
350 
351  private static string _cGrupoEmpresa;
352  private static BaseReportPath _oReportPath;
353  private static string _cPathServer = Convert.ToString(EW_GLOBAL._GetVariable("wc_iniservidor"));
354 
355  private IConfigReportTemplates _oConfigReportTemplates;
356 
360  public IConfigReportTemplates _ConfigReportTemplates
361  {
362  get
363  {
364  return _oConfigReportTemplates;
365  }
366  private set
367  {
368  _oConfigReportTemplates = value;
369 
370  _oReportPath = _oConfigReportTemplates._GetReportPath();
371  _DataBase = _oConfigReportTemplates is IConfigReportTemplates ? _oConfigReportTemplates._DB : "COMUNES";
372  }
373  }
374 
378  protected void _OpenTemplate()
379  {
380  ReportTPV loReport = null;
381  DataTrasp loDataTrasp = new DataTrasp();
382 
383  loReport = _ConfigReportTemplates._GetReportTPV(_TipoReport._Codigo, _Fichero, _Documento);
384 
385  if (loReport == null)
386  {
387  loReport = new ReportTPV(_ReportBase, $"{_Fichero}.report", null, null, Report.TipoReport.Informe);
388  loDataTrasp._GlobalVar = EW_GLOBAL._GetAllVariable();
389  loReport._DataTrasp = loDataTrasp;
390 
391  loReport._Path = _ReportPath;
392  loReport._Path._ReportFile = $"{_Fichero}.report";
393  }
394 
395  if (loReport._Path is BaseReportPath)
396  {
397  if (string.IsNullOrEmpty(loReport._Path._PathServer)) loReport._Path._PathServer = Convert.ToString(EW_GLOBAL._GetVariable("wc_iniservidor"));
398  if (string.IsNullOrEmpty(loReport._Path._ReportFile)) loReport._Path._ReportFile = $"{_Fichero}.report";
399 
400  loReport._OpenEditor();
401  }
402  }
403 
407  public List<ITipoReport> _ListadoTiposReport
408  {
409  get
410  {
411  return _ConfigReportTemplates._ListadoTiposReport;
412  }
413  }
414 
415 
419  public ReportTemplate _TemplateBase
420  {
421  get
422  {
423  if (_oTemplateBase == null) _oTemplateBase = _ObtenerBase();
424 
425  return _oTemplateBase;
426  }
427  set
428  {
429  _oTemplateBase = value;
430  }
431  }
432 
433  private String _GrupoEmpresa
434  {
435  get
436  {
437  return _cGrupoEmpresa;
438  }
439  }
440 
444  public TipoBase _TipoBase { get; set; } = TipoBase.Idioma;
445 
449  public dynamic _Link
450  {
451  get
452  {
453  return _oLink;
454  }
455  set
456  {
457  _oLink = value;
458  }
459  }
460 
464  public new bool _IsNew
465  {
466  get
467  {
468  return _bIsNew;
469  }
470  set
471  {
472  _bIsNew = value;
473  }
474  }
475 
479  public override string _Codigo
480  {
481  get
482  {
483  return base._Codigo;
484  }
485  set
486  {
487  base._Codigo = value;
488 
489  if (!string.IsNullOrWhiteSpace(value)) _Id = Convert.ToInt32(value);
490  }
491  }
492 
496  public int _Id
497  {
498  get
499  {
500  return (_lisCampos.ContainsKey("ID") || Convert.ToInt32(_lisCampos["ID"]._NewVal) > 0) ? Convert.ToInt32(_lisCampos["ID"]._NewVal) : 0;
501  }
502  set
503  {
504  if (_lisCampos.ContainsKey("ID")) _lisCampos["ID"]._NewVal = value;
505  }
506  }
507 
511  public bool _TodasEmp
512  {
513  get
514  {
515  return _lisCampos.ContainsKey("TODASEMP") ? Convert.ToBoolean(_lisCampos["TODASEMP"]._NewVal) : false;
516  }
517  set
518  {
519  if (_lisCampos.ContainsKey("TODASEMP")) _lisCampos["TODASEMP"]._NewVal = value;
520  }
521  }
522 
526  public int _Parent
527  {
528  get
529  {
530  return (_lisCampos.ContainsKey("ID_PARENT") || Convert.ToInt32(_lisCampos["ID_PARENT"]._NewVal) > 0) ? Convert.ToInt32(_lisCampos["ID_PARENT"]._NewVal) : 0;
531  }
532  set
533  {
534  if (_lisCampos.ContainsKey("ID_PARENT")) _lisCampos["ID_PARENT"]._NewVal = value;
535  }
536  }
537 
541  public override string _Nombre
542  {
543  get
544  {
545  return (_lisCampos.ContainsKey("NOMBRE")) ? Convert.ToString(_lisCampos["NOMBRE"]._NewVal) : String.Empty;
546  }
547  set
548  {
549  if (_lisCampos.ContainsKey("NOMBRE")) _lisCampos["NOMBRE"]._NewVal = value;
550  }
551  }
552 
556  public string _FicheroExt
557  {
558  get
559  {
560  return $"{_Fichero}.report";
561  }
562  }
563 
567  public string _Fichero
568  {
569  get
570  {
571  return (_lisCampos.ContainsKey("FICHERO") && !string.IsNullOrWhiteSpace(Convert.ToString(_lisCampos["FICHERO"]._NewVal))) ? Convert.ToString(_lisCampos["FICHERO"]._NewVal).Trim() : _GetNameFichero(_Empresa, _Idioma);
572  }
573  set
574  {
575  if (_lisCampos.ContainsKey("FICHERO")) _lisCampos["FICHERO"]._NewVal = value;
576  }
577  }
578 
582  public string _Observaciones
583  {
584  get
585  {
586  return (_lisCampos.ContainsKey("OBSERVA") && !string.IsNullOrWhiteSpace(Convert.ToString(_lisCampos["OBSERVA"]._NewVal))) ? Convert.ToString(_lisCampos["OBSERVA"]._NewVal).Trim() : String.Empty;
587  }
588  set
589  {
590  if (_lisCampos.ContainsKey("OBSERVA")) _lisCampos["OBSERVA"]._NewVal = value;
591  }
592  }
593 
597  public bool _Predet
598  {
599  get
600  {
601  return (_lisCampos.ContainsKey("PREDET")) ? Convert.ToBoolean(_lisCampos["PREDET"]._NewVal) : false;
602  }
603  set
604  {
605  if (_lisCampos.ContainsKey("PREDET")) _lisCampos["PREDET"]._NewVal = value;
606  }
607  }
608 
612  public string _Idioma
613  {
614  get
615  {
616  return _lisCampos.ContainsKey("IDI_PLAN") ? Convert.ToString(_lisCampos["IDI_PLAN"]._NewVal).Trim() : string.Empty;
617  }
618  set
619  {
620  if (_lisCampos.ContainsKey("IDI_PLAN")) _lisCampos["IDI_PLAN"]._NewVal = value;
621  _cIdioma = value;
622  }
623  }
624 
628  public string _Empresa
629  {
630  get
631  {
632  return _lisCampos.ContainsKey("EMPRESA") && !string.IsNullOrWhiteSpace(Convert.ToString(_lisCampos["EMPRESA"]._NewVal)) ? Convert.ToString(_lisCampos["EMPRESA"]._NewVal) : Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa"));
633  }
634  set
635  {
636  if (_lisCampos.ContainsKey("EMPRESA")) _lisCampos["EMPRESA"]._NewVal = value;
637  _cEmpresa = value;
638  }
639  }
640 
644  public ITipoReport _TipoReport
645  {
646  get
647  {
648  if (_lisCampos.ContainsKey("TIPO") && _ValidaTipoReport(Convert.ToInt32(_lisCampos["TIPO"]._NewVal)))
649  {
650  _oTipoReport = _GetTipoReport(Convert.ToInt32(_lisCampos["TIPO"]._NewVal));
651  }
652  return _oTipoReport;
653  }
654  set
655  {
656  if (_ValidaTipoReport(value._Codigo))
657  {
658  _oTipoReport = value;
659  if (_lisCampos.ContainsKey("TIPO")) _lisCampos["TIPO"]._NewVal = _oTipoReport._Codigo;
660  }
661  }
662  }
663 
664  private ITipoReport _GetTipoReport(int tnCodigo)
665  {
666  return _ConfigReportTemplates._ListadoTiposReport.Where(f => f._Codigo == tnCodigo).First();
667  }
668 
669  private bool _ValidaTipoReport(int tnCodigo)
670  {
671  return _ConfigReportTemplates._ListadoTiposReport.Where(f => f._Codigo == tnCodigo).Count() > 0;
672  }
673 
677  public bool _IsCustomFileCreated
678  {
679  get
680  {
681  return File.Exists(Path.Combine(_cPathServer, _ReportPath._IniPamReportStoredPath, _FicheroExt));
682  }
683  }
684 
688  public bool _IsFileBase
689  {
690  get
691  {
692  return IsFileBase(_Fichero);
693  }
694  }
695 
700  public bool IsFileBase(string tcFileName)
701  {
702  tcFileName = tcFileName.ToUpper().Trim();
703 
704  return _ConfigReportTemplates._ListadoTiposReport.Any(f => f._ReportBase.ToUpper().Trim() == tcFileName);
705  }
706 
710  public bool _IsFileBaseParent
711  {
712  get
713  {
714  return _TemplateBase._Fichero == _Fichero;
715  }
716  }
717 
718 
722  public bool _RemoveFile()
723  {
724  return _FileCanBeRemoved() ? _RemoveFile(_ReportPath._IniPamReportStoredPath, _Fichero) : false;
725  }
726 
730  public bool _RemoveFile(string tcFileName)
731  {
732  return _RemoveFile(_ReportPath._IniPamReportStoredPath, tcFileName);
733  }
734 
738  public static bool _RemoveFile(string tcInitPathServer, string tcFileName)
739  {
740  string lcPathFile;
741 
742  lcPathFile = Path.Combine(_cPathServer, tcInitPathServer, $"{tcFileName.Trim()}.report");
743 
744  try
745  {
746  if (File.Exists(lcPathFile)) File.Delete(lcPathFile);
747  }
748  catch
749  {
750  return false;
751  }
752 
753  return true;
754  }
755 
760  public override bool _Save_Before()
761  {
762  // Si estamos modificando un registro y no hay nombre no se permite continuar
763  if (_Estado == _EstadosMantenimiento.EntrandoNuevo || _Estado == _EstadosMantenimiento.EditandoRegistro)
764  {
765  // Plug-in 3.0. No hay que validar el campo nombre ya que puede que no exista en las cabeceras de documentos
766  if (ValidarCampoNombre)
767  {
768  if (string.IsNullOrWhiteSpace(_Nombre))
769  {
770  _Error_Message = "Es obligatorio cumplimentar el campo Nombre.";
771 
772  if (_FormMante != null)
773  this._FormMante._SetError_OnControl("_Nombre", _Error_Message);
774 
775  return false;
776  }
777  }
778  }
779 
780  return true;
781  }
782 
786  public new bool _ReadOnly
787  {
788  get
789  {
790  return string.IsNullOrEmpty(_Codigo) ? false : _Parent == 0;
791  }
792  }
793 
797  public override void _Load()
798  {
799  base._Load();
800 
801  _oTemplateBase = null;
802  _TipoBase = TipoBase.Idioma;
803 
804  _Browser_Condicion = $"EMPRESA = '{_Empresa}' AND IDI_PLAN = '{_Idioma}' ";
805  }
806 
811  public override bool _Save()
812  {
813  string lcSql;
814 
815  if (!_Save_Before()) return false;
816 
817  lcSql = $"UPDATE {DB.SQLDatabase(_DataBase, _Tabla)} SET NOMBRE = {DB.SQLString(_Nombre)}, OBSERVA = {DB.SQLString(_Observaciones)}, " +
818  $" FICHERO = {DB.SQLString(_Fichero)}, TODASEMP = {Convert.ToInt16(_TodasEmp)} " +
819  $"WHERE ID = {_Codigo} ";
820 
821 
822  if (DB.SQLExec(lcSql))
823  {
824  _CopyTemplates();
825  }
826 
827  _bIsNew = false;
828 
829  return true;
830  }
831 
836  private bool _SaveFileName()
837  {
838  string lcSql = $"UPDATE { DB.SQLDatabase(_DataBase, _Tabla)} SET FICHERO = { DB.SQLString(_Fichero)} WHERE ID = {_Codigo} ";
839 
840  return DB.SQLExec(lcSql);
841  }
842 
846  public void _CopyTemplates()
847  {
848  DataTable loDt = new DataTable();
849  Int32 lnCodigo;
850  String lcSql, lcNameFicheroOri, lcIdioma, lcEmpresa;
851 
852  lnCodigo = _ObtenerCodigoMax();
853 
854  //Idiomas
855  if (_TipoBase == TipoBase.Idioma && _TemplateBase != null && _TemplateBase._Parent > 0)
856  {
857  lcSql = String.Format("SELECT i.EMPRESA, i.CODIGO, fic.FICHERO FROM {0} i LEFT JOIN (SELECT r.ID, r.EMPRESA COLLATE Modern_Spanish_CS_AI as EMPRESA , r.IDI_PLAN COLLATE Modern_Spanish_CS_AI as IDI_PLAN, r.ID_PARENT FROM {1} r WHERE r.ID_PARENT = {3}) as f ON i.CODIGO = f.IDI_PLAN AND i.EMPRESA = f.EMPRESA AND f.ID_PARENT = {3} INNER JOIN {1} fic ON i.CODIGO = fic.IDI_PLAN AND fic.ID_PARENT = {4} AND i.EMPRESA = fic.EMPRESA WHERE f.ID is null {5} ", DB.SQLDatabase("GESTION", "IDIOMA"), DB.SQLDatabase(this._DataBase, this._Tabla), _Empresa, _Parent, _TemplateBase._Parent, _TodasEmp ? String.Empty : String.Format(" AND i.EMPRESA = '{0}' ", _Empresa));
858  lcSql += " UNION ";
859  lcSql += String.Format("SELECT e.CODIGO as 'EMPRESA', '' as 'CODIGO', fic.FICHERO FROM {0} e LEFT JOIN (SELECT r.ID, r.EMPRESA as EMPRESA , r.IDI_PLAN as IDI_PLAN, r.ID_PARENT FROM {1} r WHERE IDI_PLAN = '' AND r.ID_PARENT = {2}) as f ON e.CODIGO = f.EMPRESA AND f.IDI_PLAN = '' AND f.ID_PARENT = {2} INNER JOIN {1} fic ON e.CODIGO = fic.EMPRESA AND fic.ID_PARENT = {3} AND fic.IDI_PLAN = '' WHERE f.ID is null {4} ", DB.SQLDatabase("GESTION", "EMPRESA"), DB.SQLDatabase(this._DataBase, this._Tabla), _Parent, _TemplateBase._Parent, _TodasEmp ? String.Empty : String.Format(" AND e.CODIGO = '{0}' ", _Empresa));
860  }
861  else
862  {
863  lcSql = String.Format("SELECT i.EMPRESA, i.CODIGO, '' as FICHERO FROM {0} i LEFT JOIN (SELECT r.ID, r.EMPRESA COLLATE Modern_Spanish_CS_AI as EMPRESA , r.IDI_PLAN COLLATE Modern_Spanish_CS_AI as IDI_PLAN, r.ID_PARENT FROM {1} r WHERE r.ID_PARENT = {2}) as f ON i.CODIGO = f.IDI_PLAN AND i.EMPRESA = f.EMPRESA AND f.ID_PARENT = {2} WHERE f.ID is null {3} ", DB.SQLDatabase("GESTION", "IDIOMA"), DB.SQLDatabase(this._DataBase, this._Tabla), _Parent, _TodasEmp ? String.Empty : String.Format(" AND i.EMPRESA = '{0}' ", _Empresa));
864  lcSql += " UNION ";
865  lcSql += String.Format("SELECT e.CODIGO as 'EMPRESA', '' as 'CODIGO', '' as FICHERO FROM {0} e LEFT JOIN (SELECT r.ID, r.EMPRESA as EMPRESA , r.IDI_PLAN as IDI_PLAN, r.ID_PARENT FROM {1} r WHERE IDI_PLAN = '' AND r.ID_PARENT = {2}) as f ON e.CODIGO = f.EMPRESA AND f.IDI_PLAN = '' AND f.ID_PARENT = {2} WHERE f.ID is null {3} ", DB.SQLDatabase("GESTION", "EMPRESA"), DB.SQLDatabase(this._DataBase, this._Tabla), _Parent, _TodasEmp ? String.Empty : String.Format(" AND e.CODIGO = '{0}' ", _Empresa));
866  }
867  DB.SQLExec(lcSql, ref loDt);
868 
869 
870  foreach (DataRow ldRow in loDt.Rows)
871  {
872  lnCodigo++;
873 
874  lcIdioma = Convert.ToString(ldRow["CODIGO"]);
875  lcEmpresa = Convert.ToString(ldRow["EMPRESA"]);
876  lcNameFicheroOri = _TipoBase == TipoBase.Formato ? _Fichero : Convert.ToString(ldRow["FICHERO"]);
877  //lcNameFicheroDestino = _GetNameFichero(lcEmpresa, lcIdioma, lnCodigo);
878 
879  _CopyTemplate(lcEmpresa, lnCodigo, lcIdioma, lcNameFicheroOri);
880  //_CreateFile(lcNameFicheroDestino, lcNameFicheroOri, false);
881  }
882  }
883 
888  public override bool _Delete()
889  {
890  Boolean lOk;
891  String lcSql, lcErrorMessage = "";
892  DataTable loDt = new DataTable();
893 
894  //Cogemos todos los ficheros de las plantillas relacionadas que no se esten utilizando en otras plantillas
895  lcSql = String.Format("SELECT DISTINCT a.FICHERO FROM {0} a LEFT JOIN {0} b ON a.FICHERO = b.FICHERO AND a.ID <> b.ID AND b.ID_PARENT <> {1} WHERE a.ID_PARENT = {1} AND a.ID_PARENT > 0 AND b.ID is null", DB.SQLDatabase(this._DataBase, this._Tabla), _Parent);
896  DB.SQLExec(lcSql, ref loDt);
897 
898  if (lOk = base._Delete())
899  {
900  //Eliminamos los datos guardados de impresión
901  lcSql = String.Format("DELETE w FROM {0} w INNER JOIN {1} e ON e.ID = w.ID_REPLAN WHERE e.ID_PARENT = {2} ", DB.SQLDatabase(_DataBase, "SAGEREPORTS"), DB.SQLDatabase(_DataBase, this._Tabla), _Parent);
902  DB.SQLExec(lcSql);
903 
904  //Eliminamos los ficheros que se pueden eliminar
905  foreach (DataRow loRow in loDt.Rows)
906  {
907  if (!_RemoveFile(_ReportPath._IniPamReportStoredPath, Convert.ToString(loRow["FICHERO"])))
908  {
909  lcErrorMessage += String.Format("{1}Se ha producido un error al eliminar el fichero {0}", Convert.ToString(loRow["FICHERO"]).Trim(), String.IsNullOrEmpty(lcErrorMessage) ? String.Empty : Environment.NewLine);
910  }
911  }
912 
913  //Eliminamos las plantillas asociadas
914  lcSql = String.Format("DELETE FROM {0} WHERE ID_PARENT = {1} AND ID_PARENT > 0 ", DB.SQLDatabase(this._DataBase, this._Tabla), _Parent);
915  DB.SQLExec(lcSql);
916  }
917 
918  _Error_Message = lcErrorMessage;
919 
920  return lOk;
921  }
922 
923 
924  private void _CopyTemplate(string tcEmpresa, int tnCodigo, string tcCodigoIdioma = "", string tcFichero = "")
925  {
926  string lcSql;
927 
928  lcSql = String.Format("INSERT INTO {0} (EMPRESA, TIPO, IDI_PLAN, NOMBRE, FICHERO, ID, ID_PARENT, OBSERVA , GRUPO, TODASEMP) VALUES ('{1}',{2},'{3}', {4}, '{5}', {6}, {7}, {8}, '{9}', {10}); ", DB.SQLDatabase(_DataBase, _Tabla), tcEmpresa, _TipoReport._Codigo, tcCodigoIdioma, DB.SQLString(_Nombre), string.IsNullOrEmpty(tcFichero) ? _Fichero : tcFichero, tnCodigo, _Codigo, DB.SQLString(_Observaciones), _cGrupoEmpresa, Convert.ToInt16(_TodasEmp));
929  DB.SQLExec(lcSql);
930  }
931 
937  :this()
938  {
939  _DataBase = toConfig._DB;
940  _oConfigReportTemplates = toConfig;
941  }
942 
946  public ReportTemplate()
947  {
948  _Clave = "ID";
949  _DataBase = "COMUNES";
950  _Tabla = "REPLAN";
951  _TituloMantenimiento = "Mantenimiento de plantillas de reports";
952  _Pantalla = "REPLAN";
953 
954  _Browser_Titulos_Campos = "Nombre";
955  _Browser_Campos = "NOMBRE";
956  _Browser_Clave = "ID";
957  _Browser_Campos_No_Visibles = "ID";
958  _Browser_Condicion = $"EMPRESA = '{_Empresa}' AND IDI_PLAN = '{_Idioma}' ";
959 
960  _FormManteBaseType = typeof(frmReplan);
961 
962  _cGrupoEmpresa = DB.DbComunes.Substring(4, 4);
963  }
964 
965 
970  public override void _New(string tcCodigo = "")
971  {
972  string lcSql, lcNombreFichero;
973  int lnCodigo = _ObtenerCodigoMax() + 1;
974 
975  //lcNombreFichero = _GetNameFichero(_Empresa, _Idioma, lnCodigo);
976 
977  lcNombreFichero = _TemplateBase._Fichero;
978 
979  lcSql = string.Format("INSERT INTO {0} (EMPRESA, TIPO, IDI_PLAN, ID, ID_PARENT, FICHERO, GRUPO) VALUES ('{1}',{2},'{3}',{4}, {4}, '{5}', '{6}'); ", DB.SQLDatabase(this._DataBase, this._Tabla), String.IsNullOrEmpty(_cEmpresa) ? _Empresa : _cEmpresa, _TipoReport._Codigo, String.IsNullOrEmpty(_cIdioma) ? _Idioma : _cIdioma, lnCodigo, lcNombreFichero, _cGrupoEmpresa);
980  DB.SQLExec(lcSql);
981 
982  this._Codigo = Convert.ToString(lnCodigo);
983 
984  _bIsNew = true;
985  }
986 
987  private ReportTemplate _ObtenerBase()
988  {
989  DataTable loDt = new DataTable();
990  ReportTemplate loReportTemplate = null;
991 
992  if (_TipoReport == null)
993  return null;
994 
995  string lcSql = $"SELECT ID FROM {DB.SQLDatabase(_DataBase, _Tabla)} WHERE EMPRESA = '{_Empresa}' AND IDI_PLAN = '{_Idioma}' AND TIPO = {_TipoReport._Codigo} AND ID_PARENT = 0 ";
996  DB.SQLExec(lcSql, ref loDt);
997 
998  if (loDt.Rows.Count > 0)
999  {
1000  loReportTemplate = new ReportTemplate(_ConfigReportTemplates)
1001  {
1002  _Codigo = Convert.ToString(loDt.Rows[0][0])
1003  };
1004  }
1005 
1006  return loReportTemplate;
1007  }
1008 
1009  private int _ObtenerCodigoMax()
1010  {
1011  DataTable loDt = new DataTable();
1012 
1013  string lcSql = $"SELECT MAX(ID) FROM {DB.SQLDatabase(_DataBase, _Tabla)} ";
1014  DB.SQLExec(lcSql, ref loDt);
1015 
1016  return loDt.Rows.Count > 0 && !loDt.Rows[0].IsNull(0) ? Convert.ToInt32(loDt.Rows[0][0]) : 0;
1017 
1018  }
1019 
1020  private String _GetNameFichero(string tcEmpresa, string tcIdioma, int tnCodigo = 0)
1021  {
1022  int lnCodigo;
1023  string lcFichero;
1024 
1025  lnCodigo = tnCodigo > 0 ? tnCodigo : _Id;
1026  lcFichero = string.Format("{0}{1}{2}{3}{4}", _cGrupoEmpresa, tcEmpresa, _ReportBase, tcIdioma, lnCodigo);
1027 
1028  return lcFichero;
1029  }
1030 
1037  public static void _RemoveRegistrosDefecto(IConfigReportTemplates toConfig, String tcCodigoEmpresa, String tcCodigoIdioma)
1038  {
1039  string lcDataBase;
1040  string lcSql, lcCampo, lcValor;
1041  DataTable loDt = new DataTable();
1042  BaseReportPath loReportPath = toConfig._GetReportPath();
1043 
1044  lcDataBase = toConfig._DB;
1045 
1046  lcCampo = string.IsNullOrEmpty(tcCodigoIdioma) ? "EMPRESA" : "IDI_PLAN";
1047  lcValor = string.IsNullOrEmpty(tcCodigoIdioma) ? tcCodigoEmpresa : tcCodigoIdioma;
1048 
1049 
1050  //Eliminamos los datos guardados de impresión
1051  lcSql = string.Format("DELETE w FROM {0} w INNER JOIN {1} e ON e.ID = w.ID_REPLAN WHERE w.{2} = '{3}' ", DB.SQLDatabase(lcDataBase, "SAGEREPORTS"), DB.SQLDatabase(lcDataBase, "REPLAN"), String.IsNullOrEmpty(tcCodigoIdioma) ? "EMPRESA" : "IDIOMA", lcValor);
1052  DB.SQLExec(lcSql);
1053 
1054  lcSql = string.Format("SELECT DISTINCT a.FICHERO FROM {0} a LEFT JOIN {0} b ON a.FICHERO = b.FICHERO AND a.ID <> b.ID AND b.{1} <> '{2}' WHERE a.{1} = '{2}' AND a.ID_PARENT > 0 AND b.ID is null", DB.SQLDatabase(lcDataBase, "REPLAN"), lcCampo, lcValor);
1055  DB.SQLExec(lcSql, ref loDt);
1056 
1057  foreach (DataRow loRow in loDt.Rows)
1058  {
1059  _RemoveFile(loReportPath._IniPamReportStoredPath, Convert.ToString(loRow["FICHERO"]));
1060  }
1061 
1062  lcSql = $"DELETE FROM {DB.SQLDatabase(lcDataBase, "REPLAN")} WHERE {lcCampo} = '{lcValor}' ";
1063  DB.SQLExec(lcSql);
1064  }
1065 
1066 
1073  public static void _ValidaTemplates(IConfigReportTemplates toConfig, String tcCodigoEmpresa, String tcCodigoIdioma)
1074  {
1075  string lcDataBase = toConfig._DB;
1076  DataTable loDt = new DataTable();
1077 
1078  //Validamos que esten los registros por defecto
1079  string lcSql = $"SELECT * FROM {DB.SQLDatabase(lcDataBase, "REPLAN")} WHERE EMPRESA = '{tcCodigoEmpresa}' AND IDI_PLAN = '{tcCodigoIdioma}' AND ID_PARENT = 0 ";
1080  DB.SQLExec(lcSql, ref loDt);
1081 
1082  List<ITipoReport> loList = toConfig._ListadoTiposReport.Where(f => f._CrearRegistroDefecto).ToList();
1083 
1084  foreach (ITipoReport loTipo in loList)
1085  {
1086  DataRow[] loRow = loDt.Select(string.Format("TIPO = {0}", loTipo._Codigo));
1087 
1088  if (loRow.Length == 0)
1089  {
1090  _CreaRegistroDefecto(toConfig, tcCodigoEmpresa, tcCodigoIdioma, loTipo);
1091  }
1092  }
1093 
1094  //Validamos que tenga grupo empresa
1095  lcSql = $"SELECT * FROM {DB.SQLDatabase(lcDataBase, "REPLAN")} WHERE GRUPO = '' AND ID_PARENT > 0 ";
1096  DB.SQLExec(lcSql, ref loDt);
1097 
1098  if (loDt.Rows.Count > 0)
1099  {
1100  foreach (DataRow ldRow in loDt.Rows)
1101  {
1102  ReportTemplate loReport = new ReportTemplate(toConfig)
1103  {
1104  _Codigo = Convert.ToString(ldRow["ID"])
1105  };
1106  if (!Convert.ToString(ldRow["FICHERO"]).StartsWith(_cGrupoEmpresa)) loReport._UpdateFile(string.Format("{0}{1}", _cGrupoEmpresa, ldRow["FICHERO"]));
1107  }
1108 
1109  lcSql = string.Format("UPDATE {0} SET GRUPO = '{1}' WHERE GRUPO = '' AND ID_PARENT > 0 ", DB.SQLDatabase(lcDataBase, "REPLAN"), _cGrupoEmpresa);
1110  DB.SQLExec(lcSql, ref loDt);
1111  }
1112 
1113  //Validamos relaciones
1114  lcSql = string.Format("SELECT MIN(a.ID) as ID, a.NOMBRE, a.TIPO FROM {0} a INNER JOIN {0} b ON a.ID_PARENT = b.ID AND b.ID_PARENT = 0 GROUP BY a.NOMBRE, a.TIPO", DB.SQLDatabase(lcDataBase, "REPLAN"));
1115  DB.SQLExec(lcSql, ref loDt);
1116 
1117  foreach (DataRow ldRow in loDt.Rows)
1118  {
1119  lcSql = string.Format("UPDATE {0} SET ID_PARENT = {1} WHERE NOMBRE = '{2}' AND TIPO = {3} ", DB.SQLDatabase(lcDataBase, "REPLAN"), ldRow["ID"], ldRow["NOMBRE"], ldRow["TIPO"]);
1120  DB.SQLExec(lcSql);
1121  }
1122 
1123  }
1124 
1130  public static void _ValidaTodasTemplates(IConfigReportTemplates toConfig, string tcCodigoEmpresa)
1131  {
1132  string lcDataBase = toConfig._DB;
1133  DataTable loDt = new DataTable();
1134 
1135  //Validamos que esten los registros por defecto
1136  string lcSql = $"SELECT * FROM {DB.SQLDatabase(lcDataBase, "REPLAN")} WHERE EMPRESA = '{tcCodigoEmpresa}' AND ID_PARENT = 0 ";
1137  DB.SQLExec(lcSql, ref loDt);
1138 
1139  List<ITipoReport> loList = toConfig._ListadoTiposReport.Where(f => f._CrearRegistroDefecto).ToList();
1140  DataTable loDtIdiomas = Idiomas._GetIdiomas(string.Format("EMPRESA = '{0}'", tcCodigoEmpresa), "CODIGO");
1141 
1142  List<String> loListIdioma = (from loRow in loDtIdiomas.AsEnumerable()
1143  select Convert.ToString(loRow["CODIGO"])).ToList();
1144 
1145  if (!loListIdioma.Contains("")) loListIdioma.Add("");
1146 
1147  foreach (string lcCodigoIdioma in loListIdioma)
1148  {
1149  foreach (ITipoReport loTipo in loList)
1150  {
1151  DataRow[] loRow = loDt.Select(string.Format("TIPO = {0} AND IDI_PLAN = '{1}' ", loTipo._Codigo, lcCodigoIdioma));
1152 
1153  if (loRow.Length == 0)
1154  {
1155  _CreaRegistroDefecto(toConfig, tcCodigoEmpresa, lcCodigoIdioma, loTipo);
1156  }
1157  }
1158  }
1159 
1160  //Validamos que tenga grupo empresa
1161  lcSql = string.Format("SELECT * FROM {0} WHERE GRUPO = '' AND ID_PARENT > 0 ", DB.SQLDatabase(lcDataBase, "REPLAN"));
1162  DB.SQLExec(lcSql, ref loDt);
1163 
1164  if (loDt.Rows.Count > 0)
1165  {
1166  foreach (DataRow ldRow in loDt.Rows)
1167  {
1168  ReportTemplate loReport = new ReportTemplate(toConfig)
1169  {
1170  _Codigo = Convert.ToString(ldRow["ID"])
1171  };
1172  if (!Convert.ToString(ldRow["FICHERO"]).StartsWith(_cGrupoEmpresa)) loReport._UpdateFile(String.Format("{0}{1}", _cGrupoEmpresa, ldRow["FICHERO"]));
1173  }
1174 
1175  lcSql = String.Format("UPDATE {0} SET GRUPO = '{1}' WHERE GRUPO = '' AND ID_PARENT > 0 ", DB.SQLDatabase(lcDataBase, "REPLAN"), _cGrupoEmpresa);
1176  DB.SQLExec(lcSql, ref loDt);
1177  }
1178 
1179  //Validamos relaciones
1180  lcSql = String.Format("SELECT MIN(a.ID) as ID, a.NOMBRE, a.TIPO FROM {0} a INNER JOIN {0} b ON a.ID_PARENT = b.ID AND b.ID_PARENT = 0 GROUP BY a.NOMBRE, a.TIPO", DB.SQLDatabase(lcDataBase, "REPLAN"));
1181  DB.SQLExec(lcSql, ref loDt);
1182 
1183  foreach (DataRow ldRow in loDt.Rows)
1184  {
1185  lcSql = String.Format("UPDATE {0} SET ID_PARENT = {1} WHERE NOMBRE = '{2}' AND TIPO = {3} ", DB.SQLDatabase(lcDataBase, "REPLAN"), ldRow["ID"], ldRow["NOMBRE"], ldRow["TIPO"]);
1186  DB.SQLExec(lcSql);
1187  }
1188 
1189  }
1190 
1191  private static void _CreaRegistro(IConfigReportTemplates toConfig, string tcCodigoEmpresa, string tcCodigoIdioma, TiposReport toTipo, string tcFichero)
1192  {
1193  int lnCodigo;
1194  string lcDataBase;
1195  ReportTemplate loRemplate;
1196  string lcSql, lcNombre, lcObs, lcFichero;
1197  DataTable loDt = new DataTable();
1198  BaseReportPath loPath = toConfig._GetReportPath();
1199 
1200  if (!string.IsNullOrEmpty(tcFichero.Trim()))
1201  {
1202  lcDataBase = toConfig._DB;
1203  lcFichero = string.Format("{0}{1}{2}{3}", _cGrupoEmpresa, tcCodigoEmpresa, tcFichero.Trim(), tcCodigoIdioma);
1204 
1205  if (!_ExistsFile(loPath._IniPamReportStoredPath, lcFichero))
1206  {
1207  lcSql = string.Format("UPDATE {0} SET PREDET = 0 WHERE EMPRESA = '{1}' AND IDI_PLAN = '{2}' AND TIPO = {3} ", DB.SQLDatabase(lcDataBase, "REPLAN"), tcCodigoEmpresa, tcCodigoIdioma, Convert.ToInt32(toTipo));
1208  DB.SQLExec(lcSql);
1209 
1210  lcSql = string.Format("SELECT MAX(ID) FROM {0} ", DB.SQLDatabase(lcDataBase, "REPLAN"));
1211  DB.SQLExec(lcSql, ref loDt);
1212 
1213  lnCodigo = (loDt.Rows.Count > 0 && !loDt.Rows[0].IsNull(0) ? Convert.ToInt32(loDt.Rows[0][0]) : 0) + 1;
1214 
1215  lcNombre = string.Format("{0} personalizada", toTipo.__GetDescription());
1216  lcObs = string.Format("Plantilla personalizada de {0} generada automáticamente", toTipo.__GetDescription());
1217  lcFichero = string.Format("{0}{1}{2}{3}{4}", _cGrupoEmpresa, tcCodigoEmpresa, tcFichero.Trim(), tcCodigoIdioma, lnCodigo);
1218 
1219  lcSql = string.Format("INSERT INTO {0} (EMPRESA, TIPO, IDI_PLAN, ID, ID_PARENT, PREDET, NOMBRE , OBSERVA, FICHERO, GRUPO) VALUES ('{1}',{2},'{3}',{4}, {4}, 1, '{5}', '{6}', '{7}', '{8}'); ", DB.SQLDatabase(lcDataBase, "REPLAN"), tcCodigoEmpresa, Convert.ToInt32(toTipo), tcCodigoIdioma, lnCodigo++, lcNombre, lcObs, lcFichero, _cGrupoEmpresa);
1220  DB.SQLExec(lcSql);
1221 
1222  _CreateFile(loPath, lcFichero, toTipo);
1223 
1224  loDt = new DataTable();
1225  lcSql = string.Format("SELECT ID FROM {0} WHERE ID = ID_PARENT {1} AND TIPO = {2} ", DB.SQLDatabase(lcDataBase, "REPLAN"), string.IsNullOrEmpty(tcCodigoIdioma) ? string.Empty : String.Format(" AND EMPRESA = '{0}'", tcCodigoEmpresa), Convert.ToInt32(toTipo));
1226  DB.SQLExec(lcSql, ref loDt);
1227 
1228  foreach (DataRow loRow in loDt.Rows)
1229  {
1230  loRemplate = new ReportTemplate(toConfig)
1231  {
1232  _Codigo = Convert.ToString(loRow["ID"])
1233  };
1234  loRemplate._CopyTemplates();
1235  }
1236  }
1237  }
1238  }
1239 
1240 
1247  public static void _CreaRegistrosDefecto(IConfigReportTemplates toConfig, string tcCodigoEmpresa, string tcCodigoIdioma)
1248  {
1249  string lcDataBase;
1250  ReportTemplate loRemplate;
1251  DataTable loDt = new DataTable();
1252 
1253  lcDataBase = toConfig._DB;
1254 
1255  string lcSql = $"SELECT * FROM {DB.SQLDatabase(lcDataBase, "REPLAN")} " +
1256  $"WHERE GRUPO = '{Convert.ToString(EW_GLOBAL._GetVariable("wc_grupo"))}' AND EMPRESA = '{tcCodigoEmpresa}' AND IDI_PLAN = '{tcCodigoIdioma}' AND ID_PARENT = 0 ";
1257 
1258  DB.SQLExec(lcSql, ref loDt);
1259 
1260  List<ITipoReport> loList = toConfig._ListadoTiposReport.Where(f => f._CrearRegistroDefecto).ToList();
1261 
1262  foreach (ITipoReport loTipo in loList)
1263  {
1264  DataRow[] loRow = loDt.Select(string.Format("TIPO = {0}", loTipo._Codigo));
1265 
1266  if (loRow.Length == 0)
1267  {
1268  ReportTemplate._CreaRegistroDefecto(toConfig, tcCodigoEmpresa, tcCodigoIdioma, loTipo);
1269  }
1270  }
1271 
1272  loDt = new DataTable();
1273  lcSql = string.Format("SELECT ID FROM {0} WHERE ID = ID_PARENT {1} ", DB.SQLDatabase(lcDataBase, "REPLAN"), string.IsNullOrEmpty(tcCodigoIdioma) ? string.Empty : string.Format(" AND EMPRESA <> '{0}'", tcCodigoEmpresa));
1274  DB.SQLExec(lcSql, ref loDt);
1275 
1276  foreach (DataRow loRow in loDt.Rows)
1277  {
1278  loRemplate = new ReportTemplate(toConfig)
1279  {
1280  _Codigo = Convert.ToString(loRow["ID"])
1281  };
1282  loRemplate._CopyTemplates();
1283  }
1284  }
1285 
1293  public static void _CreaRegistroDefecto(IConfigReportTemplates toConfig, string tcCodigoEmpresa, string tcCodigoIdioma, ITipoReport toTipo)
1294  {
1295  int lnCodigo;
1296  string lcDataBase;
1297  ReportTemplate loRemplate;
1298  string lcNombre, lcObs, lcFichero;
1299  DataTable loDt = new DataTable();
1300 
1301  lcDataBase = toConfig._DB;
1302 
1303  string lcSql = $"SELECT MAX(ID) FROM {DB.SQLDatabase(lcDataBase, "REPLAN")} ";
1304  DB.SQLExec(lcSql, ref loDt);
1305 
1306  lnCodigo = (loDt.Rows.Count > 0 && !loDt.Rows[0].IsNull(0) ? Convert.ToInt32(loDt.Rows[0][0]) : 0) + 1;
1307 
1308 
1309  lcNombre = toTipo._Descripcion;
1310  lcObs = $"Plantilla de {lcNombre} generada automáticamente";
1311 
1312  lcFichero = toTipo._ReportBase;
1313 
1314  lcSql = string.Format("INSERT INTO {0} (EMPRESA, TIPO, IDI_PLAN, ID, ID_PARENT, PREDET, NOMBRE , OBSERVA, FICHERO, GRUPO) VALUES ('{1}',{2},'{3}',{4}, 0, 1, '{5}', '{6}', '{7}', ''); ", DB.SQLDatabase(lcDataBase, "REPLAN"), tcCodigoEmpresa, toTipo._Codigo, tcCodigoIdioma, lnCodigo++, lcNombre, lcObs, lcFichero);
1315  DB.SQLExec(lcSql);
1316 
1317  //_CreateFile(lcFichero, toTipo);
1318 
1319  loDt = new DataTable();
1320  lcSql = string.Format("SELECT ID FROM {0} WHERE ID = ID_PARENT {1} AND TIPO = {2} ", DB.SQLDatabase(lcDataBase, "REPLAN"), string.IsNullOrEmpty(tcCodigoIdioma) ? string.Empty : $" AND EMPRESA = '{tcCodigoEmpresa}'", toTipo._Codigo);
1321  DB.SQLExec(lcSql, ref loDt);
1322 
1323  foreach (DataRow loRow in loDt.Rows)
1324  {
1325  loRemplate = new ReportTemplate(toConfig)
1326  {
1327  _Codigo = Convert.ToString(loRow["ID"])
1328  };
1329  loRemplate._CopyTemplates();
1330  }
1331  }
1332 
1337  public bool _FileCanBeRemoved()
1338  {
1339  DataTable loDt = new DataTable();
1340 
1341  loDt = new DataTable();
1342  string lcSql = $"SELECT * FROM {DB.SQLDatabase(_DataBase, "REPLAN")} WHERE ID <> {_Id} AND FICHERO = '{_Fichero}' ";
1343  DB.SQLExec(lcSql, ref loDt);
1344 
1345  return loDt.Rows.Count == 0;
1346  }
1347 
1352  public bool _ChangeFile(FileInfo toFile)
1353  {
1354  string lcName = _GetNameFichero(_Empresa, _Idioma, Convert.ToInt32(_Codigo));
1355 
1356  if (_CopyFile(toFile.FullName, Path.Combine(_cPathServer, _ReportPath._IniPamReportStoredPath, $"{lcName}.report") , true))
1357  {
1358  _Fichero = lcName;
1359  _SaveFileName();
1360 
1361  return true;
1362  }
1363  return false;
1364  }
1365 
1366  private void _UpdateFile(string tcNewFile)
1367  {
1368  tcNewFile = tcNewFile.Trim();
1369  if (!string.IsNullOrEmpty(tcNewFile))
1370  {
1371  _CreateFile(tcNewFile, _Fichero);
1372  _Fichero = tcNewFile;
1373 
1374  _SaveFileName();
1375  }
1376  }
1377 
1378 
1383  protected string _ReportBase
1384  {
1385  get
1386  {
1387  return _TipoReport._ReportBase;
1388  }
1389  }
1390 
1394  public bool _IsFileChanged
1395  {
1396  get
1397  {
1398  return _Fichero != _GetNameFichero(_Empresa, _Idioma);
1399  }
1400  }
1401 
1406  public bool _EditTemplate(bool tlMantenerFichero)
1407  {
1408  bool lbOk = false;
1409  string lcFichero, lcFicheroTmp = string.Empty;
1410 
1411  lcFichero = _GetNameFichero(_Empresa, _Idioma);
1412  if (_Fichero != lcFichero)
1413  {
1414  lcFicheroTmp = _Fichero;
1415 
1416  if (!tlMantenerFichero)
1417  {
1418  _Fichero = lcFichero;
1419  _SaveFileName();
1420  }
1421  }
1422  else if (_IsNew && _oTemplateBase != null)
1423  {
1424  lcFicheroTmp = _oTemplateBase._Fichero;
1425  }
1426 
1427  if (!_ExistsFile()) lbOk = _CreateFile(_Fichero, lcFicheroTmp);
1428  _OpenTemplate();
1429 
1430  return lbOk;
1431  }
1432 
1436  public BaseReportPath _ReportPath
1437  {
1438  get
1439  {
1440  if (_oReportPath == null || !_TipoReport._Codigo.Equals(ultimoCodigoReport)) //Para que refresque si ha cambiado el tipo
1441  {
1442  ReportTPV report = null; //Trato de obtener un path específico; sino devuelvo el genérico
1443  try
1444  {
1445  report = _ConfigReportTemplates._GetReportTPV(_TipoReport._Codigo, _Fichero, _Documento);
1446  }
1447  catch (Exception exception)
1448  {
1449  DB.Registrar_Error(exception);
1450  }
1451  finally
1452  {
1453  if (report != null)
1454  {
1455  _oReportPath = report._Path;
1456  ultimoCodigoReport = _TipoReport._Codigo;
1457  }
1458  else
1459  {
1460  _oReportPath = _ConfigReportTemplates._GetReportPath();
1461  _oReportPath._PathServer = Convert.ToString(EW_GLOBAL._GetVariable("wc_iniservidor"));
1462  ultimoCodigoReport = -1;
1463  }
1464  }
1465  }
1466  return _oReportPath;
1467  }
1468  }
1469  private int ultimoCodigoReport = -1;
1470 
1471 
1476  private Boolean _ExistsFile()
1477  {
1478  String lcNombre, lcPathDestino, lcPathPam;
1479 
1480  lcPathPam = _ReportPath._IniPamReportStoredPath;
1481 
1482  if (!String.IsNullOrEmpty(_Fichero))
1483  {
1484  lcNombre = String.Format("{0}.report", _Fichero);
1485  lcPathDestino = Path.Combine(_cPathServer, lcPathPam, lcNombre);
1486 
1487  return File.Exists(lcPathDestino);
1488  }
1489  return true;
1490  }
1491 
1496  private static Boolean _ExistsFile(String tcniPamReportStoredPath, String tcFile)
1497  {
1498  String[] lcArr;
1499  String lcNombre, lcPathDestino;
1500 
1501  if (!String.IsNullOrEmpty(tcFile))
1502  {
1503  lcNombre = String.Format("{0}*.report", tcFile);
1504  lcPathDestino = Path.Combine(_cPathServer, tcniPamReportStoredPath);
1505 
1506  lcArr = Directory.GetFiles(lcPathDestino, lcNombre);
1507  return lcArr.Length > 0;
1508  }
1509  return true;
1510  }
1511 
1516  private bool _CreateFile(String tcFileName, String tcFileOri, Boolean tlValidateFile = false)
1517  {
1518  bool lbExistFile;
1519  string lcNombre = string.Empty;
1520  string lcPathDestino = string.Empty;
1521  string lcPathOrigen = string.Empty;
1522  string lcPathPam = string.Empty;
1523  string lcPathBase = string.Empty;
1524  string lcMessage = string.Empty;
1525 
1526  lcNombre = string.Format("{0}.report", tcFileName);
1527 
1528  lcPathPam = _ReportPath._IniPamReportStoredPath;
1529  lcPathBase = _ReportPath._BaseReportStoredPath;
1530 
1531  if (!string.IsNullOrEmpty(tcFileOri))
1532  {
1533  lcPathOrigen = Path.Combine(_cPathServer, lcPathPam, string.Format("{0}.report", tcFileOri));
1534  if (!File.Exists(lcPathOrigen))
1535  {
1536  lcPathOrigen = Path.Combine(_cPathServer, lcPathBase, string.Format("{0}.report", _ReportBase));
1537  }
1538  }
1539  else
1540  {
1541  lcPathOrigen = Path.Combine(_cPathServer, lcPathBase, string.Format("{0}.report", _ReportBase));
1542  }
1543 
1544  lcPathDestino = Path.Combine(_cPathServer, lcPathPam, lcNombre);
1545 
1546 
1547  lbExistFile = File.Exists(lcPathDestino);
1548 
1549  if (lbExistFile && _LinkForm)
1550  {
1551  lcMessage = String.Format("Se ha detectado que el fichero {0} ya existe. ¿ Desea mantener el fichero ?", lcNombre);
1552  lbExistFile = DialogResult.Yes == FUNCTIONS._MessageBox(lcMessage, "Información", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2);
1553  }
1554 
1555  return !lbExistFile ? _CopyFile(lcPathOrigen, lcPathDestino) : false;
1556 
1557  }
1558 
1559 
1564  private static Boolean _CreateFile(BaseReportPath toReportPath, String tcFileName, TiposReport toTipo)
1565  {
1566  Boolean lbExistFile;
1567  String lcNombre, lcPathDestino, lcPathOrigen, lcPathPam, lcPathBase;
1568 
1569  lcPathPam = toReportPath._IniPamReportStoredPath;
1570  lcPathBase = toReportPath._BaseReportStoredPath;
1571  lcNombre = String.Format("{0}.report", tcFileName);
1572  lcPathDestino = Path.Combine(_cPathServer, lcPathPam, lcNombre);
1573  lcPathOrigen = Path.Combine(_cPathServer, lcPathBase, String.Format("{0}.report", toTipo));
1574 
1575  lbExistFile = File.Exists(lcPathDestino);
1576 
1577  return !lbExistFile ? _CopyFile(lcPathOrigen, lcPathDestino) : false;
1578 
1579  }
1580 
1588  private static Boolean _CopyFile(String tcPathOrigen, String tcPathDestino, Boolean tlForze = false)
1589  {
1590  try
1591  {
1592  if (tcPathOrigen.ToLower() != tcPathDestino.ToLower())
1593  {
1594  FileInfo loFile = new FileInfo(tcPathDestino);
1595  if (!loFile.Directory.Exists) Directory.CreateDirectory(loFile.Directory.FullName);
1596 
1597  if (!File.Exists(tcPathDestino) || tlForze)
1598  {
1599  File.Copy(tcPathOrigen, tcPathDestino, true);
1600  //PE-97635 Quitamos la marca del reaonly al nuevo fichero
1601  FileAttributes attributes = File.GetAttributes(tcPathDestino);
1602 
1603  if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
1604  {
1605  File.SetAttributes(tcPathDestino, attributes & ~FileAttributes.ReadOnly);
1606  }
1607  }
1608  }
1609  }
1610  catch (Exception)
1611  {
1612  return false;
1613  }
1614  return true;
1615  }
1616  }
1617 
1621  public class ReportTemplates
1623  {
1624  private ConfigReportTemplates _oConfigReportTemplates = new ConfigReportTemplates();
1625 
1629  public override IConfigReportTemplates _ConfigReportTemplates
1630  {
1631  get
1632  {
1633  return _oConfigReportTemplates;
1634  }
1635  }
1636 
1642  public static string _GetDefaultTemplate(ITipoReport toTipoReport)
1643  {
1644  ReportTemplates loTemplates = new ReportTemplates(Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa")));
1645 
1646  return loTemplates._GetTemplate(toTipoReport);
1647  }
1648 
1655  public static string _GetTemplatePredet(ITipoReport toTipoReport, string tcIdioma)
1656  {
1657  return _GetTemplatePredet(toTipoReport._Codigo, tcIdioma);
1658  }
1659 
1666  public static string _GetTemplatePredet(int tnTipoReport, string tcIdioma)
1667  {
1668  ReportTemplates loTemplates;
1669 
1670  if (string.IsNullOrEmpty(tcIdioma.Trim()))
1671  {
1672  loTemplates = new ReportTemplates(Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa")));
1673  }
1674  else
1675  {
1676  loTemplates = new ReportTemplates(Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa")), tcIdioma);
1677  }
1678 
1679  return loTemplates._GetTemplate(tnTipoReport, false);
1680  }
1681 
1688  public static string _GetEquivalTemplate(string tcCodigoTemplate, string tcCodigoIdioma)
1689  {
1690  string lcTemplate = tcCodigoTemplate;
1691  ReportTemplate loTemplate = new ReportTemplate(new ConfigReportTemplates())
1692  {
1693  _Empresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa")),
1694  _Codigo = tcCodigoTemplate
1695  };
1696 
1697  if (!loTemplate._IsFileBase)
1698  {
1699  ReportTemplates loTemplates;
1700 
1701  if (string.IsNullOrEmpty(tcCodigoIdioma.Trim()))
1702  {
1703  loTemplates = new ReportTemplates(Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa")));
1704  }
1705  else
1706  {
1707  loTemplates = new ReportTemplates(Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa")), tcCodigoIdioma);
1708  }
1709 
1710  DataTable loDt = loTemplates._Templates(loTemplate._TipoReport);
1711 
1712  lcTemplate = (from loRow in loDt.AsEnumerable()
1713  where Convert.ToInt32(loRow["ID_PARENT"]) == loTemplate._Parent
1714  select Convert.ToString(loRow["ID"])).FirstOrDefault();
1715 
1716 
1717  if (string.IsNullOrEmpty(lcTemplate)) lcTemplate = loTemplates._GetTemplate(loTemplate._TipoReport);
1718 
1719  }
1720 
1721  return lcTemplate;
1722  }
1723 
1730  public ReportTemplates(string tcCodigoEmpresa, string tcCodigoIdioma, bool tlValidate = false)
1731  :base(tcCodigoEmpresa, tcCodigoIdioma, tlValidate)
1732  {
1733 
1734  }
1735 
1741  public ReportTemplates(string tcCodigoEmpresa, bool tlValidate = false)
1742  : base(tcCodigoEmpresa, tlValidate)
1743  {
1744 
1745  }
1746  }
1747 
1751  public abstract class ReportTemplatesBase
1752  {
1756  protected enum TipoIdiomaEmpresa
1757  {
1761  Idioma = 0,
1765  Empresa = 1
1766  }
1767 
1768  private DataTable _oTmp = null;
1769  private DataTable _oPlan = null;
1770 
1774  public abstract IConfigReportTemplates _ConfigReportTemplates { get; }
1775 
1779  protected TipoIdiomaEmpresa _TipoIdiomaEmpresa { get; }
1780 
1784  public string _Idioma { get; set; }
1785 
1789  public string _Empresa { get; set; }
1790 
1791 
1792  private string _DB
1793  {
1794  get
1795  {
1796  return _ConfigReportTemplates._DB;
1797  }
1798  }
1799 
1803  protected DataTable _Plan
1804  {
1805  get
1806  {
1807  if (_oPlan == null)
1808  {
1809  String lcSql;
1810  _oPlan = new DataTable();
1811 
1812  lcSql = String.Format("SELECT * FROM {0} WHERE EMPRESA = '{1}' AND IDI_PLAN = '{2}' {3}", DB.SQLDatabase(_DB, "REPLAN"), _Empresa, _Idioma, (_TipoIdiomaEmpresa == TipoIdiomaEmpresa.Idioma && String.IsNullOrEmpty(_Idioma)) ? " AND 1 = 0 " : String.Empty );
1813  DB.SQLExec(lcSql, ref _oPlan);
1814 
1815  if (_oTmp != null)
1816  {
1817  foreach (DataRow loRow in _oTmp.Rows)
1818  {
1819  List<DataRow> ldRowPlan = (from loRowTmp in _oPlan.AsEnumerable()
1820  where Convert.ToString(loRowTmp["ID"]) == Convert.ToString(loRow["ID"])
1821  select loRowTmp).ToList();
1822 
1823  if (ldRowPlan.Count > 0)
1824  {
1825  ldRowPlan[0]["PREDET"] = loRow["PREDET"];
1826  }
1827  }
1828  }
1829 
1830  }
1831  return _oPlan;
1832  }
1833  }
1834 
1840  public ITipoReport _GetTipoReport(Int32 tnCodigo)
1841  {
1842  return _ConfigReportTemplates._ListadoTiposReport.Where(f => f._Codigo == tnCodigo).First();
1843  }
1844 
1850  public DataTable _Templates(ITipoReport toTipoReport)
1851  {
1852  return _Templates(toTipoReport._Codigo);
1853  }
1854 
1860  public DataTable _Templates(Int32 tnTipoReport)
1861  {
1862  List<ReportTemplate> lolistTemplates = new List<ReportTemplate>();
1863  DataTable loDt = _Plan.Clone();
1864 
1865  if (_Plan.Rows.Count > 0)
1866  {
1867  List<DataRow> loList = (from loRow in _Plan.AsEnumerable()
1868  where Convert.ToInt32(loRow["TIPO"]) == tnTipoReport
1869  select loRow).ToList();
1870 
1871  foreach (DataRow loRow in loList)
1872  {
1873  loDt.ImportRow(loRow);
1874  }
1875  }
1876 
1877  return loDt;
1878  }
1879 
1883  public virtual void _Refresh()
1884  {
1885  _oTmp = _oPlan;
1886  _oPlan = null;
1887  }
1888 
1894  public string _GetPredet(ITipoReport toTipoReport)
1895  {
1896  return _GetPredet(toTipoReport._Codigo);
1897  }
1898 
1904  public string _GetPredet(int tnTipoReport)
1905  {
1906  List<DataRow> loList = (from loRow in _Plan.AsEnumerable()
1907  where Convert.ToInt32(loRow["TIPO"]) == tnTipoReport && Convert.ToBoolean(loRow["PREDET"])
1908  select loRow).ToList();
1909 
1910  return loList.Count > 0 ? Convert.ToString(loList[0]["ID"]) : string.Empty;
1911  }
1912 
1919  public string _GetTemplate(ITipoReport toTipoReport, bool tlSearchLastUsetTemplate = true)
1920  {
1921  return _GetTemplate(toTipoReport._Codigo, tlSearchLastUsetTemplate);
1922  }
1923 
1930  public string _GetTemplate(int tnTipoReport, bool tlSearchLastUsetTemplate = true)
1931  {
1932 
1933  string lcTemplate = "";
1934 
1935  if(tlSearchLastUsetTemplate) lcTemplate = _GetLastUserTemplate(tnTipoReport);
1936 
1937  if (string.IsNullOrEmpty(lcTemplate)) lcTemplate = _GetPredet(tnTipoReport);
1938 
1939  if (string.IsNullOrEmpty(lcTemplate))
1940  {
1941 
1942  List<DataRow> loList = (from loRow in _Plan.AsEnumerable()
1943  where Convert.ToInt32(loRow["TIPO"]) == tnTipoReport && Convert.ToInt32(loRow["ID_PARENT"]) == 0
1944  select loRow).ToList();
1945 
1946  lcTemplate = loList.Count > 0 ? Convert.ToString(loList[0]["ID"]) : string.Empty;
1947 
1948  }
1949  return lcTemplate;
1950  }
1951 
1952 
1958  public DataRow _GetTemplate(string tcCodigo)
1959  {
1960 
1961 
1962  if (int.TryParse(tcCodigo, out int lnCodigo))
1963  {
1964  List<DataRow> loList = (from loRow in _Plan.AsEnumerable()
1965  where Convert.ToInt32(loRow["ID"]) == lnCodigo
1966  select loRow).ToList();
1967 
1968  return loList.Count > 0 ? loList[0] : null;
1969  }
1970  return null;
1971  }
1972 
1973 
1979  private string _GetLastUserTemplate(ITipoReport toTipoReport)
1980  {
1981  return _GetLastUserTemplate(toTipoReport._Codigo);
1982  }
1983 
1989  private string _GetLastUserTemplate(Int32 tnTipoReport)
1990  {
1991  string lcUsuario, lcSql;
1992  DataTable loDt = new DataTable();
1993 
1994  lcUsuario = usuario.Usuario._This._Codigo;
1995 
1996  lcSql = string.Format("SELECT * FROM {0} WHERE USUARIO = '{1}' AND EMPRESA = '{4}' AND TIPO_DOC = {2} {3} ORDER BY FECHA DESC ", DB.SQLDatabase(_DB, "SAGEREPORTS"), lcUsuario, tnTipoReport, !String.IsNullOrEmpty(_Idioma.Trim()) ? String.Format(" AND IDIOMA = '{0}' ", _Idioma.Trim()) : String.Empty, _Empresa);
1997  DB.SQLExec(lcSql, ref loDt);
1998 
1999  return loDt.Rows.Count > 0 ? Convert.ToString(loDt.Rows[0]["ID_REPLAN"]) : String.Empty;
2000  }
2001 
2007  public void _SetPredet(ITipoReport toTipo, string tcCodigo)
2008  {
2009  _SetPredet(toTipo._Codigo, tcCodigo);
2010  }
2011 
2017  public void _SetPredet(int tnTipo, string tcCodigo)
2018  {
2019  List<DataRow> loList = (from loRow in _Plan.AsEnumerable()
2020  where Convert.ToInt32(loRow["TIPO"]) == tnTipo
2021  select loRow).ToList();
2022 
2023  foreach (DataRow loRow in loList)
2024  {
2025  loRow["PREDET"] = Convert.ToString(loRow["ID"]) == tcCodigo;
2026  }
2027  }
2028 
2035  public bool _ExistTemplate(ITipoReport toTipo, int tnCodigoTemplate)
2036  {
2037  return _ExistTemplate(toTipo._Codigo, tnCodigoTemplate);
2038  }
2039 
2046  public bool _ExistTemplate(int tnTipo, int tnCodigoTemplate)
2047  {
2048  List<DataRow> loList = (from loRow in _Plan.AsEnumerable()
2049  where Convert.ToInt32(loRow["TIPO"]) == tnTipo && Convert.ToString(loRow["IDI_PLAN"]).Trim() == _Idioma && Convert.ToString(loRow["EMPRESA"]) == _Empresa && Convert.ToInt32(loRow["ID"]) == tnCodigoTemplate
2050  select loRow).ToList();
2051 
2052  return loList.Count > 0;
2053  }
2054 
2059  public virtual bool _Save()
2060  {
2061  string lcSql;
2062 
2063  List<DataRow> loList = (from loRow in _Plan.AsEnumerable()
2064  where Convert.ToBoolean(loRow["PREDET"])
2065  select loRow).ToList();
2066 
2067  lcSql = string.Format("UPDATE {0} SET PREDET = 0 WHERE EMPRESA = '{1}' AND IDI_PLAN = '{2}' ", DB.SQLDatabase(_DB, "REPLAN"), _Empresa, _Idioma);
2068  DB.SQLExec(lcSql);
2069 
2070  foreach (DataRow loRow in loList)
2071  {
2072  lcSql = string.Format("UPDATE {0} SET PREDET = 1 WHERE ID = '{1}' ", DB.SQLDatabase(_DB, "REPLAN"), loRow["ID"]);
2073  DB.SQLExec(lcSql);
2074  }
2075 
2076  return true;
2077  }
2078 
2079  #region static
2080 
2086  public void _CreateRelTemplate(String tcCodigoEmpresa, String tcCodigoIdioma = "")
2087  {
2088  ReportTemplate._CreaRegistrosDefecto(_ConfigReportTemplates, tcCodigoEmpresa, tcCodigoIdioma);
2089  }
2090 
2096  public void _RemoveRelTemplate(String tcCodigoEmpresa, String tcCodigoIdioma = "")
2097  {
2098  ReportTemplate._RemoveRegistrosDefecto(_ConfigReportTemplates, tcCodigoEmpresa, tcCodigoIdioma);
2099  }
2100 
2101  #endregion static
2102 
2103  #region constructores
2104 
2111  public ReportTemplatesBase(String tcCodigoEmpresa, String tcCodigoIdioma, Boolean tlValidate = false)
2112  {
2113  this._Empresa = tcCodigoEmpresa;
2114  this._Idioma = tcCodigoIdioma;
2115  this._TipoIdiomaEmpresa = TipoIdiomaEmpresa.Idioma;
2116 
2117  if (!String.IsNullOrEmpty(tcCodigoEmpresa) && tlValidate) ReportTemplate._ValidaTemplates(_ConfigReportTemplates, tcCodigoEmpresa, tcCodigoIdioma);
2118  }
2119 
2125  public ReportTemplatesBase(String tcCodigoEmpresa, Boolean tlValidate = false)
2126  {
2127  this._Empresa = tcCodigoEmpresa;
2128  this._Idioma = String.Empty;
2129  this._TipoIdiomaEmpresa = TipoIdiomaEmpresa.Empresa;
2130 
2131  if (!String.IsNullOrEmpty(tcCodigoEmpresa) && tlValidate) ReportTemplate._ValidaTemplates(_ConfigReportTemplates, tcCodigoEmpresa, String.Empty);
2132  }
2133 
2134  #endregion constructores
2135  }
2136 }
static void _ValidaTodasTemplates(IConfigReportTemplates toConfig, string tcCodigoEmpresa)
Valida si existen las templates por defecto, sino existen las crea
ITipoReport _TipoReport
Tipo de report
BaseReportPath _GetReportPath()
Obtiene el report path
void _OpenTemplate()
Metodo para editar una template
Clase de negocio base para mantenimientos
Definition: clsEwBase.cs:1643
bool IsFileBase(string tcFileName)
Indica si es el fichero es base
void ReportTemplatesAddDataBase(IConfig loConfig)
Añade Base de datos de los reports
bool _FileCanBeRemoved()
Indica si el fichero se puede eliminar
ReportTemplates(string tcCodigoEmpresa, bool tlValidate=false)
Constructor
override void _New(string tcCodigo="")
Da de alta un nuevo registro
eTipoDocumento
Tipo documento
Definition: Report.cs:2260
DataTrasp _DataTrasp
Datos de traspaso para la edición de reports
Definition: Report.cs:332
static AddonsController Instance
Instancia al objeto singleton Addons
abstract String _BaseReportStoredPath
Get del path base
String _PathServer
Gets el path del servidor del fichero (.report)
static void _ValidaTemplates(IConfigReportTemplates toConfig, String tcCodigoEmpresa, String tcCodigoIdioma)
Valida si existen las templates por defecto, sino existen las crea
TipoBase
Tipo para heredar segun los ficheros
Clase para la definición de tipos de report
bool _ExistTemplate(int tnTipo, int tnCodigoTemplate)
Indica si existe una plantilla en los datos cargados
Clase para la gestión de los templates
Argumentos para los eventos lanzados por el addons en caso de error
virtual String _ReportFile
Gets o sets el path del fichero .report
Clase documento de DEPOSITO DE COMPRA
override bool _Save()
Guarda la template
void _OpenEditor()
Abre el report en el SageReportDesigner
Definition: Report.cs:1133
PE-82357 Clase Idiomas
Definition: clsIdiomas.cs:17
static bool _RemoveFile(string tcInitPathServer, string tcFileName)
Elimina el fichero
ReportTemplatesBase _GetReportTemplates(String tcEmpresa)
Obtiene la clase ReportTemplates de empresa
string _GetPredet(ITipoReport toTipoReport)
Obtiene el predeterminado
Clase documento de venta TPV
Definition: DocVentaTpv.cs:47
List< ITipoReport > _ListadoTiposReport
Listado de tipos de report
static void _RemoveRegistrosDefecto(IConfigReportTemplates toConfig, String tcCodigoEmpresa, String tcCodigoIdioma)
Elimina los registros en idioma y empresa al generar un isioma o empresa nuevo
bool _RemoveFile(string tcFileName)
Elimina el fichero
TipoReport(int tnCodigo, string tcDescripcion, string tcReportBase)
Constructor
ReportTemplate(IConfigReportTemplates toConfig)
Constructor
Clase documento de PRESUPUESTOS
Definition: DocsPresup.cs:39
string _GetTemplate(int tnTipoReport, bool tlSearchLastUsetTemplate=true)
Devuelve la plantilla predeteterminada
ITipoReport _GetTipoReport(Int32 tnCodigo)
Obtiene el tipo de report a partir del código
Classe documento Factura de venta
Definition: DocsVentaFra.cs:61
bool _ChangeFile(FileInfo toFile)
Cambia el fichero
BaseReportPath _GetReportPath()
Obtiene el ReportPath
Gestiona las plantillas de los reports
Clase documento de PROPUESTAS DE COMPRA
void _SetPredet(ITipoReport toTipo, string tcCodigo)
Establece el predeterminado
Clase de configuración
Definition: DataTrasp.cs:33
DataTable _Templates(ITipoReport toTipoReport)
Devuelve los registros para un tipo de report
abstract String _IniPamReportStoredPath
Get del path personalizado
Clase abstracta BaseReportPath
ReportTemplates(string tcCodigoEmpresa, string tcCodigoIdioma, bool tlValidate=false)
Constructor
TipoImpresion
Tipos de impresión que soporta la clase
Classe documento Factura de compra
Clase documento de PEDIDOS
Definition: DocsPed.cs:39
Interficie para la definicón de los tipos de report
bool _RemoveFile()
Elimina el fichero
bool _IsFileBase
Indica si es el fichero es base
Clase de negocio para Etiquetas de envío
static string _GetTemplatePredet(ITipoReport toTipoReport, string tcIdioma)
Obtiene la plantilla predeterminada
bool _ExistTemplate(ITipoReport toTipo, int tnCodigoTemplate)
Indica si existe una plantilla en los datos cargados
TiposReport
Distintos tipos de reports con los que podemos operar
Definition: reports.cs:29
ReportTPV clase que se utiliza para poder inicializar los datos de la clase Report ...
Definition: ReportTPV.cs:29
DataTable _GlobalVar
Variables globales
Definition: DataTrasp.cs:604
void _RemoveRelTemplate(String tcCodigoEmpresa, String tcCodigoIdioma="")
REmove las templates relacionadas al crear un empresa o idioma
ReportTemplatesBase _GetReportTemplates(String tcEmpresa, String tcIdioma)
Obtiene la clase ReportTemplates de empresa e idioma
string _GetTemplate(ITipoReport toTipoReport, bool tlSearchLastUsetTemplate=true)
Devuelve la plantilla predeteterminada
Definición de la interficie que han de cumplir aquellos clases que quieran modificar los resultados d...
Definition: IDocPrint.cs:471
virtual bool _Save()
Actualiza el campo predet
Mante de plantillas
Definition: frmReplan.cs:22
void _SetPredet(int tnTipo, string tcCodigo)
Establece el predeterminado
Clase para indicar el tipo de documento para los campos adicionales
Definition: Report.cs:2253
static string _GetEquivalTemplate(string tcCodigoTemplate, string tcCodigoIdioma)
Devuelve a partir de un codigo de template su equivalente para el idioma seleccionado ...
ReportTemplatesBase(String tcCodigoEmpresa, Boolean tlValidate=false)
Constructor
ReportTPV _GetReportTPV(int tnTipo, string tcFichero, dynamic toDoc)
Obtener el ReportTPV
ReportTemplatesBase(String tcCodigoEmpresa, String tcCodigoIdioma, Boolean tlValidate=false)
Constructor
static string _GetDefaultTemplate(ITipoReport toTipoReport)
Obtiene el template para un tipo buscando en la ultima ejecucion, sino el predeterminado ...
Interface para las configuraciones de los ReportTemplates
TipoIdiomaEmpresa
Indica si el objeto trabaja desde empresa o idioma
eTipoDocumento
Detalle los tipos de documento posibles de ventas y compras
Definition: docsvenenum.cs:32
_EstadosMantenimiento
Declaro un enum para los estados del mantenimiento.
Definition: clsEwBase.cs:1671
static string _GetTemplatePredet(int tnTipoReport, string tcIdioma)
Obtiene la plantilla predeterminada
static DataTable _GetIdiomas(String lcFiltro="", String tcCampos="*")
PE-98706 Devuelve todos los registros de idiomas aplicando el filtro
Definition: clsIdiomas.cs:776
Clase ReportEtiquetaPath
BaseReportPath _Path
Path base
Definition: Report.cs:436
TipoReport
Enum para saber TipoReport
Definition: Report.cs:57
string _GetPredet(int tnTipoReport)
Obtiene el predeterminado
override bool _Save_Before()
Validaciones antes de guardar
CommandManager Commands
Comandos de addons
Clase documento de ALBARANES DE COMPRA
Clase documento de PEDIDOS DE COMPRA
int _Parent
Fichero padre, si ID = ID_PARENT original, ID_PARENT = 0 Registro por defecto
override bool _Delete()
Delete
DataRow _GetTemplate(string tcCodigo)
Retorna el DataRow de los datos de la template
Configuración de los templates de Sage50
virtual void _Refresh()
Inicializa los datos
static void _CreaRegistrosDefecto(IConfigReportTemplates toConfig, string tcCodigoEmpresa, string tcCodigoIdioma)
Crea los registros en idioma y empresa al generar un isioma o empresa nuevo
bool _EditTemplate(bool tlMantenerFichero)
Edita el fichero
static void _CreaRegistroDefecto(IConfigReportTemplates toConfig, string tcCodigoEmpresa, string tcCodigoIdioma, ITipoReport toTipo)
Crea los registros en idioma y empresa al generar un isioma o empresa nuevo
List< String > _ReportNonVisibleFields
Campos que debemos ocultar en las consultas (TALLA, COLOR, PESO ....)
Definition: DataTrasp.cs:637
Config _DataTraspConfig
Configuración
Definition: DataTrasp.cs:574
override void _Load()
Load
String _DocumentName
Nombre del documento
Definition: DataTrasp.cs:589
void _CopyTemplates()
Crea los registros para los otros idiomas y empresa
string _Fichero
Nombre del fichero
DataTable _Templates(Int32 tnTipoReport)
Devuelve los registros para un tipo de report
Clase para el traspaso de información para la generación de expressions en la edición de los reports ...
Definition: DataTrasp.cs:23
void _CreateRelTemplate(String tcCodigoEmpresa, String tcCodigoIdioma="")
Crea las templates relacionadas al crear un empresa o idioma
Clase de documentos DEPOSITO
Definition: DocsDeposito.cs:33