Comunicados.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.ComponentModel;
6 using System.Data;
7 using System.IO;
8 using sage.ew.ewbase;
9 using sage.ew.interficies;
10 using sage.ew.db;
11 using sage.ew.global;
12 using sage.ew.functions;
13 using sage.ew.ewbase.Clases;
14 using System.Reflection;
15 using System.Windows.Forms;
16 using System.Web.Script.Serialization;
18 
19 namespace Sage.ES.S50.Comunicados.Negocio.Clases
20 {
25  {
26  #region PROPIEDADES PRIVADAS
27 
28 
32  private string _lcEmpresa = EW_GLOBAL._GetVariable("wc_empresa").ToString().Trim();
33 
34 
38  private ConfiguracionExpresionesListados _oConfiguracionComunicadosListados = null;
39 
40 
41  #endregion PROPIEDADES PRIVADAS
42 
43 
44  #region PROPIEDADES PÚBLICAS
45 
46 
50  [DefaultValue("")]
51  public string _Empresa
52  {
53  get {
54  _Campo("EMPRESA", _lcEmpresa);
55  return _lcEmpresa;
56  }
57  set {
58  _Campo("EMPRESA", _lcEmpresa);
59  }
60  }
61 
62 
66  new public string _Codigo
67  {
68  get
69  {
70  return Convert.ToString(_Campo("CODIGO"));
71  }
72  set
73  {
74  // Dejar las instrucciones en este orden, primero de todo el base._Codigo=value.
75  // Si se pone primero _Empresa= antes de base._Codigo entonces algo como lo que sigue acaba mostrando el formulario del
76  // comunicado pero desaparece inexplicablemente el ewtextboxcodigo y está visible y en las coordenadas.
77  //
78  // Comunicados loCom = new COmunicados()
79  // loCom._Codigo= "000000012"
80  // loCOm._Show()
81  //
82  // En el _Save_Before() se ha puesto un this._Empresa = this._lcEmpresa para que asi al grabar incluso cuando se crea el registro
83  // al hacer intro en contador, ya grabe correctamente tanto empresa como codigo.
84  //
85  base._Codigo = value;
86  _Campo("CODIGO", value);
87  _Empresa = _lcEmpresa;
88  }
89  }
90 
91 
95  public ConfiguracionExpresionesListados _ConfiguracionComunicadosListados
96  {
97  get
98  {
99 
100  if (_oConfiguracionComunicadosListados == null)
101  {
102  _oConfiguracionComunicadosListados = ConfiguracionExpresionesListados._GetConfiguracion(Convert.ToString(_Config));
103  _oConfiguracionComunicadosListados._Mante = this;
104  }
105  else if(_oConfiguracionComunicadosListados._Mante == null)
106  {
107  _oConfiguracionComunicadosListados._Mante = this;
108  }
109  return _oConfiguracionComunicadosListados;
110  }
111  }
112 
113 
117  public string _Config
118  {
119  get
120  {
121  return Convert.ToString(_Campo("CONFIG")).Trim();
122  }
123  set
124  {
125  _Campo("CONFIG", value);
126  _oConfiguracionComunicadosListados = ConfiguracionExpresionesListados._GetConfiguracion(value);
127  }
128  }
129 
130 
134  public TipoPlantillaComunicados _TipoPlantilla
135  {
136  get
137  {
138  return Enum.IsDefined(typeof(TipoPlantillaComunicados), Convert.ToInt32(_Campo("TIPO_PLAN"))) ? (TipoPlantillaComunicados)Convert.ToInt16(_Campo("TIPO_PLAN")) : TipoPlantillaComunicados.Personalizada;
139  }
140  set
141  {
142  _Campo("TIPO_PLAN", Enum.IsDefined(typeof(TipoPlantillaComunicados), value) ? Convert.ToInt16(value) : Convert.ToInt16(TipoPlantillaComunicados.Personalizada));
143  }
144  }
145 
146 
150  public string _Asunto
151  {
152  get
153  {
154  return Convert.ToString(_Campo("ASUNTO"));
155  }
156  set
157  {
158  _Campo("ASUNTO", value);
159  }
160  }
161 
162 
166  public string _TareaProgramacion
167  {
168  get
169  {
170  return _lisCampos.ContainsKey("TAR_CONF") ? Convert.ToString(_lisCampos["TAR_CONF"]._NewVal) : "";
171  }
172  set
173  {
174  if (_lisCampos.ContainsKey("TAR_CONF")) _lisCampos["TAR_CONF"]._NewVal = value;
175  _Exportar_Null();
176  }
177  }
178 
179 
183  public bool _TareaActiva
184  {
185  get
186  {
187  return _lisCampos.ContainsKey("TAR_ACT") ? Convert.ToBoolean(_lisCampos["TAR_ACT"]._NewVal) : false;
188  }
189  set
190  {
191  if (_lisCampos.ContainsKey("TAR_ACT")) _lisCampos["TAR_ACT"]._NewVal = value;
192  _Exportar_Null();
193  }
194  }
195 
196 
207  [DefaultValue(TipoEnvioComunicados.EMail)]
208  public TipoEnvioComunicados _TipoEnvio
209  {
210  get
211  {
212  if (!Enum.IsDefined(typeof(TipoEnvioComunicados), this._nTipoEnvio))
213  this._nTipoEnvio = (int)TipoEnvioComunicados.EMail;
214 
215  return (TipoEnvioComunicados)this._nTipoEnvio;
216  }
217  set
218  {
219  this._nTipoEnvio = (int)value;
220  }
221  }
222 
223 
232  [DefaultValue(0)]
233  public int _nTipoEnvio
234  {
235  get
236  {
237  int lnTmp = Convert.ToInt32(_Campo("TIPO_ENVIO"));
238 
239  return lnTmp;
240  }
241  set
242  {
243  int lnValor = value;
244  if (_lisCampos.ContainsKey("TIPO_ENVIO"))
245  {
246  if (!Enum.IsDefined(typeof(TipoEnvioComunicados), lnValor))
247  lnValor = (int)TipoEnvioComunicados.EMail;
248  _Campo("TIPO_ENVIO", lnValor);
249  }
250  }
251  }
252 
253 
258  [DefaultValue(TipoDestinatarios.NoDefinido)]
259  public TipoDestinatarios _TipoDestinatarios
260  {
261  get
262  {
263  if (!Enum.IsDefined(typeof(TipoDestinatarios), this._nTipoDestinatarios))
264  this._nTipoDestinatarios = (int)TipoDestinatarios.NoDefinido;
265 
266  return (TipoDestinatarios)this._nTipoDestinatarios;
267  }
268  set
269  {
270  this._nTipoDestinatarios = (int)value;
271 
272  // Si el tipo destinatarios es diferente de fichero externo no puede quedar nada grabado en el campo grupo destinatario de
273  // la bd (se utiliza solo para este tipo de destinatarios).
274  //
275  if (this._nTipoDestinatarios != (int)TipoDestinatarios.FicheroExterno)
276  this._GrupoDest = "";
277  }
278  }
279 
280 
284  [DefaultValue(1)]
285  public int _nTipoDestinatarios
286  {
287  get
288  {
289  int lnTmp = Convert.ToInt32(_Campo("DESTTARIOS"));
290 
291  return lnTmp;
292  }
293  set
294  {
295  int lnValor = value;
296  if (_lisCampos.ContainsKey("DESTTARIOS"))
297  {
298  if (!Enum.IsDefined(typeof(TipoDestinatarios), lnValor))
299  lnValor = (int)TipoDestinatarios.NoDefinido;
300  _Campo("DESTTARIOS", lnValor);
301  }
302  }
303  }
304 
305 
313  [DefaultValue(1)]
314  public int _DestinoEnvio1
315  {
316  get
317  {
318  return Convert.ToInt32(_Campo("DESTINOS"));
319  }
320  set
321  {
322  _Campo("DESTINOS", value);
323  }
324  }
325 
326 
331  [DefaultValue(1)]
332  public string _DestinoEnvio2
333  {
334  get
335  {
336  return Convert.ToString(_Campo("DEST_TIPO"));
337  }
338  set
339  {
340  _Campo("DEST_TIPO", value);
341  }
342  }
343 
344 
348  public DateTime _FechaCreacion
349  {
350  get
351  {
352  return Convert.ToDateTime(_Campo("F_CREAC"));
353  }
354  set
355  {
356  _Campo("F_CREAC", value);
357  }
358  }
359 
360 
364  [DefaultValue("")]
365  public string _Plantilla
366  {
367  get
368  {
369  return Convert.ToString(_Campo("PLANTILLA"));
370  }
371  set
372  {
373  _Campo("PLANTILLA", value);
374  }
375  }
376 
377 
389  [DefaultValue("")]
390  public string _GrupoDest
391  {
392  get
393  {
394  return Convert.ToString(_Campo("GRUPODEST"));
395  }
396  set
397  {
398  _Campo("GRUPODEST", value);
399  }
400  }
401 
402 
406  [DefaultValue("")]
407  public string _Observaciones
408  {
409  get
410  {
411  return Convert.ToString(_Campo("OBSERVACIO"));
412  }
413  set
414  {
415  _Campo("OBSERVACIO", value);
416  }
417  }
418 
419 
423  [DefaultValue(false)]
424  public bool _Cerrado
425  {
426  get
427  {
428  return Convert.ToBoolean(_Campo("CERRADO"));
429  }
430  set
431  {
432  _Campo("CERRADO", value);
433  }
434  }
435 
436 
440  [DefaultValue(null)]
441  public DateTime? _FechaCierre
442  {
443  get
444  {
445  object obj = _Campo("F_CIERRE");
446  if (obj == null || obj == DBNull.Value)
447  return null;
448  else
449  return Convert.ToDateTime(_Campo("F_CIERRE"));
450  }
451  set
452  {
453  _Campo("F_CIERRE", value);
454  }
455  }
456 
457 
461  [DefaultValue("")]
462  public string _Cuerpo
463  {
464  get
465  {
466  return Convert.ToString(_Campo("CUERPO")).Trim();
467  }
468  set
469  {
470  _Campo("CUERPO", value);
471  }
472  }
473 
474 
478  [DefaultValue("")]
479  public string _Impresora
480  {
481  get
482  {
483  return Convert.ToString(_Campo("IMP_SEL")).Trim();
484  }
485  set
486  {
487  _Campo("IMP_SEL", value);
488  }
489  }
490 
494  [Browsable(false)]
495  public int _Copias { get; set; } = -1;
496 
497 
501  [DefaultValue(false)]
502  public bool _EmailValidarUnoAUno
503  {
504  get
505  {
506  return Convert.ToBoolean(_Campo("EMAI_VALUN"));
507  }
508  set
509  {
510  _Campo("EMAI_VALUN", value);
511  }
512  }
513 
514 
518  [DefaultValue("")]
519  public string _Imp_Fichero
520  {
521  get
522  {
523  string fichero = Convert.ToString(_Campo("IMP_FILE")).Trim();
524 
525  return fichero;
526  }
527  set
528  {
529  _Campo("IMP_FILE", value);
530  }
531  }
532 
533 
537  [DefaultValue("")]
538  public string _Imp_TitulosColumnas
539  {
540  get
541  {
542  string columnas = Convert.ToString(_Campo("IMP_CAMPS")).Trim();
543 
544  return columnas;
545  }
546  set
547  {
548  _Campo("IMP_CAMPS", value);
549  }
550  }
551 
552 
556  [DefaultValue("")]
557  public string _Imp_TituloCampoClave
558  {
559  get
560  {
561  string lcCampoClave = Convert.ToString(_Campo("IMP_CCLIBR")).Trim();
562 
563  return lcCampoClave;
564  }
565  set
566  {
567  _Campo("IMP_CCLIBR", value);
568  }
569  }
570 
571 
576  [DefaultValue("")]
577  public string _Imp_CamposEmailDireccion
578  {
579  get
580  {
581  string fichero = Convert.ToString(_Campo("IMP_CDEST")).Trim();
582 
583  return fichero;
584  }
585  set
586  {
587  _Campo("IMP_CDEST", value);
588  }
589  }
590 
591 
595  [DefaultValue(false)]
596  public bool _ExcluirClientesBaja
597  {
598  get
599  {
600  return Convert.ToBoolean(_Campo("FLT_EXCBAJ"));
601  }
602  set
603  {
604  _Campo("FLT_EXCBAJ", value);
605  }
606  }
607 
608 
612  public FicherosAdjuntosComunicados _FicherosAdjuntosComunicados
613  {
614  get
615  {
616  if (_oFicherosAdjuntosComunicados == null)
617  {
618  _oFicherosAdjuntosComunicados = new FicherosAdjuntosComunicados(_Codigo);
619 
620  _oFicherosAdjuntosComunicados._ewMantePrincipal = this;
621 
622  _oFicherosAdjuntosComunicados._Load();
623  }
624  else
625  {
626  if (Convert.ToString(_oFicherosAdjuntosComunicados._Claves._Codigo._Valor) != _Codigo)
627  {
628  _oFicherosAdjuntosComunicados._Claves._Empresa._Valor = this._lcEmpresa;
629  _oFicherosAdjuntosComunicados._Claves._Codigo._Valor = _Codigo;
630 
631  _oFicherosAdjuntosComunicados._Load();
632  }
633  }
634 
635  return _oFicherosAdjuntosComunicados;
636  }
637  }
638  private FicherosAdjuntosComunicados _oFicherosAdjuntosComunicados;
639 
640 
644  public Imagenes _Imagenes = null;
645 
646 
650  public TipoParentDestinatarios _TipoParentDestinatarios { get; set; } = TipoParentDestinatarios.Comunicado;
651 
652 
657  public delegate void _Error_Message_LineaDestinatario_After_Handler(string tcMissatge);
658 
659 
663  public event _Error_Message_LineaDestinatario_After_Handler _Error_Message_LineaDestinatario_After;
664 
665 
670  public bool _DesactivarEvento_Error_Message_LineaDestinatario_After { get; set; } = false;
671 
672 
679  public string _Error_Message_LineaDestinatario
680  {
681  get { return _cError_message_LineaDestinatario; }
682  set
683  {
684  _cError_message_LineaDestinatario = value;
685 
686  if (!string.IsNullOrWhiteSpace(_cError_message_LineaDestinatario))
687  {
688  if (!_DesactivarEvento_Error_Message_LineaDestinatario_After)
689  {
690  if (this._Error_Message_LineaDestinatario_After != null)
691  this._Error_Message_LineaDestinatario_After(_cError_message_LineaDestinatario);
692  }
693  }
694  }
695  }
696  private string _cError_message_LineaDestinatario = "";
697 
698 
702  public bool _Cancelando = false;
703 
704 
710  public IManteTRelDestinatarios _ManteTRelDestinatarios { get; set; } = null;
711 
712 
716  public DestinatariosClientes _DestinatariosClientes
717  {
718  get
719  {
720  if (_IsDuplicar && this._nTipoDestinatarios != 2 ) // no debemos cargarlo porque la query podría dar error
721  {
722  return _oDestinatariosClientes;
723  }
724 
725  if (_oDestinatariosClientes == null)
726  {
727  _oDestinatariosClientes = new DestinatariosClientes(TipoParentDestinatarios.Comunicado, _Codigo);
728 
729  _oDestinatariosClientes._ewMantePrincipal = this;
730 
731  _oDestinatariosClientes._Load();
732  }
733  else
734  {
735  if (Convert.ToString(_oDestinatariosClientes._Claves._CodigoEntidad._Valor) != _Codigo)
736  {
737  _oDestinatariosClientes._Claves._CodigoEntidad._Valor = _Codigo;
738 
739  _oDestinatariosClientes._Load();
740  }
741  }
742 
743 
744  return _oDestinatariosClientes;
745  }
746  }
747  private DestinatariosClientes _oDestinatariosClientes;
748 
749 
753  public DestinatariosProveedores _DestinatariosProveedores
754  {
755  get
756  {
757  if (_IsDuplicar && this._nTipoDestinatarios != 3 ) // no debemos cargarlo porque la query podría dar error
758  {
759  return _oDestinatariosProveedores;
760  }
761 
762  if (_oDestinatariosProveedores == null)
763  {
764  _oDestinatariosProveedores = new DestinatariosProveedores(TipoParentDestinatarios.Comunicado, _Codigo);
765 
766  _oDestinatariosProveedores._ewMantePrincipal = this;
767 
768  _oDestinatariosProveedores._Load();
769  }
770  else
771  {
772  if (Convert.ToString(_oDestinatariosProveedores._Claves._CodigoEntidad._Valor) != _Codigo)
773  {
774  _oDestinatariosProveedores._Claves._CodigoEntidad._Valor = _Codigo;
775 
776  _oDestinatariosProveedores._Load();
777  }
778  }
779 
780 
781  return _oDestinatariosProveedores;
782  }
783  }
784  private DestinatariosProveedores _oDestinatariosProveedores;
785 
786 
790  public DestinatariosClientesPotenciales _DestinatariosClientesPotenciales
791  {
792  get
793  {
794  if (_IsDuplicar && this._nTipoDestinatarios != 4) // no debemos cargarlo porque la query podría dar error
795  {
796  return _oDestinatariosClientesPotenciales;
797  }
798 
799  if (_oDestinatariosClientesPotenciales == null)
800  {
801  _oDestinatariosClientesPotenciales = new DestinatariosClientesPotenciales(TipoParentDestinatarios.Comunicado, _Codigo);
802 
803  _oDestinatariosClientesPotenciales._ewMantePrincipal = this;
804 
805  _oDestinatariosClientesPotenciales._Load();
806  }
807  else
808  {
809  if (Convert.ToString(_oDestinatariosClientesPotenciales._Claves._CodigoEntidad._Valor) != _Codigo)
810  {
811  _oDestinatariosClientesPotenciales._Claves._CodigoEntidad._Valor = _Codigo;
812 
813  _oDestinatariosClientesPotenciales._Load();
814  }
815  }
816 
817 
818  return _oDestinatariosClientesPotenciales;
819  }
820  }
821  private DestinatariosClientesPotenciales _oDestinatariosClientesPotenciales;
822 
823 
827  public DestinatariosVendedores _DestinatariosVendedores
828  {
829  get
830  {
831  if (_IsDuplicar && this._nTipoDestinatarios != 6 ) // no debemos cargarlo porque la query podría dar error
832  {
833  return _oDestinatariosVendedores;
834  }
835 
836  if (_oDestinatariosVendedores == null)
837  {
838  _oDestinatariosVendedores = new DestinatariosVendedores(TipoParentDestinatarios.Comunicado, _Codigo);
839 
840  _oDestinatariosVendedores._ewMantePrincipal = this;
841 
842  _oDestinatariosVendedores._Load();
843  }
844  else
845  {
846  if (Convert.ToString(_oDestinatariosVendedores._Claves._CodigoEntidad._Valor) != _Codigo)
847  {
848  _oDestinatariosVendedores._Claves._CodigoEntidad._Valor = _Codigo;
849 
850  _oDestinatariosVendedores._Load();
851  }
852  }
853 
854 
855  return _oDestinatariosVendedores;
856  }
857  }
858  private DestinatariosVendedores _oDestinatariosVendedores;
859 
860 
864  public DestinatariosCuentas _DestinatariosCuentas
865  {
866  get
867  {
868  if (_IsDuplicar && this._nTipoDestinatarios != 7 ) // no debemos cargarlo porque la query podría dar error
869  {
870  return _oDestinatariosCuentas;
871  }
872 
873  if (_oDestinatariosCuentas == null)
874  {
875  _oDestinatariosCuentas = new DestinatariosCuentas(TipoParentDestinatarios.Comunicado, _Codigo);
876 
877  _oDestinatariosCuentas._ewMantePrincipal = this;
878 
879  _oDestinatariosCuentas._Load();
880  }
881  else
882  {
883  if (Convert.ToString(_oDestinatariosCuentas._Claves._CodigoEntidad._Valor) != _Codigo)
884  {
885  _oDestinatariosCuentas._Claves._CodigoEntidad._Valor = _Codigo;
886 
887  _oDestinatariosCuentas._Load();
888  }
889  }
890 
891 
892  return _oDestinatariosCuentas;
893  }
894  }
895  private DestinatariosCuentas _oDestinatariosCuentas;
896 
897 
901  public DestinatariosUsuarios _DestinatariosUsuarios
902  {
903  get
904  {
905  if (_IsDuplicar && this._nTipoDestinatarios != 8 ) // no debemos cargarlo porque la query podría dar error
906  {
907  return _oDestinatariosUsuarios;
908  }
909 
910  if (_oDestinatariosUsuarios == null)
911  {
912  _oDestinatariosUsuarios = new DestinatariosUsuarios(TipoParentDestinatarios.Comunicado, _Codigo);
913 
914  _oDestinatariosUsuarios._ewMantePrincipal = this;
915 
916  _oDestinatariosUsuarios._Load();
917  }
918  else
919  {
920  if (Convert.ToString(_oDestinatariosUsuarios._Claves._CodigoEntidad._Valor) != _Codigo)
921  {
922  _oDestinatariosUsuarios._Claves._CodigoEntidad._Valor = _Codigo;
923 
924  _oDestinatariosUsuarios._Load();
925  }
926  }
927 
928 
929  return _oDestinatariosUsuarios;
930  }
931  }
932  private DestinatariosUsuarios _oDestinatariosUsuarios;
933 
934 
938  public DestinatariosFicheroExterno _DestinatariosFicheroExterno
939  {
940  get
941  {
942 
943  if (_IsDuplicar && this._nTipoDestinatarios != 5) // no debemos cargarlo porque la query podría dar error
944  {
945  return _oDestinatariosFicheroExterno;
946  }
947 
948  if (_oDestinatariosFicheroExterno == null)
949  {
950  _oDestinatariosFicheroExterno = new DestinatariosFicheroExterno(TipoParentDestinatarios.Comunicado, _Codigo);
951 
952  _oDestinatariosFicheroExterno._ewMantePrincipal = this;
953 
954  _oDestinatariosFicheroExterno._Load();
955  }
956  else
957  {
958  if (Convert.ToString(_oDestinatariosFicheroExterno._Claves._CodigoEntidad._Valor) != _Codigo)
959  {
960  _oDestinatariosFicheroExterno._Claves._CodigoEntidad._Valor = _Codigo;
961 
962  _oDestinatariosFicheroExterno._Load();
963  }
964  }
965 
966 
967  return _oDestinatariosFicheroExterno;
968  }
969  }
970  private DestinatariosFicheroExterno _oDestinatariosFicheroExterno;
971 
972 
985  public bool _ComunicadoProcExterno = false;
986 
987 
994  public string _FicheroXmlRespuestaComunicadoProcExterno = "";
995 
996 
1000  public bool _EsComunicadoRgpd
1001  {
1002  get
1003  {
1004  return this._TipoPlantilla == TipoPlantillaComunicados.RGPDLOPDGDD;
1005  }
1006  }
1007 
1008 
1009 
1019  public string _FicheroXmlEnlaceComunicadoProcExterno = "";
1020 
1021 
1022  #region PROPIEDADES ESPECÍFICAS ÚTILES EN COMUNICADOS EXTERNOS GENERADOS DESDE ADDON RGDP
1023 
1024 
1025 
1026 
1027 
1028  #endregion PROPIEDADES ESPECÍFICAS ÚTILES EN COMUNICADOS EXTERNOS GENERADOS DESDE ADDON RGDP
1029 
1030 
1031  #endregion PROPIEDADES PÚBLICAS
1032 
1033 
1034  #region CONSTRUCTORES
1035 
1036 
1040  public Comunicados()
1041  {
1042  this.constructorVarios();
1043 
1044  return;
1045  }
1046 
1047 
1052  public Comunicados(string tcCodigo)
1053  {
1054  this.constructorVarios();
1055 
1056  this._Codigo = tcCodigo;
1057 
1058  return;
1059  }
1060 
1061 
1065  private void constructorVarios()
1066  {
1067  this._lTodos = true;
1068  this._Clave = "Codigo";
1069  this._DataBase = "Gestion";
1070  this._Tabla = "c_comuni";
1071 
1072  // Importante esto para que funcione correctamente la clave
1073  // de comunicados que en la tabla es EMPRESA+CODIGO sin incluir
1074  // el campo empresa en this._Clave.
1075  //
1076  this._GestionarCampoEmpresa = true;
1077 
1078  this.Navegacion._Condicion = "EMPRESA = " + DB.SQLString(_lcEmpresa);
1079 
1080  this._Pantalla = "COMUNICA";
1081 
1082  this._Browser_Titulos_Campos = "Código, Nombre";
1083  this._Browser_Clave = "Código";
1084  this._Browser_Condicion = "EMPRESA = '" + Convert.ToString(_lcEmpresa) + "' ";
1085 
1086  // Monto la columna que mostrará en el browser el tipo de destinatarios del comunicado, he de ir recorriendo
1087  // la lista de elementos de la enumeración y ir añadiendo elementos. De esta forma si algún día se añade algún elemento a la
1088  // enumeración no habremos de tocar el browser.
1089  //
1090  string lcColumnaDestinatarios = "";
1091  int lnElemento = 1;
1092  int lnNumElementos = Enum.GetValues(typeof(TipoDestinatarios)).Length;
1093  string lcNombreElemento = "";
1094  List<TipoDestinatarios> lstLista = Enum.GetValues(typeof(TipoDestinatarios)).Cast<TipoDestinatarios>().OrderByDescending(x => (int)x).ToList();
1095  foreach (TipoDestinatarios item in lstLista)
1096  {
1097  lcNombreElemento = sage.ew.functions.FUNCTIONS._GetEnumDescription(item);
1098  if (lnElemento == 1)
1099  {
1100  lcColumnaDestinatarios = DB.SQLIif("c.tipo=" + Convert.ToString((int)item), "'" + lcNombreElemento + "'", "SPACE(30)");
1101  }
1102  else
1103  {
1104  lcColumnaDestinatarios = DB.SQLIif("c.tipo=" + Convert.ToString((int)item), "'" + lcNombreElemento + "'", lcColumnaDestinatarios);
1105  }
1106  lnElemento++;
1107  }
1108  lcColumnaDestinatarios += " as Destinatarios";
1109 
1110  lcColumnaDestinatarios = "";
1111  this._Browser_Consulta_Personalizada = "SELECT c.codigo as Código, c.nombre as Nombre, " +
1112  lcColumnaDestinatarios + " " +
1113  "from " + DB.SQLDatabase("gestion", "c_comuni") + " c " +
1114  " where empresa=" + DB.SQLString(this._lcEmpresa) + " " +
1115  "order by c.codigo ";
1116 
1117  _Browser_Titulo = "Selección de comunicados";
1118 
1119  //Task 198738 y Bug 104988. Unificar código de los browsers
1120  this._BrowserButtonType = typeof(btBrowComunicados);
1121 
1122  this._TituloMantenimiento = "Mantenimiento de comunicados";
1123  this._TituloCabecera = "Comunicados";
1124 
1125  this._FormManteBaseType = typeof(Sage.ES.S50.Comunicados.Visual.Forms.frmComunicados);
1126 
1127  return;
1128  }
1129 
1130 
1131  #endregion CONSTRUCTORES
1132 
1133 
1134  #region METODOS PÚBLICOS OVERRIDE
1135 
1136 
1140  public override void _Load()
1141  {
1142  // No utilizaremos esta propiedad interna para que haga _Load() y _Save() de los ManteTRels al hacer el _Load() y el _Save() del
1143  // mantenimiento principal, vamos a gestionar el _Load() y _Save() de los mantetrels nosotros manualmente para un mayor control de
1144  // los mismo.
1145  //
1146  this._ListewManteTRel.Clear();
1147 
1148  _oConfiguracionComunicadosListados = null;
1149 
1150  if (string.IsNullOrWhiteSpace(this._Codigo))
1151  this._ManteTRelDestinatarios = null;
1152 
1153  base._Load();
1154 
1155  // Cargar mantetrel de ficheros adjuntos del comunicado.
1156  //
1157  this._FicherosAdjuntosComunicados._Load();
1158 
1159  // Según el tipo de destinatario seleccionar un mantetrel u otro para utilizar
1160  //
1161  this._SeleccionarManteTRel();
1162 
1163  return;
1164  }
1165 
1166 
1171  public override bool _Delete()
1172  {
1173  bool llOk = true;
1174 
1175  string lcCodigo = this._Codigo;
1176 
1177  llOk = base._Delete();
1178 
1179  if (llOk)
1180  {
1181  // Retroceder el contador si fuera el último comunicado el que estamos borrando y el número de este fuese el valor
1182  // del contador actual de comunicados en empresa.
1183  //
1184  this._RetrocederContadorEmpresa(lcCodigo);
1185 
1186  // Borramos los destinatarios. La siguiente instrucción los borrará de la tabla GESTION!C_COMUIM o de la tabla
1187  // GESTION!D_COMUNI en función de si los destinatarios son de tipo 'Fichero externo' o de otro tipo.
1188  //
1189  if (this._ManteTRelDestinatarios != null)
1190  this._ManteTRelDestinatarios._Delete();
1191 
1192  // Borrar los datos de ficheros adjuntos para enviar por email. Esto borrará los registros de la tabla GESTION!ADJUNTOC
1193  //
1194  this._FicherosAdjuntosComunicados._Delete();
1195 
1196  // En FOX no hacia nada con la tabla GESTION!H_COMUNI pero creo que deben borrarse igualmente estos registros del
1197  // histórico puesto que el usuario podria reutilizar este código de comunicado que se acaba de borrar creando un comunicado
1198  // nuevo manualmente y asignándole este código, con lo que tendríamos datos en el histórico apuntando a éste comunicado
1199  // que no serían realmente del comunicado sino del anterior que se borró que tenía el mismo número.
1200  //
1201  // Por tanto borro registros del histórico también.
1202  //
1203  DB.SQLExec("delete from " + DB.SQLDatabase("gestion", "h_comuni") + " " +
1204  "where empresa=" + DB.SQLString(this._lcEmpresa) + " and codigo=" + DB.SQLString(lcCodigo));
1205  }
1206 
1207  return llOk;
1208  }
1209 
1210 
1215  public override bool _Save()
1216  {
1217  //Actualizamos los datos del config
1218  _Config = _oConfiguracionComunicadosListados == null ? "" : _oConfiguracionComunicadosListados.ToString();
1219 
1220  bool llOk = base._Save();
1221 
1222  if (llOk)
1223  {
1224  if (this._oFicherosAdjuntosComunicados != null)
1225  this._oFicherosAdjuntosComunicados._Save();
1226 
1227  // _ManteTRelDetinatarios ya estará apuntando al ManteTRel de destinatarios que toque según el tipo de destinatarios definido en
1228  // el propio comunicado.
1229  //
1230  if (this._ManteTRelDestinatarios != null)
1231  {
1232  _SeleccionarManteTRel(); // Bug 202450 necesito volver a asignar de nuevo a _ManteTRelDestinatarios su destinatario correspondiente ya que Duplicar() no es capaz de duplicar el _ManteTRelDestinatarios y se queda asinado al código anterior y no se graban las lineas con el nuevo codigo
1233  this._ManteTRelDestinatarios._Save();
1234  }
1235  }
1236 
1237  return llOk;
1238  }
1239 
1240 
1245  public override bool _Save_Before()
1246  {
1247  this._Empresa = this._lcEmpresa;
1248 
1249  bool llOk = base._Save_Before();
1250 
1251  if (llOk)
1252  {
1253  if (this._Estado != _EstadosMantenimiento.EditandoRegistro && this._Estado != _EstadosMantenimiento.EntrandoNuevo)
1254  return true;
1255 
1256  if (!_oConfiguracionComunicadosListados._Validate())
1257  {
1258  this._Error_Message = _oConfiguracionComunicadosListados._ErrorMessage;
1259  llOk = false;
1260  }
1261 
1262  // Bug 203591 - Controlar que las imágenes incluidas en el comunicado no tengan tamaño superior a un 1 MB.
1263  if (llOk && !FunctionsComu._ControlImagenes(_Cuerpo))
1264  {
1265  _Error_Message = "No se puede guardar el comunicado porque el tamaño total de las imágenes incluidas es superior a 1 MB.";
1266  llOk = false;
1267  }
1268  }
1269 
1270  return llOk;
1271  }
1272 
1273 
1279  public override IResultadoDuplicacion _Duplicar(string tcCodigo)
1280  {
1281  IResultadoDuplicacion duplicado; // = base._Duplicar(tcCodigo);
1282  _IsDuplicar = true;
1283 
1284  if (string.IsNullOrWhiteSpace(tcCodigo))
1285  {
1286  tcCodigo = _ObtenerCodigoNuevo();
1287  }
1288 
1289  tcCodigo = tcCodigo.Trim().PadLeft(DB.SQLAnchuraCampo("gestion", "c_comuni", "codigo"), '0');
1290 
1291  //Validar longitud y cuentas
1292  //Sino tiene la longitud correcta no podrá serlo
1293  if (tcCodigo.Trim().Length != DB.SQLAnchuraCampo("gestion", "c_comuni", "codigo"))
1294  {
1295  _IsDuplicar = false;
1296  return ewMante.ResultadoDuplicacion.Fallida("El código propuesto no tienen la longitud correcta.");
1297  }
1298 
1299  duplicado = base._Duplicar(tcCodigo);
1300 
1301  if (duplicado.EjecucionCorrecta)
1302  {
1303  Comunicados oComunicados = new Comunicados(duplicado.CodigoDestino);
1304  oComunicados._Cerrado = false;
1305  oComunicados._FechaCierre = null;
1306  oComunicados._oConfiguracionComunicadosListados = ConfiguracionExpresionesListados._GetConfiguracion(oComunicados._Config); // Bug 202483 Lo asigno aquí porque desde la carga hasta aquí se queda a null oComunicados._oConfiguracionComunicadosListados perdiendose la información al salvar despues
1307  oComunicados._Save();
1308  }
1309 
1310  _IsDuplicar = false;
1311 
1312  return duplicado;
1313 
1314  }
1315 
1316 
1320  public void _ShowDialog()
1321  {
1322  this._ForzarShowDialog = true;
1323  this._Show();
1324 
1325  return;
1326  }
1327 
1328 
1329  #endregion METODOS PÚBLICOS OVERRIDE
1330 
1331 
1332  #region MÉTODOS PROTECTED OVERRIDE
1333 
1334 
1338  protected override void _DescargarDatos()
1339  {
1340  base._DescargarDatos();
1341 
1342  this._nTipoEnvio = 0;
1343  this._nTipoDestinatarios = 1;
1344 
1345  this._oFicherosAdjuntosComunicados = null;
1346 
1347  this._Imagenes = null;
1348 
1349  _oConfiguracionComunicadosListados = null;
1350  // Cuando no haya nada cargada en pantalla no mostraremos nada en la grid.
1351  //
1352  // Ojo por que por aqui tambien pasa cuando editas, pues vuelve a hacer un _Load() y dentro del _Load() lo primero que hace
1353  // es un descargardatos.
1354  //
1355  // En el caso que nos ocupa, si editando tenemos un mantetrel cargado en pantalla, no lo vamos a descartar por que entonces
1356  // la propiedad _Grid se pierde. Hay que vigilar pues si cancelas la edición vuelve a pasar por aqui y el estado sigue
1357  // siendo "Editando" pero en este caso si que hay que poner todos los mantetrels a null para que cuando vuelva a cargar
1358  // los datos los coja de la bd, y asi finalice el Cancelar correctamente, descartando cualquier cosa que hubiera.
1359  //
1360  if (this._Estado != _EstadosMantenimiento.EditandoRegistro ||
1361  (this._Estado == _EstadosMantenimiento.EditandoRegistro && this._Cancelando))
1362  {
1363  this._oDestinatariosClientes = null;
1364  this._oDestinatariosProveedores = null;
1365  this._oDestinatariosClientesPotenciales = null;
1366  this._oDestinatariosFicheroExterno = null;
1367  this._oDestinatariosCuentas = null;
1368  this._oDestinatariosVendedores = null;
1369  this._oDestinatariosUsuarios = null;
1370  }
1371 
1372  this._ListewManteTRel.Clear();
1373 
1374  return;
1375  }
1376 
1377 
1382  protected override string _Where()
1383  {
1384  string lcWhere = "";
1385 
1386  // Evitar que borre el registro de codigo xxxx en las diferentes empresas si los encontraba, cosa que hacía.
1387  //
1388  lcWhere = base._Where();
1389  if (!string.IsNullOrWhiteSpace(lcWhere))
1390  lcWhere = lcWhere + " and empresa = " + DB.SQLString(this._lcEmpresa);
1391 
1392  return lcWhere;
1393  }
1394 
1395 
1396  #endregion PROTECTED OVERRIDE
1397 
1398 
1399  #region MÉTODOS PROTECTED
1400 
1401 
1410  protected bool validarImportarGrupoFicheroExterno(GrupoDestComunicados toGrupo, out string tcMensajeError)
1411  {
1412  tcMensajeError = "";
1413  if (string.IsNullOrWhiteSpace(toGrupo._Imp_CamposEmailDireccion))
1414  {
1415  string lcTrozo = "";
1416  if (this._TipoEnvio == TipoEnvioComunicados.EMail)
1417  lcTrozo = "No se ha detectado el campo que identifica la columna Email";
1418  else
1419  lcTrozo = "No se han detectado los campos que identifican las columnas Dirección, C.Postal, Población y Provincia";
1420 
1421  tcMensajeError = lcTrozo + " en los destinatarios del grupo seleccionado.";
1422 
1423  return false;
1424  }
1425 
1426  Dictionary<string, string> loDicCamposEmailDireccion = new JavaScriptSerializer().Deserialize<Dictionary<string, string>>(toGrupo._Imp_CamposEmailDireccion.Trim());
1427  string lcValor = "";
1428  int lnPosSep = 0, lnPosColumna = 0;
1429  bool llOk = false;
1430 
1431  try
1432  {
1433 
1434  switch (this._TipoEnvio)
1435  {
1436  case TipoEnvioComunicados.EMail:
1437 
1438  if (loDicCamposEmailDireccion.TryGetValue("email", out lcValor))
1439  {
1440  lnPosSep = lcValor.IndexOf(" @@ ");
1441  if (lnPosSep != 0)
1442  {
1443  lnPosColumna = Convert.ToInt32(lcValor.Substring(lnPosSep + 4).Trim()) + 1;
1444  lcValor = lcValor.Substring(0, lnPosSep);
1445  if (!string.IsNullOrWhiteSpace(lcValor) && lnPosColumna >= 1)
1446  llOk = true;
1447  }
1448  }
1449 
1450  if (!llOk)
1451  {
1452  tcMensajeError = "No se ha detectado el campo que identifica la columna Email en los destinatarios del grupo " +
1453  "seleccionado." + Environment.NewLine + Environment.NewLine +
1454  "Imposible importar destinatarios del grupo.";
1455  return false;
1456  }
1457  break;
1458 
1459  case TipoEnvioComunicados.Impreso:
1460 
1461  if (loDicCamposEmailDireccion.TryGetValue("direccion", out lcValor))
1462  {
1463  lnPosSep = lcValor.IndexOf(" @@ ");
1464  if (lnPosSep != 0)
1465  {
1466  lnPosColumna = Convert.ToInt32(lcValor.Substring(lnPosSep + 4).Trim()) + 1;
1467  lcValor = lcValor.Substring(0, lnPosSep);
1468  if (!string.IsNullOrWhiteSpace(lcValor) && lnPosColumna >= 1)
1469  llOk = true;
1470  }
1471  }
1472  if (llOk)
1473  {
1474  llOk = false;
1475  if (loDicCamposEmailDireccion.TryGetValue("cpostal", out lcValor))
1476  {
1477  lnPosSep = lcValor.IndexOf(" @@ ");
1478  if (lnPosSep != 0)
1479  {
1480  lnPosColumna = Convert.ToInt32(lcValor.Substring(lnPosSep + 4).Trim()) + 1;
1481  lcValor = lcValor.Substring(0, lnPosSep);
1482  if (!string.IsNullOrWhiteSpace(lcValor) && lnPosColumna >= 1)
1483  llOk = true;
1484  }
1485  }
1486  }
1487  if (llOk)
1488  {
1489  llOk = false;
1490  if (loDicCamposEmailDireccion.TryGetValue("poblacion", out lcValor))
1491  {
1492  lnPosSep = lcValor.IndexOf(" @@ ");
1493  if (lnPosSep != 0)
1494  {
1495  lnPosColumna = Convert.ToInt32(lcValor.Substring(lnPosSep + 4).Trim()) + 1;
1496  lcValor = lcValor.Substring(0, lnPosSep);
1497  if (!string.IsNullOrWhiteSpace(lcValor) && lnPosColumna >= 1)
1498  llOk = true;
1499  }
1500  }
1501  }
1502  if (llOk)
1503  {
1504  llOk = false;
1505  if (loDicCamposEmailDireccion.TryGetValue("provincia", out lcValor))
1506  {
1507  lnPosSep = lcValor.IndexOf(" @@ ");
1508  if (lnPosSep != 0)
1509  {
1510  lnPosColumna = Convert.ToInt32(lcValor.Substring(lnPosSep + 4).Trim()) + 1;
1511  lcValor = lcValor.Substring(0, lnPosSep);
1512  if (!string.IsNullOrWhiteSpace(lcValor) && lnPosColumna >= 1)
1513  llOk = true;
1514  }
1515  }
1516  }
1517 
1518  if (!llOk)
1519  {
1520  tcMensajeError = "No se han detectado los campos que identifican la dirección, c.postal, población y provincia " +
1521  "en los destinatarios del grupo seleccionado." + Environment.NewLine + Environment.NewLine +
1522  "Imposible importar destinatarios del grupo.";
1523  return false;
1524  }
1525 
1526  break;
1527  }
1528  }
1529  catch (Exception e)
1530  {
1531  tcMensajeError = "Se ha producido un error: " + e.Message;
1532  llOk = false;
1533  }
1534 
1535  return llOk;
1536  }
1537 
1538 
1547  protected string obtenerValorColDestinoGrupoFicheroExterno(string tcJsonCamposEmailDireccion, PropertyInfo toPropertyInfo, DestinatariosFicheroExterno.DestinatarioFicheroExterno toDestinatarioGrupo)
1548  {
1549  string lcDestino = "";
1550 
1551  if (string.IsNullOrWhiteSpace(tcJsonCamposEmailDireccion))
1552  return lcDestino;
1553 
1554  Dictionary<string, string> loDicCamposEmailDireccion = new JavaScriptSerializer().Deserialize<Dictionary<string, string>>(tcJsonCamposEmailDireccion);
1555 
1557 
1558  // Para obtener la columna email, o las columnas de direccion, hemos de acudir al campo del comunicado de cabecera que guarda
1559  // los campo del fichero original que albergaban estas columnas. En esa información también se halla la posición de la columna
1560  // en el fichero por lo que en función de lo que obtengamos de esa posición, accederemos a la linea del destinatario del grupo
1561  // y leeremos el contenido del campo _Campo1, _Campo2, _Campo3, etc.
1562  //
1563  // Contrariamente a cuando se crea un grupo de destintarios de tipo 'Fichero externo', aquí no tenemos el DataTable con los datos
1564  // del fichero, podriamos tenerlo pero no nos podemo fiar pues el grupo podria haber estado creado desde hace mucho tiempo y a lo
1565  // mejor ya no está disponible. Por tanto para averiguar en qué columna tenemos el email y los campos de dirección, no utilizamos
1566  // el nombre de la columna del fichero original donde se hallaba la columna sino que utilizamos la posición de la columna y a
1567  // partir de esa posición de columna ya accedemos a _Campo1, _Campo2, etc.
1568 
1569  try
1570  {
1571 
1572  switch (this._TipoEnvio)
1573  {
1574  case TipoEnvioComunicados.EMail:
1575  string lcColEmail = "";
1576  if (loDicCamposEmailDireccion.TryGetValue("email", out lcColEmail))
1577  {
1578  //
1579  if (!string.IsNullOrWhiteSpace(lcColEmail) && lcColEmail.IndexOf(" @@ ") > 0)
1580  {
1581  int lnPos = lcColEmail.IndexOf(" @@ ");
1582 
1583  // Sumamos 1 a la posición obtenida pues el valor que esta guardada es en base a la numeracion 0, 1, 2 etc. de las
1584  // columnas del Datatable del fichero que se importó. En cambio, las columnas que se guardan, el nombre de las
1585  // propiedades es _Campo1, Campo2, etc. por tanto una posición 0 debe ir a buscar el contenido del campo _Campo1, etc.
1586  //
1587  int lnPosColEmail = Convert.ToInt32(lcColEmail.Substring(lnPos + 4).Trim()) + 1;
1588  if (lnPosColEmail >= 1)
1589  {
1590  toPropertyInfo = loType.GetProperty("_Campo" + lnPosColEmail.ToString().Trim());
1591  lcDestino = Convert.ToString(toPropertyInfo.GetValue(toDestinatarioGrupo, null));
1592  }
1593  }
1594  }
1595  break;
1596 
1597  case TipoEnvioComunicados.Impreso:
1598 
1599  string lcColDireccion = "";
1600  string lcColCodPostal = "";
1601  string lcColPoblacion = "";
1602  string lcColProvincia = "";
1603  string lcValorDireccion = "";
1604  string lcValorCodPostal = "";
1605  string lcValorPoblacion = "";
1606  string lcValorProvincia = "";
1607  int lnPosicionCol = 0;
1608 
1609  if (loDicCamposEmailDireccion.TryGetValue("direccion", out lcColDireccion))
1610  {
1611  if (!string.IsNullOrWhiteSpace(lcColDireccion) && lcColDireccion.IndexOf(" @@ ") > 0)
1612  {
1613  int lnPos = lcColDireccion.IndexOf(" @@ ");
1614  lnPosicionCol = Convert.ToInt32(lcColDireccion.Substring(lnPos + 4).Trim()) + 1;
1615  if (lnPosicionCol >= 1)
1616  {
1617  toPropertyInfo = loType.GetProperty("_Campo" + lnPosicionCol.ToString().Trim());
1618  lcValorDireccion = Convert.ToString(toPropertyInfo.GetValue(toDestinatarioGrupo, null));
1619  }
1620  }
1621  }
1622 
1623  if (loDicCamposEmailDireccion.TryGetValue("cpostal", out lcColCodPostal))
1624  {
1625  if (!string.IsNullOrWhiteSpace(lcColCodPostal) && lcColCodPostal.IndexOf(" @@ ") > 0)
1626  {
1627  int lnPos = lcColCodPostal.IndexOf(" @@ ");
1628  // Sumamos 1 a la posición obtenida pues el valor que esta guardada es en base a la numeracion 0, 1, 2 etc. de las
1629  // columnas del Datatable del fichero que se importó. En cambio, las columnas que se guardan, el nombre de las
1630  // propiedades es _Campo1, Campo2, etc. por tanto una posición 0 debe ir a buscar el contenido del campo _Campo1, etc.
1631  //
1632  lnPosicionCol = Convert.ToInt32(lcColCodPostal.Substring(lnPos + 4).Trim()) + 1;
1633  if (lnPosicionCol >= 1)
1634  {
1635  toPropertyInfo = loType.GetProperty("_Campo" + lnPosicionCol.ToString().Trim());
1636  lcValorCodPostal = Convert.ToString(toPropertyInfo.GetValue(toDestinatarioGrupo, null));
1637  }
1638  }
1639  }
1640 
1641  if (loDicCamposEmailDireccion.TryGetValue("poblacion", out lcColPoblacion))
1642  {
1643  if (!string.IsNullOrWhiteSpace(lcColPoblacion) && lcColPoblacion.IndexOf(" @@ ") > 0)
1644  {
1645  int lnPos = lcColPoblacion.IndexOf(" @@ ");
1646  lnPosicionCol = Convert.ToInt32(lcColPoblacion.Substring(lnPos + 4).Trim()) + 1;
1647  if (lnPosicionCol >= 1)
1648  {
1649  toPropertyInfo = loType.GetProperty("_Campo" + lnPosicionCol.ToString().Trim());
1650  lcValorPoblacion = Convert.ToString(toPropertyInfo.GetValue(toDestinatarioGrupo, null));
1651  }
1652  }
1653  }
1654 
1655  if (loDicCamposEmailDireccion.TryGetValue("provincia", out lcColProvincia))
1656  {
1657  if (!string.IsNullOrWhiteSpace(lcColProvincia) && lcColProvincia.IndexOf(" @@ ") > 0)
1658  {
1659  int lnPos = lcColProvincia.IndexOf(" @@ ");
1660  lnPosicionCol = Convert.ToInt32(lcColProvincia.Substring(lnPos + 4).Trim()) + 1;
1661  if (lnPosicionCol >= 1)
1662  {
1663  toPropertyInfo = loType.GetProperty("_Campo" + lnPosicionCol.ToString().Trim());
1664  lcValorProvincia = Convert.ToString(toPropertyInfo.GetValue(toDestinatarioGrupo, null));
1665  }
1666  }
1667  }
1668 
1669  lcDestino = lcValorDireccion.Trim() + " " + lcValorCodPostal + " " + lcValorPoblacion + " " + lcValorProvincia;
1670 
1671  break;
1672  }
1673  }
1674  catch (Exception e)
1675  {
1676  FUNCTIONS._MessageBox("Se ha producido un error: " + e.Message, "Comunicados", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
1677  lcDestino = "";
1678  }
1679 
1680  return lcDestino;
1681  }
1682 
1683 
1684  #endregion MÉTODOS PROTECTED
1685 
1686 
1687  #region MÉTODOS PÚBLICOS
1688 
1689 
1695  public void _Addons_AdjuntarArchivosAdicionales(List<string> tlstArchivosAdjuntar)
1696  {
1697  _ExtensionComunicados loExtension = null;
1698 
1699  // Recorrido por los addons disponibles, para ejecutar el método deseado en las extensiones.
1700  //
1701  foreach (KeyValuePair<string, object> loItem in this._Addons)
1702  {
1703  try
1704  {
1705  if (loItem.Value is _ExtensionComunicados)
1706  {
1707  // Obtenemos el objeto de extensiones y lo configuramos
1708  loExtension = (_ExtensionComunicados)loItem.Value;
1709  loExtension._Comunicado = this;
1710  loExtension._AdjuntarArchivosAdicionales(tlstArchivosAdjuntar);
1711  }
1712  }
1713  catch (Exception loEx)
1714  {
1715  DB.Registrar_Error(loEx);
1716  this._Addons_Messagebox(loItem.Key, "AdjuntarArchivosAdicionales", loEx.Message);
1717  }
1718  }
1719 
1720  return;
1721  }
1722 
1723 
1729  public void _Addons_GenerarComunicado(TipoExecute teBeforeAfter)
1730  {
1731  _ExtensionComunicados loExtension = null;
1732 
1733  // Recorrido por los addons disponibles, para ejecutar el método deseado en las extensiones.
1734  //
1735  foreach (KeyValuePair<string, object> loItem in this._Addons)
1736  {
1737  try
1738  {
1739  if (loItem.Value is _ExtensionComunicados)
1740  {
1741  // Obtenemos el objeto de extensiones y lo configuramos
1742  loExtension = (_ExtensionComunicados)loItem.Value;
1743  loExtension._Comunicado = this;
1744  loExtension._eBeforeAfter = teBeforeAfter;
1745  loExtension._GenerarComunicado();
1746  }
1747  }
1748  catch (Exception loEx)
1749  {
1750  DB.Registrar_Error(loEx);
1751  this._Addons_Messagebox(loItem.Key, "GenerarComunicado", loEx.Message);
1752  }
1753  }
1754 
1755  return;
1756  }
1757 
1758 
1768  public void _Addons_EnviarEmailImprimir(TipoExecute teBeforeAfter, SendMail toSendMail, string tcCuerpo, string tcCodigo, bool tlEmailEnviadoImpresoOk)
1769  {
1770  _ExtensionComunicados loExtension = null;
1771 
1772  // Recorrido por los addons disponibles, para ejecutar el método deseado en las extensiones.
1773  //
1774  foreach (KeyValuePair<string, object> loItem in this._Addons)
1775  {
1776  try
1777  {
1778  if (loItem.Value is _ExtensionComunicados)
1779  {
1780  // Obtenemos el objeto de extensiones y lo configuramos
1781  loExtension = (_ExtensionComunicados)loItem.Value;
1782  loExtension._Comunicado = this;
1783  loExtension._eBeforeAfter = teBeforeAfter;
1784  loExtension._EnviarEmailImprimir(toSendMail, tcCuerpo, tcCodigo, tlEmailEnviadoImpresoOk);
1785  }
1786  }
1787  catch (Exception loEx)
1788  {
1789  DB.Registrar_Error(loEx);
1790  this._Addons_Messagebox(loItem.Key, "EnviarEmailImprimir", loEx.Message);
1791  }
1792  }
1793 
1794  return;
1795  }
1796 
1797 
1804  public Dictionary<string,string> _Addons_ObtenerDatosAdicXmlRespuesta()
1805  {
1806  _ExtensionComunicados loExtension = null;
1807  Dictionary<string, string> loDicDatosAdic = new Dictionary<string, string>();
1808  Dictionary<string, string> loDicDatosAddon = new Dictionary<string, string>();
1809 
1810  // Recorrido por los addons disponibles, para ejecutar el método deseado en las extensiones.
1811  //
1812  foreach (KeyValuePair<string, object> loItem in this._Addons)
1813  {
1814  try
1815  {
1816  if (loItem.Value is _ExtensionComunicados)
1817  {
1818  // Obtenemos el objeto de extensiones y lo configuramos
1819  loExtension = (_ExtensionComunicados)loItem.Value;
1820  loExtension._Comunicado = this;
1821  loDicDatosAddon = loExtension._ObtenerDatosAdicXmlRespuesta();
1822  if (loDicDatosAddon.Count > 0)
1823  {
1824  foreach (var datos in loDicDatosAddon)
1825  {
1826  string valor = "";
1827  if (!loDicDatosAdic.TryGetValue(datos.Key, out valor))
1828  loDicDatosAdic.Add(datos.Key, datos.Value);
1829  }
1830  }
1831  }
1832  }
1833  catch (Exception loEx)
1834  {
1835  DB.Registrar_Error(loEx);
1836  this._Addons_Messagebox(loItem.Key, "ObtenerDatosAdicXmlRespuesta", loEx.Message);
1837  }
1838  }
1839 
1840  return loDicDatosAdic;
1841  }
1842 
1843 
1848  {
1849  // Según el tipo de destinatarios cargamos un ManteTRel u otro, el acceso a la propiedad pública ya hará el _Load() del
1850  // mantettrel.
1851  //
1852  switch (this._nTipoDestinatarios)
1853  {
1854  case 1:
1855  // Por aquí pasará en particular cuando tengamos un comunicado presente en pantalla y hagamos escape o Nuevo, cargará el
1856  // comunicado vacío.
1857  this._ManteTRelDestinatarios = null;
1858  break;
1859 
1860  case 2:
1861  this._ManteTRelDestinatarios = this._DestinatariosClientes;
1862  break;
1863 
1864  case 3:
1865  this._ManteTRelDestinatarios = this._DestinatariosProveedores;
1866  break;
1867 
1868  case 4:
1869  this._ManteTRelDestinatarios = this._DestinatariosClientesPotenciales;
1870  break;
1871 
1872  case 5:
1873  this._ManteTRelDestinatarios = this._DestinatariosFicheroExterno;
1874  break;
1875 
1876  case 6:
1877  this._ManteTRelDestinatarios = this._DestinatariosVendedores;
1878  break;
1879 
1880  case 7:
1881  this._ManteTRelDestinatarios = this._DestinatariosCuentas;
1882  break;
1883 
1884  case 8:
1885  this._ManteTRelDestinatarios = this._DestinatariosUsuarios;
1886  break;
1887  }
1888 
1889  return;
1890  }
1891 
1892 
1900  public string _ObtenerColumnaDestinoDataRowFicheroExterno(DataRow loRowFicheroExterno, Dictionary<string, string> toDicCamposEmailDireccion)
1901  {
1902  if (toDicCamposEmailDireccion.Count == 0)
1903  return string.Empty;
1904 
1905  int lnPosSep = 0;
1906 
1907  string lcDestino = "";
1908 
1909  switch (this._TipoEnvio)
1910  {
1911  case TipoEnvioComunicados.EMail:
1912 
1913  string lcCampoEmail = "";
1914  toDicCamposEmailDireccion.TryGetValue("email", out lcCampoEmail);
1915 
1916  if (!string.IsNullOrWhiteSpace(lcCampoEmail))
1917  {
1918  // En el mismo campo se guarda el nombre de la columna y su posición en el fichero (0, 1, 2, etc.)
1919  //
1920  lnPosSep = lcCampoEmail.IndexOf(" @@ ");
1921  if (lnPosSep >= 0)
1922  lcCampoEmail = lcCampoEmail.Substring(0, lnPosSep);
1923 
1924  lcCampoEmail = Convert.ToString(loRowFicheroExterno[lcCampoEmail]);
1925  }
1926 
1927  lcDestino = lcCampoEmail;
1928 
1929  break;
1930 
1931  case TipoEnvioComunicados.Impreso:
1932 
1933  string lcCampoDireccion = "", lcCampoCPostal = "", lcCampoPoblacion = "", lcCampoProvincia = "";
1934 
1935  toDicCamposEmailDireccion.TryGetValue("direccion", out lcCampoDireccion);
1936  if (!string.IsNullOrWhiteSpace(lcCampoDireccion))
1937  {
1938  // En el mismo campo se guarda el nombre de la columna y su posición en el fichero (0, 1, 2, etc.)
1939  //
1940  lnPosSep = lcCampoDireccion.IndexOf(" @@ ");
1941  if (lnPosSep >= 0)
1942  lcCampoDireccion = lcCampoDireccion.Substring(0, lnPosSep);
1943  lcCampoDireccion = Convert.ToString(loRowFicheroExterno[lcCampoDireccion]);
1944  }
1945 
1946  toDicCamposEmailDireccion.TryGetValue("cpostal", out lcCampoCPostal);
1947  if (!string.IsNullOrWhiteSpace(lcCampoCPostal))
1948  {
1949  // En el mismo campo se guarda el nombre de la columna y su posición en el fichero (0, 1, 2, etc.)
1950  //
1951  lnPosSep = lcCampoCPostal.IndexOf(" @@ ");
1952  if (lnPosSep >= 0)
1953  lcCampoCPostal = lcCampoCPostal.Substring(0, lnPosSep);
1954 
1955  lcCampoCPostal = Convert.ToString(loRowFicheroExterno[lcCampoCPostal]);
1956  }
1957 
1958  toDicCamposEmailDireccion.TryGetValue("poblacion", out lcCampoPoblacion);
1959  if (!string.IsNullOrWhiteSpace(lcCampoPoblacion))
1960  {
1961  // En el mismo campo se guarda el nombre de la columna y su posición en el fichero (0, 1, 2, etc.)
1962  //
1963  lnPosSep = lcCampoPoblacion.IndexOf(" @@ ");
1964  if (lnPosSep >= 0)
1965  lcCampoPoblacion = lcCampoPoblacion.Substring(0, lnPosSep);
1966 
1967  lcCampoPoblacion = Convert.ToString(loRowFicheroExterno[lcCampoPoblacion]);
1968  }
1969 
1970  toDicCamposEmailDireccion.TryGetValue("provincia", out lcCampoProvincia);
1971  if (!string.IsNullOrWhiteSpace(lcCampoProvincia))
1972  {
1973  // En el mismo campo se guarda el nombre de la columna y su posición en el fichero (0, 1, 2, etc.)
1974  //
1975  lnPosSep = lcCampoProvincia.IndexOf(" @@ ");
1976  if (lnPosSep >= 0)
1977  lcCampoProvincia = lcCampoProvincia.Substring(0, lnPosSep);
1978  lcCampoProvincia = Convert.ToString(loRowFicheroExterno[lcCampoProvincia]);
1979  }
1980 
1981  lcDestino = lcCampoDireccion.Trim() + " " +
1982  lcCampoCPostal.Trim() + " " +
1983  lcCampoPoblacion.Trim() + " " +
1984  lcCampoProvincia + " ";
1985 
1986  break;
1987  }
1988 
1989  return lcDestino;
1990  }
1991 
1992 
1997  public string _ObtenerCodigoNuevo(string tcPrefix = "")
1998  {
1999  string lcValorSiguiente = "";
2000 
2001  if (string.IsNullOrEmpty(tcPrefix))
2002  {
2003  string lcValorActual = Convert.ToString(DB.SQLValor("empresa", "codigo", this._lcEmpresa, "Comunica"));
2004  lcValorSiguiente = Convert.ToString(Convert.ToInt32(lcValorActual) + 1);
2005  DB.SQLExec("update " + DB.SQLDatabase("gestion", "empresa") + " set comunica=" + lcValorSiguiente + " " +
2006  "where codigo=" + DB.SQLString(this._lcEmpresa));
2007  DB.SQLCommit();
2008  }
2009  else
2010  {
2011  int lnNumero = 0, lnAnchoCodigo = 0, lnAnchoCampo = 0;
2012  string lcSql, lcUltimoCodigo, lcWhere = string.Empty;
2013  DataTable ldtPlantillas = new DataTable();
2014 
2015  lnAnchoCampo = DB.SQLAnchuraCampo(_DataBase, _Tabla, "codigo");
2016  lnAnchoCodigo = lnAnchoCampo - tcPrefix.Length;
2017 
2018  //CCR 212368 - Si tenemos prefijo también tenemos que filtrar por los códigos numéricos
2019  if (lnAnchoCampo > tcPrefix.Trim().Length)
2020  lcWhere = $" and isnumeric(substring(codigo, {tcPrefix.Trim().Length + 1}, {lnAnchoCampo})) = {DB.SQLTrue()}";
2021 
2022  lcSql = $"select top 1 codigo as codigo from {DB.SQLDatabase(_DataBase, _Tabla)} where ";
2023  lcSql += $" codigo like '{tcPrefix}%' {lcWhere} order by codigo desc";
2024 
2025  bool llOk = DB.SQLExec(lcSql, ref ldtPlantillas);
2026 
2027  if (ldtPlantillas.Rows.Count == 0)
2028  {
2029  lcValorSiguiente = $"{tcPrefix}{new string('0', lnAnchoCodigo - 1)}1";
2030  }
2031  else
2032  {
2033  lcUltimoCodigo = Convert.ToString(ldtPlantillas.Rows[0]["codigo"]);
2034  if (!string.IsNullOrEmpty(tcPrefix)) lcUltimoCodigo = lcUltimoCodigo.Replace(tcPrefix, "");
2035 
2036  if (Int32.TryParse(lcUltimoCodigo, out lnNumero))
2037  {
2038  lcValorSiguiente = ((lnNumero + 1).ToString()).Trim().PadLeft(lnAnchoCodigo, '0');
2039  lcValorSiguiente = $"{tcPrefix}{lcValorSiguiente}";
2040  }
2041  }
2042 
2043  FUNCTIONS._DisposeDatatable(ldtPlantillas);
2044  }
2045 
2046  return lcValorSiguiente;
2047  }
2048 
2049 
2055  public void _RetrocederContadorEmpresa(string lcValorContadorPantalla)
2056  {
2057  if (string.IsNullOrWhiteSpace(lcValorContadorPantalla))
2058  return;
2059 
2060  // Si lo que tenemos en pantalla no es un número, no hacemos nada.
2061  //
2062  int lnValorContadorPantalla = 0;
2063  if (!Int32.TryParse(lcValorContadorPantalla, out lnValorContadorPantalla))
2064  return;
2065 
2066  int lnValorContadorEmpresa = Convert.ToInt32(DB.SQLValor("empresa", "codigo", this._lcEmpresa, "Comunica"));
2067  if (lnValorContadorPantalla == lnValorContadorEmpresa)
2068  {
2069  if (lnValorContadorEmpresa > 0)
2070  {
2071  lnValorContadorEmpresa--;
2072  DB.SQLBegin();
2073  DB.SQLExec("update " + DB.SQLDatabase("gestion", "empresa") + " set comunica=" + DB.SQLString(lnValorContadorEmpresa) + " " +
2074  "where codigo=" + DB.SQLString(this._lcEmpresa));
2075  DB.SQLCommit();
2076  }
2077  }
2078 
2079  return;
2080  }
2081 
2082 
2087  public bool _ExisteCodigo(string tcCodigo)
2088  {
2089  bool llExiste = false;
2090  string lcValorCodigo = Convert.ToString(DB.SQLValor("c_comuni", "empresa=" + DB.SQLString(this._lcEmpresa) + " and codigo", tcCodigo, "codigo"));
2091  if (lcValorCodigo == tcCodigo)
2092  llExiste = true;
2093 
2094  return llExiste;
2095  }
2096 
2097 
2101  public bool _Cerrar()
2102  {
2103  if (string.IsNullOrWhiteSpace(this._Codigo))
2104  {
2105  this._Error_Message = "No está situado en un comunicado." + Environment.NewLine + Environment.NewLine +
2106  "Imposible realizar acción de cerrar comunicado.";
2107  return false;
2108  }
2109 
2110  this._Cerrado = true;
2111  this._FechaCierre = DateTime.Today;
2112 
2113  return true;
2114  }
2115 
2116 
2120  public bool _Abrir()
2121  {
2122  if (string.IsNullOrWhiteSpace(this._Codigo))
2123  {
2124  this._Error_Message = "No está situado en un comunicado." + Environment.NewLine + Environment.NewLine +
2125  "Imposible realizar acción de abrir comunicado.";
2126  return false;
2127  }
2128 
2129  this._Cerrado = false;
2130  this._FechaCierre = null;
2131 
2132  return true;
2133  }
2134 
2135 
2142  public bool _ImportarGrupoFicheroExterno(string tcGrupo, out string tcMensajeError)
2143  {
2144  tcMensajeError = "";
2145  GrupoDestComunicados loGrupo = new GrupoDestComunicados(tcGrupo);
2146 
2147  // Hay que verificar que si el comunicado es de tipo email, que tengamos en el grupo la columna email identificada.
2148  // Idem para comunicados de tipo impreso, hay que asegurarse de que el grupo tenga la column direccion, cpostal, poblacion y
2149  // provincia identificadas.
2150  //
2151  if (!this.validarImportarGrupoFicheroExterno(loGrupo, out tcMensajeError))
2152  {
2153  loGrupo = null;
2154  return false;
2155  }
2156 
2157  this._Imp_CamposEmailDireccion = loGrupo._Imp_CamposEmailDireccion;
2158  this._Imp_Fichero = loGrupo._Imp_Fichero;
2159  this._Imp_TituloCampoClave = loGrupo._Imp_TituloCampoClave;
2160  this._Imp_TitulosColumnas = loGrupo._Imp_TitulosColumnas;
2161 
2162  this._GrupoDest = loGrupo._Codigo;
2163 
2164  this._DestinatariosFicheroExterno._Items.Clear();
2166  PropertyInfo propInfo = null;
2167 
2168  string lcNombreCampo = "", lcValor = "", lcDestino = "";
2170  {
2171  DestinatariosFicheroExterno.DestinatarioFicheroExterno loDestComunicado = this._DestinatariosFicheroExterno._NewItem();
2172  loDestComunicado._Codigo = loDestGrupo._Codigo;
2173  loDestComunicado._Destino = "";
2174 
2175  // Copio los datos de los campos del registro de GESTION!C_GRUDEI al registro del ManteTRel
2176  //
2177  for (int ln_i = 1; ln_i <= 50; ln_i++)
2178  {
2179  lcNombreCampo = "campo" + ln_i.ToString().Trim();
2180  propInfo = loType.GetProperty("_Campo" + ln_i.ToString().Trim());
2181  lcValor = Convert.ToString(propInfo.GetValue(loDestGrupo, null));
2182  propInfo.SetValue(loDestComunicado, lcValor, null);
2183  }
2184  lcDestino = this.obtenerValorColDestinoGrupoFicheroExterno(loGrupo._Imp_CamposEmailDireccion, propInfo, loDestGrupo);
2185  loDestComunicado._Destino = lcDestino;
2186  }
2187 
2188  return true;
2189  }
2190 
2191 
2192  #endregion MÉTODOS PÚBLICOS
2193  }
2194 
2195 
2199  public class FicherosAdjuntosComunicados : ewManteTRel<FicherosAdjuntosComunicados.Linea, FicherosAdjuntosComunicados.Clave>
2200  {
2201  #region PROPIEDADES PRIVADAS
2202 
2206  private string _lcEmpresa = EW_GLOBAL._GetVariable("wc_empresa").ToString().Trim();
2207 
2208 
2209  #endregion PROPIEDADES PRIVADAS
2210 
2211 
2212  #region PROPIEDADES PUBLICAS
2213 
2214 
2218  public Comunicados _oComunicado
2219  {
2220  get
2221  {
2222  return (Comunicados)_ewMantePrincipal;
2223  }
2224  }
2225 
2226 
2227  #endregion PROPIEDADES PUBLICAS
2228 
2229 
2230  #region CONSTRUCTORES
2231 
2232 
2238  {
2239  this.crearEstructura();
2240 
2241  return;
2242  }
2243 
2244 
2245 
2249  public FicherosAdjuntosComunicados(string tcCodigo)
2250  {
2251  this.crearEstructura();
2252 
2253  this._Claves._Empresa._Valor = this._lcEmpresa;
2254  this._Claves._Codigo._Valor = tcCodigo;
2255 
2256  return;
2257  }
2258 
2259 
2260  #endregion CONSTRUCTORES
2261 
2262 
2263  #region MÉTODOS PRIVADOS
2264 
2265 
2269  private void crearEstructura()
2270  {
2271  this._DataBase = "GESTION";
2272  this._Tabla = "ADJUNTOC";
2273  this._OrdenarPor = "LINEA";
2274 
2275  this._Condicion = "";
2276  this._Titulo_Browser = "";
2277 
2278 
2279  this._AddCampoTRel("_Empresa", "Empresa", false, true, false);
2280 
2281  this._AddCampoTRel("_Codigo", "Codigo", false, true, false);
2282 
2283  this._AddCampoTRel("_Linea", "Linea", false, true, false);
2284 
2285  this._AddCampoTRel("_Fichero", "Fichero", true, true, true, "Fichero");
2286 
2287  this._AddCampoTRel("_Usuario", "Usuario", false, true, false);
2288 
2289  return;
2290  }
2291 
2292 
2293  #endregion MÉTODOS PRIVADOS
2294 
2295 
2296  #region MÉTODOS PUBLIC OVERRIDE SOBREESCRITOS DE EWMANTTREL
2297 
2298 
2302  public override void _Load()
2303  {
2304  this._Claves._Empresa._Valor = this._lcEmpresa;
2305  this._Claves._Codigo._Valor = this._oComunicado._Codigo;
2306  base._Load();
2307 
2308  return;
2309  }
2310 
2311 
2315  public override bool _Save()
2316  {
2317  this._Claves._Empresa._Valor = this._lcEmpresa;
2318  this._Claves._Codigo._Valor = this._oComunicado._Codigo;
2319 
2320  base._Save();
2321 
2322  return true;
2323  }
2324 
2325 
2326  #endregion MÉTODOS PUBLIC OVERRIDE SOBREESCRITOS DE EWMANTTREL
2327 
2328 
2329 
2333  public class Clave : IClaves
2334  {
2338  public ClaveTRel _Empresa { get; set; }
2339 
2340 
2344  public ClaveTRel _Codigo { get; set; }
2345 
2346 
2350  public ClaveTRel _Linea { get; set; }
2351 
2352 
2356  public Clave()
2357  {
2358  // Definición de las propiedades de cada una de les claves
2359 
2360  // Empresa del comunicado.
2361  //
2362  this._Empresa = new ClaveTRel();
2363  this._Empresa._EsFiltro = true;
2364  this._Empresa._EsCampoLinea = false;
2365 
2366 
2367  // Código del comunicado.
2368  //
2369  this._Codigo = new ClaveTRel();
2370  this._Codigo._EsFiltro = true;
2371  this._Codigo._EsCampoLinea = false;
2372 
2373  // Linea del comunicado
2374  //
2375  this._Linea = new ClaveTRel();
2376  this._Linea._EsFiltro = false;
2377  this._Linea._EsCampoLinea = true;
2378 
2379  return;
2380  }
2381  }
2382 
2383 
2387  public class Linea : ILinTRel
2388  {
2392  public string _Empresa
2393  {
2394  get
2395  {
2396  return this._cEmpresa;
2397  }
2398  set
2399  {
2400  this._cEmpresa = value;
2401  }
2402  }
2403  private string _cEmpresa = "";
2404 
2405 
2409  public string _Codigo
2410  {
2411  get
2412  {
2413  return this._cCodigo;
2414  }
2415  set
2416  {
2417  this._cCodigo = value;
2418  }
2419  }
2420  private string _cCodigo = "";
2421 
2422 
2426  public int _Linea
2427  {
2428  get
2429  {
2430  return _nLinea;
2431  }
2432  set
2433  {
2434  _nLinea = value;
2435  }
2436  }
2437  private int _nLinea = 0;
2438 
2439 
2443  public string _Fichero
2444  {
2445  get
2446  {
2447  return this._cFichero;
2448  }
2449  set
2450  {
2451  this._cFichero = value;
2452  }
2453  }
2454  private string _cFichero = "";
2455 
2456 
2460  public string _Usuario
2461  {
2462  get
2463  {
2464  return this._cUsuario;
2465  }
2466  set
2467  {
2468  this._cUsuario = value;
2469  }
2470  }
2471  private string _cUsuario = "";
2472 
2473 
2477  public object _Parent
2478  {
2479  get { return this._oParent; }
2480  set { this._oParent = (FicherosAdjuntosComunicados)value; }
2481  }
2486 
2487 
2491  public Comunicados _oComunicado
2492  {
2493  get { return this._oParent._oComunicado; }
2494  }
2495 
2496 
2500  public Linea()
2501  {
2502 
2503  }
2504 
2505 
2510  public bool Fila_Plena()
2511  {
2512  bool lbFilaPlena = true;
2513 
2514  lbFilaPlena = !string.IsNullOrWhiteSpace(this._Fichero);
2515 
2516  return lbFilaPlena;
2517  }
2518  }
2519  }
2520 }
2521 
2522 
DestinatariosFicheroExterno _DestinatariosFicheroExterno
ManteTRel de destinatarios usuarios para el caso de que el grupo de destinatarios corresponda al tipo...
Clase para el envío de emails
Definition: SendMail.cs:21
TipoDestinatarios
Enumeración que define los posibles tipos de destinatarios en un grupo de destinatarios o comunicado...
Clase de negocio base para mantenimientos
Definition: clsEwBase.cs:1643
bool _ExisteCodigo(string tcCodigo)
Devuelve true si existe comunicado en la base de datos con el código pasado como parámetro, false caso contrario.
ManteTRel de destinatarios de tipo &#39;Clientes potenciales&#39;
TipoPlantillaComunicados
Enumeración que define los posibles tipos de plantillas para comunicados.
string _Imp_TitulosColumnas
Lista de títulos de columnas del fichero importado (en un grupo de destinatarios de tipo importación ...
Struct de retorno de una operación de duplicación
Definition: clsEwBase.cs:2390
Definición de los objetos campo para las tablas relacionadas
PE-94313: Clase para gestionar el mantenimiento de las imagenes de los artículos PE-97714: Sacamos la...
Definition: Imagen.cs:14
string obtenerValorColDestinoGrupoFicheroExterno(string tcJsonCamposEmailDireccion, PropertyInfo toPropertyInfo, DestinatariosFicheroExterno.DestinatarioFicheroExterno toDestinatarioGrupo)
Devuelve el valor de la columna destino a poner en un comunicado de tipo &#39;Fichero externo&#39; cuando lo ...
bool validarImportarGrupoFicheroExterno(GrupoDestComunicados toGrupo, out string tcMensajeError)
Al importar a un comunicado de tipo &#39;Fichero externo&#39; los destinatarios de un grupo de destinatarios ...
override string _Where()
Evitar que borre el registro de codigo xxxx en las diferentes empresas si los encontraba, cosa que hacía.
override bool _Delete()
Borra el comunicado cargado.
Clase para las lineas de ficheros adjuntos al comunicado.
Es como el tipo de entrada asientos pero por negocio, sin formulario, pq quiero que me haga las propu...
ManteTRel de destinatarios de tipo &#39;Vendedores&#39;
Comunicados _Comunicado
Instancia de la clase Comunicados
override void _Load()
Carga del ManteTRel de ficheros adjuntos del comunicado.
override bool _Save()
Guardar el comunicado.
BindingList< _LinTRel > _Items
Lista bindable de todos los items de la tabla relacionada
Clase de negocio para el mantenimiento de grupos de destinatarios de comunicados. ...
override IResultadoDuplicacion _Duplicar(string tcCodigo)
Override del método de duplicación para realizar validaciones específicas
void _ShowDialog()
Abre el formulario de comunicados en forma modal y muestra el comunicado.
bool _ImportarGrupoFicheroExterno(string tcGrupo, out string tcMensajeError)
Añadir los destinatarios de un grupo con tipo destinatarios &#39;Fichero externo&#39; en un comunicado...
ManteTRel de destinatarios de tipo &#39;Usuarios&#39;
void _SeleccionarManteTRel()
Según el tipo de destinatario seleccionar un mantetrel u otro para utilizar
Clase que permite extender la funcionalidad de la clase Comunicados
string _ObtenerColumnaDestinoDataRowFicheroExterno(DataRow loRowFicheroExterno, Dictionary< string, string > toDicCamposEmailDireccion)
Dado un DataRow de un fichero externo que se está importando, obtiene el campo Email/Dir.Postal que se ha de guardar en la columna _Destino del ManteTrel de destinatarios fichero externo. Se utiliza solo en comunicados. No se utiliza en grupos de destinatarios (en grupos no hay columna email/dir.postal destino).
ManteTRel de destinatarios de tipo &#39;Clientes&#39;.
string _Imp_CamposEmailDireccion
Nombre de las columnas que representan el email, dirección, cpostal, poblacion, provincia y campo cla...
Comunicados(string tcCodigo)
Constructor con código de comunicado existente.
bool Fila_Plena()
Devuelve true si la línea está completa, false si falta declarar algún campo.
Clase para uso de funciones genéricas
Definition: functions.cs:146
bool EjecucionCorrecta
Resultado de la operación
ManteTRel de destinatarios de tipo &#39;Fichero externo Excel, CSV, XML, JSON&#39;
TipoParentDestinatarios
Enumeración que define los posibles tipos de entidades padres que pueden acoger destinatarios, en nuestro caso, grupos de destinatarios y comunicados.
virtual string _Codigo
Valor del campo clave que
Definition: clsEwBase.cs:2513
string _ObtenerCodigoNuevo(string tcPrefix="")
Obtiene un nuevo nº de comunicado utilizando el contador de comunicados de empresa.
FicherosAdjuntosComunicados(string tcCodigo)
Inicializa una nueva intancia de la clase FicherosAdjuntosComunicados
void _Addons_EnviarEmailImprimir(TipoExecute teBeforeAfter, SendMail toSendMail, string tcCuerpo, string tcCodigo, bool tlEmailEnviadoImpresoOk)
Procesos adicionales a realizar antes de enviar email/imprimir a un destinatario y después de enviar/...
ManteTRel de destinatarios de tipo &#39;Proveedores&#39;
TipoExecute
Tipos de ejecución de los métodos
Definition: IDocModulos.cs:16
void _Addons_AdjuntarArchivosAdicionales(List< string > tlstArchivosAdjuntar)
Adjuntar archivos adicionales comunes a todos los destinatarios.
override bool _Save()
Save del ManteTRel de ficheros adjuntos del comunicado.
void _RetrocederContadorEmpresa(string lcValorContadorPantalla)
Retrocede el contador de comunicados de empresa caso que el contador existente en pantalla coincida c...
void _Addons_GenerarComunicado(TipoExecute teBeforeAfter)
Procesos adicionales a realizar antes de generar el comunicado y después de generar el comunicado ...
Campos clave para registros únicos y carga de registros
FicherosAdjuntosComunicados()
Inicializa una nueva intancia de la clase.
_EstadosMantenimiento
Declaro un enum para los estados del mantenimiento.
Definition: clsEwBase.cs:1671
string _Imp_TituloCampoClave
Título de la columna del fichero importado que ejerce como campo clave.
Comunicados _oComunicado
Objeto de negocio Comunicados del cual cuelga el mantetrel de ficheros adjuntos del comunicado ...
Interficie para resultados de duplicaciones
Definir la estructura de las líneas de destinatarios en un grupo de destinatarios basado en importaci...
Interfaz para objetos línea
Definition: ILinTRel.cs:11
string _Config
Configuración de las expresiones de comunicados
Definition: Comunicados.cs:118
static ResultadoDuplicacion Fallida(string mensajeError)
Genera un resultado correcto
Definition: clsEwBase.cs:2433
override void _Load()
Cargar los datos del comunicado.
override bool _Save_Before()
Verificar que al crear un nuevo comunicado dejemos por lo menos unos campos mínimos declarados...
string _Imp_Fichero
Ruta al fichero importado, caso de grupo de destinatarios de tipo "Importación fichero externo Excel...
_Error_Message_LineaDestinatario_After_Handler _Error_Message_LineaDestinatario_After
Evento que se dispara despues de establecer un valor en _Error_Message_LineaDestinatario ...
Definition: Comunicados.cs:663
static ConfiguracionExpresionesListados _GetConfiguracion(string tcConfig)
Deserializa el objeto ConfiguracionComunicadosListados
FicherosAdjuntosComunicados _oParent
Objeto padre protected de la linea, el ManteTRel del que cuelga.
TipoEnvioComunicados
Enumeración que define los posibles tipos de envío en comunicados.
Dictionary< string, string > _Addons_ObtenerDatosAdicXmlRespuesta()
Obtener información adicional por parte de cada addon para almacenar en el fichero de respuesta XML q...
Clase de negocio para el mantenimiento de comunicados.
Definition: Comunicados.cs:24
Interfaz para la definición de las claves para tablas relacionadas
Definition: IClaves.cs:11
Clase para el acceso a las tablas relacionadas de los mantenimientos.
Interface utilizada por los mantenimientos que tienen grid de destinatarios (mantenimiento de grupos ...
Definition: IComunicado.cs:295
DateTime _FechaCierre
Fecha de cierre del comunicado.
Definition: Comunicados.cs:442
Interface mantetrel destinatarios con las propiedades y métodos de la clase ManteTRel que utilizaremo...
Definition: IComunicado.cs:109
ManteTRel de destinatarios de tipo &#39;Cuentas contables&#39;
override void _DescargarDatos()
Descargar datos.