clsCliente.cs
1 # region Usings
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Data;
6 using System.Windows.Forms;
7 using System.Globalization;
8 using System.Xml;
9 using System.ComponentModel;
10 using System.Reflection;
11 using System.Text.RegularExpressions;
12 
13 using sage.ew.ewbase;
14 using sage.ew.ewbase.Clases;
15 using sage.ew.db;
16 using sage.ew.global;
17 using sage.ew.netvfp;
18 using sage.ew.formul;
19 using sage.ew.formul.Forms;
20 using sage.ew.cliente.Clases;
21 using sage.ew.objetos;
22 using sage.ew.interficies;
23 using sage.ew.functions;
24 using sage.ew.usuario;
25 using sage.ew.empresa;
26 using sage.ew.listados.Procesos;
27 using sage.ew.contabilidad;
28 using sage.ew.functions.Clases;
30 using Sage.ES.S50.Addons;
31 using sage.ew.docsven;
32 using System.Text;
34 using System.Drawing.Text;
35 
36 #endregion Usings
37 
38 namespace sage.ew.cliente
39 {
44  {
45  #region DEFINICIÓN DE CLASES MANTETREL CON CLIENTES
46 
47 
48  // El ManteTRel de actividades de cliente está definido en el fichero clsActividadesCliente
49 
53  public class ContacTelefs : ewManteTRel<ContacTelefs.ContacTelef, ContacTelefs.Clave>
54  {
58  public override string _NombreManteTRel => "Contactos y teléfonos";
59 
64  private bool _llModificado = false;
65 
69  public ContacTelefs()
70  {
71  this._llModificado = false;
72 
73  CrearEstructura();
74  }
75 
79  public ContacTelefs(string tcCodigoCliente)
80  {
81  CrearEstructura();
82 
83  this._llModificado = false;
84 
85  this._Claves._Cliente._Valor = tcCodigoCliente;
86  }
87 
92  public override bool _Delete()
93  {
94  bool llOk = false;
95 
96  // Esto borra todos los registros de la tabla principal CONTLF_CLI
97  llOk = base._Delete();
98 
99  if (llOk)
100  {
101  string lcCliente = Convert.ToString(this._Claves._Cliente._Valor);
102  if (!string.IsNullOrWhiteSpace(lcCliente))
103  {
104  // Borrar todos los registros de las tablas "hijas" TELF_CLI y CONT_CLI
105  DB.SQLExec("delete from " + DB.SQLDatabase("gestion", "telf_cli") + " where cliente=" + DB.SQLString(lcCliente));
106  DB.SQLExec("delete from " + DB.SQLDatabase("gestion", "cont_cli") + " where cliente=" + DB.SQLString(lcCliente));
107  }
108  }
109 
110  return llOk;
111  }
112 
117  public override void _Load()
118  {
119  base._Load();
120  this._llModificado = false;
121  }
122 
128  public override bool _DeleteItem(ContacTelef toItem)
129  {
130  this._llModificado = true;
131  return base._DeleteItem(toItem);
132  }
133 
138  public override bool _Save()
139  {
140  bool llOk = true;
141  string lcSql = "";
142 
143  string lcCliente = Convert.ToString(this._Claves._Cliente._Valor);
144 
145  if (!string.IsNullOrWhiteSpace(lcCliente) && !Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_hera")))
146  {
147  // Si se ha modificado algo en la tabla principal propagamos cambios a las tablas hijas TELF_CLI/CONT_CLI
148  if (this._llModificado)
149  {
150  // Borro el contenido de la tabla TELF_CLI y luego recreo los registros.
151  DB.SQLExec("delete from " + DB.SQLDatabase("gestion", "telf_cli") + " where cliente=" + DB.SQLString(lcCliente));
152 
153  // Rellenar TELF_CLI
154  int lnLinTelfCli = 0;
155 
156  foreach (ContacTelef loItem in _Items)
157  {
158  if (loItem.Fila_Plena())
159  {
160  if (!string.IsNullOrWhiteSpace(loItem._Telefono))
161  {
162  lnLinTelfCli++;
163  lcSql = "insert into " + DB.SQLDatabase("telf_cli") + " (cliente, linea, telefono, texto, orden) " +
164  "values(" + DB.SQLString(lcCliente) + ", " + DB.SQLString(lnLinTelfCli) + ", " +
165  DB.SQLString(loItem._Telefono) + ", " + DB.SQLString(loItem._Observa) + ", " +
166  DB.SQLString(loItem._Predet ? 1 : 0) + ")";
167  DB.SQLExec(lcSql);
168  loItem._LinTelfCli = lnLinTelfCli;
169  }
170  else
171  loItem._LinTelfCli = 0;
172 
173  }
174  else
175  loItem._LinTelfCli = 0;
176  }
177 
178  // Borro el contenido de la tabla CONT_CLI y luego recreo los registros.
179  DB.SQLExec("delete from " + DB.SQLDatabase("gestion", "cont_cli") + " where cliente=" + DB.SQLString(lcCliente));
180 
181  // Rellenar CONT_CLI
182  int lnLinContCli = 0;
183  foreach (ContacTelef loItem in _Items)
184  {
185  if (loItem.Fila_Plena())
186  {
187  if (!string.IsNullOrWhiteSpace(loItem._Persona) || !string.IsNullOrWhiteSpace(loItem._Cargo) ||
188  !string.IsNullOrWhiteSpace(loItem._Email) || !string.IsNullOrWhiteSpace(loItem._Telefono))
189  {
190  lnLinContCli++;
191  lcSql = "insert into " + DB.SQLDatabase("cont_cli") + " (cliente, linea, persona, cargo, email, telefono, orden) " +
192  "values(" + DB.SQLString(lcCliente) + ", " + DB.SQLString(lnLinContCli) + ", " +
193  DB.SQLString(loItem._Persona) + ", " +
194  DB.SQLString(loItem._Cargo) + ", " +
195  DB.SQLString(loItem._Email) + ", " +
196  DB.SQLString(loItem._Telefono) + ", " +
197  DB.SQLString(loItem._Predet ? 1 : 0) + ")";
198  DB.SQLExec(lcSql);
199  loItem._LinContCli = lnLinContCli;
200  }
201  else
202  loItem._LinContCli = 0;
203  }
204  else
205  loItem._LinContCli = 0;
206  }
207  }
208  }
209  llOk = base._Save();
210 
211  this._llModificado = false;
212 
213  return llOk;
214  }
215 
216 
217  private void CrearEstructura()
218  {
219  // Definir la base
220  this._DataBase = "Gestion";
221  this._Condicion = "";
222 
223  if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_hera")))
224  {
225  this._Tabla = "Cont_cli";
226 
227  this._AddCampoTRel("_Cliente", "Cliente", false, true, false);
228  this._AddCampoTRel("_Predet", "Orden", true, true, true, "Predet.", gridColumnsTypes.Lógico);
229  this._AddCampoTRel("_Persona", "Persona", true, true, true, "Persona");
230  this._AddCampoTRel("_Cargo", "Cargo", true, true, true, "Cargo", gridColumnsTypes.ComboEditable, toComboValues: this._getTiposCargos());
231  this._AddCampoTRel("_Telefono", "Telefono", true, true, true, "Teléfono");
232  this._AddCampoTRel("_Email", "Email", true, true, true, "Email");
233  this._AddCampoTRel("_Linia", "Linea", false, true, false);
234 
235  }
236  else
237  {
238  this._Tabla = "Contlf_cli";
239 
240  // Omplim els camps i relació de propietats
241 
242  this._AddCampoTRel("_Cliente", "Cliente", false, true, false);
243  //PE-104243
244  this._AddCampoTRel("_Tipo", "Tipo", false, true, false);
245  this._AddCampoTRel("_TipoCombo", "", true, false, true, "Tipo", gridColumnsTypes.Combo, toComboValues: new List<object>() { "Contacto", "General" });
246 
247  this._AddCampoTRel("_Predet", "Predet", true, true, true, "Predet.", gridColumnsTypes.Lógico);
248  this._AddCampoTRel("_Persona", "Persona", true, true, true, "Persona");
249  this._AddCampoTRel("_Cargo", "Cargo", true, true, true, "Cargo", gridColumnsTypes.ComboEditable, toComboValues: this._getTiposCargos());
250  this._AddCampoTRel("_Telefono", "Telefono", true, true, true, "Teléfono");
251  this._AddCampoTRel("_Observa", "Observa", true, true, true, "Observ.");
252  this._AddCampoTRel("_Email", "Email", true, true, true, "Email");
253  this._AddCampoTRel("_Facebook", "Facebook", true, true, true, "Facebook");
254  this._AddCampoTRel("_Twitter", "Twitter", true, true, true, "Twitter");
255  this._AddCampoTRel("_Skype", "Skype", true, true, true, "Skype");
256 
257  this._AddCampoTRel("_Linia", "Linea", false, true, false);
258 
259  this._AddCampoTRel("_LinContCli", "Lincontcli", false, true, false);
260  this._AddCampoTRel("_LinTelfCli", "Lintelfcli", false, true, false);
261 
262  }
263 
264  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid"))
265  this._AddCampoTRel("_Guid", "Guid", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
266 
267  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid_exp"))
268  this._AddCampoTRel("_Guid_Exp", "Guid_exp", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
269 
270  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Exportar"))
271  this._AddCampoTRel("_Exportar", "Exportar", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
272 
273  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Importar"))
274  this._AddCampoTRel("_Importar", "Importar", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
275 
276  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_estado"))
277  this._AddCampoTRel("_Com_estado", "Com_estado", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
278 
279  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_fecha"))
280  this._AddCampoTRel("_Com_fecha", "Com_fecha", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
281 
282  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_ini"))
283  this._AddCampoTRel("_Com_ini", "Com_ini", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
284 
285  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Sucursal"))
286  this._AddCampoTRel("_Sucursal", "Sucursal", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
287 
288  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid_id"))
289  this._AddCampoTRel("_Guid_Id", "Guid_id", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
290 
291  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Created"))
292  this._AddCampoTRel("_Created", "Created", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
293 
294  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Modified"))
295  this._AddCampoTRel("_Modified", "Modified", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
296 
297  //FI PE-104237
298  }
299 
303  protected override void _Configurar_Grid()
304  {
305  base._Configurar_Grid();
306 
307  if (this._ManteGrid != null)
308  {
309  this._ManteGrid._DataSource_Row_New_Event += new objetos.UserControls.Mantegrid._DataSource_Row_New_Event_Handler(ContacTelfs_ManteGrid__DataSource_Row_New_Event);
310 
311  this._ManteGrid._Grid._FiltrarPorColumna = true;
312  }
313  }
314 
319  void ContacTelfs_ManteGrid__DataSource_Row_New_Event(int tnInsertLinea)
320  {
321  this._CurrentItem._Predet = (this._ManteGrid._Grid.Rows.Count <= 1 ? true : false);
322  this._CurrentItem._Cargo = "";
323  this._CurrentItem._Email = new string(' ', 150);
324  this._CurrentItem._Facebook = new string(' ', 254);
325  this._CurrentItem._Twitter = new string(' ', 254);
326  this._CurrentItem._Skype = new string(' ', 100);
327  this._CurrentItem._Telefono = new string(' ', 15);
328  this._CurrentItem._Observa = new string(' ', 150);
329  this._CurrentItem._Persona = new string(' ', 30);
330  }
331 
335  public enum TiposCargos
336  {
340  [Description("")]
341  SinCargo = 0,
345  [Description("DIRECTOR")]
346  Director,
350  [Description("GERENTE")]
351  Gerente,
355  [Description("COMERCIAL")]
356  Comercial,
360  [Description("SECRETARIA")]
361  Secretaria,
365  [Description("COMUNICADO")]
366  Comunicado,
367  }
368 
372  public enum Tipo
373  {
377  [DescriptionAttribute("Todos")]
378  Todos = 0,
382  [DescriptionAttribute("Contacto")]
383  Contacto,
387  [DescriptionAttribute("General")]
388  General
389  }
390 
396  private List<object> _getTiposCargos()
397  {
398  //Tipo de cargo fijos
399  List<object> lstLista = new List<object>();
400  var values = Enum.GetValues(typeof(TiposCargos)).Cast<TiposCargos>();
401  foreach (TiposCargos item in values)
402  lstLista.Add((object)sage.ew.functions.FUNCTIONS._GetEnumDescription(item));
403  //Tipos de la tabla
404  string lcWhere = String.Join(", ", Enum.GetValues(typeof(TiposCargos)).Cast<TiposCargos>().Select(s => DB.SQLString((object)sage.ew.functions.FUNCTIONS._GetEnumDescription(s))));
405  string lcSql = "select distinct cargo from " + DB.SQLDatabase("GESTION", _Tabla) + " where cargo NOT IN ('', " + lcWhere + ")";
406  DataTable ldtTemp = new DataTable();
407  DB.SQLExec(lcSql, ref ldtTemp);
408  if (ldtTemp.Rows.Count > 0)
409  {
410  foreach (DataRow item in ldtTemp.Rows)
411  {
412  lstLista.Add((object)item["cargo"].ToString().Trim());
413  }
414  }
415 
416  FUNCTIONS._DisposeDatatable(ldtTemp);
417 
418  return lstLista;
419  }
420 
424  public class Clave : IClaves
425  {
429  public ClaveTRel _Cliente { get; set; }
430 
434  public ClaveTRel _Linia { get; set; }
435 
439  public Clave()
440  {
441  // Definim les propietats de cada una de les claus
442  _Cliente = new ClaveTRel();
443  _Cliente._EsFiltro = true; // Actuarà com a filtre per recuperar els registres
444 
445  _Linia = new ClaveTRel();
446  _Linia._EsCampoLinea = true;
447  // Per defecte, totes les ClaveTRel son EsClave = true
448  }
449  }
450 
454  public class ContacTelef : ILinTRel
455  {
456  private string _cCliente = "";
460  public string _Cliente
461  {
462  get { return _cCliente; }
463  set
464  {
465  if (value != _cCliente)
466  {
467  loParent._llModificado = true;
468  _cCliente = value;
469  loParent._Exportar_Null();
470  }
471  }
472  }
473 
474  private int _nTipo = 1;
478  public int _Tipo
479  {
480  get
481  {
482  return _nTipo;
483  }
484  set
485  {
486  if (value != _nTipo)
487  {
488  loParent._llModificado = true;
489  _nTipo = value;
490  loParent._Exportar_Null();
491  }
492  }
493  }
494 
498  public string _TipoCombo
499  {
500  get
501  {
502  Tipo loTipo = (Tipo)Enum.Parse(typeof(Tipo), Convert.ToString(_nTipo));
503  return loTipo.__GetDescription();
504  }
505  set
506  {
507  if (Tipo.General.__GetDescription() == value)
508  {
509  _nTipo = Convert.ToInt32(Tipo.General);
510  }
511  else
512  {
513  _nTipo = Convert.ToInt32(Tipo.Contacto);
514  }
515 
516  }
517  }
518 
519  private string _cPersona = "";
523  public string _Persona
524  {
525  get { return _cPersona; }
526  set
527  {
528  if (value != _cPersona)
529  {
530  loParent._llModificado = true;
531  _cPersona = value;
532  loParent._Exportar_Null();
533  }
534  }
535  }
536 
537  private string _cCargo = "";
541  [DefaultValue("")]
542  public string _Cargo
543  {
544  get { return _cCargo; }
545  set
546  {
547  //value = value.Trim();
548 
549  if (value == null)
550  value = "";
551  else
552  value = value.Trim();
553 
554  if (value != _cCargo)
555  {
556  loParent._llModificado = true;
557  _cCargo = value;
558  loParent._Exportar_Null();
559  }
560  }
561  }
562 
563  private string _cEmail = "";
567  public string _Email
568  {
569  get { return _cEmail; }
570  set
571  {
572  if (value == null)
573  value = "";
574  else
575  value = value.Trim();
576 
577  if (value != _cEmail)
578  {
579  loParent._llModificado = true;
580  _cEmail = value;
581  loParent._Exportar_Null();
582  }
583  }
584  }
585 
586  private string _cTelefono = "";
590  public string _Telefono
591  {
592  get { return _cTelefono; }
593  set
594  {
595  if (value != _cTelefono)
596  {
597  loParent._llModificado = true;
598  _cTelefono = value;
599  loParent._Exportar_Null();
600  }
601  }
602  }
603 
604  private string _cObserva = "";
608  public string _Observa
609  {
610  get { return _cObserva; }
611  set
612  {
613  if (value != _cObserva)
614  {
615  loParent._llModificado = true;
616  _cObserva = value;
617  loParent._Exportar_Null();
618  }
619  }
620  }
621 
622  private string _cFacebook = "";
626  public string _Facebook
627  {
628  get { return _cFacebook; }
629  set
630  {
631  if (value != _cFacebook)
632  {
633  loParent._llModificado = true;
634  _cFacebook = value;
635  loParent._Exportar_Null();
636  }
637  }
638  }
639 
640  private string _cTwitter = "";
644  public string _Twitter
645  {
646  get { return _cTwitter; }
647  set
648  {
649  if (value != _cTwitter)
650  {
651  loParent._llModificado = true;
652  _cTwitter = value;
653  loParent._Exportar_Null();
654  }
655  }
656  }
657 
658  private string _cSkype = "";
662  public string _Skype
663  {
664  get { return _cSkype; }
665  set
666  {
667  if (value != _cSkype)
668  {
669  loParent._llModificado = true;
670  _cSkype = value;
671  loParent._Exportar_Null();
672  }
673  }
674  }
675 
676 
677  private int _nLinia = 0;
681  public int _Linia
682  {
683  get { return _nLinia; }
684  set
685  {
686  if (value != _nLinia)
687  {
688  loParent._llModificado = true;
689  _nLinia = value;
690  loParent._Exportar_Null();
691  }
692  }
693  }
694 
695  private int _nLinContCli = 0;
699  public int _LinContCli
700  {
701  get { return _nLinContCli; }
702  set
703  {
704  if (value != _nLinContCli)
705  {
706  _nLinContCli = value;
707  loParent._Exportar_Null();
708  }
709  }
710  }
711 
712  private int _nLinTelefCli = 0;
716  public int _LinTelfCli
717  {
718  get { return _nLinTelefCli; }
719  set
720  {
721  if (value != _nLinTelefCli)
722  {
723  _nLinTelefCli = value;
724  loParent._Exportar_Null();
725  }
726  }
727  }
728 
732  public string _Guid_Exp
733  {
734  get { return _cGuid_Exp; }
735  set { _cGuid_Exp = value; }
736  }
737  private string _cGuid_Exp = "";
738 
742  public string _Guid
743  {
744  get { return _cGuid; }
745  set { _cGuid = value; }
746  }
747  private string _cGuid = "";
748 
752  public DateTime? _Importar
753  {
754  get { return _dImportar; }
755  set { _dImportar = value; }
756  }
757  private DateTime? _dImportar;
758 
759 
763  public DateTime? _Exportar
764  {
765  get { return _dExportar; }
766  set { _dExportar = value; }
767  }
768  private DateTime? _dExportar;
769 
773  public int _Com_estado
774  {
775  get { return _nCom_estado; }
776  set { _nCom_estado = value; }
777  }
778  private int _nCom_estado = 0;
779 
783  public DateTime _Com_fecha
784  {
785  get { return _dCom_fecha; }
786  set { _dCom_fecha = value; }
787  }
788  private DateTime _dCom_fecha;
789 
793  public DateTime _Com_ini
794  {
795  get { return _dCom_ini; }
796  set { _dCom_ini = value; }
797  }
798  private DateTime _dCom_ini;
799 
803  public string _Sucursal
804  {
805  get { return _cSucursal; }
806  set { _cSucursal = value; }
807  }
808  private string _cSucursal = "";
809 
810  private bool _bPredet = false;
814  public bool _Predet
815  {
816  get { return _bPredet; }
817  set
818  {
819  if (value != _bPredet)
820  {
821  loParent._llModificado = true;
822  _bPredet = value;
823  if (_bPredet == true)
824  {
825  if (loParent != null)
826  {
827  foreach (Cliente.ContacTelefs.ContacTelef loContactTelf in loParent._Items) //Marcar el resto de _Predets a false
828  {
829  if (loContactTelf != this)
830  {
831  loContactTelf._Predet = false;
832  }
833  }
834  }
835  }
836  loParent._Exportar_Null();
837  }
838  }
839  }
840 
844  public string _Guid_Id
845  {
846  get
847  {
848  if (string.IsNullOrWhiteSpace(_cGuid_Id))
849  {
850  _cGuid_Id = Guid.NewGuid().ToString().ToUpper();
851  loParent._llModificado = true;
852  }
853  return _cGuid_Id;
854  }
855  set { _cGuid_Id = value; }
856  }
857  private string _cGuid_Id = "";
858 
862  public DateTime _Created
863  {
864  get
865  {
866  if (_dCreated == DateTime.MinValue)
867  {
868  _dCreated = DateTime.Now;
869  loParent._llModificado = true;
870  }
871  return _dCreated;
872  }
873  set { _dCreated = value; }
874  }
875  private DateTime _dCreated;
876 
880  public DateTime? _Modified
881  {
882  get
883  {
884  return _dModified;
885  }
886  set { _dModified = value; }
887  }
888  private DateTime? _dModified = null;
889 
890  private bool _bVisible = true;
891 
895  public bool _Visible
896  {
897  get
898  {
899  return _bVisible;
900  }
901  set
902  {
903  _bVisible = value;
904  }
905  }
906 
907 
908  private ContacTelefs loParent;
912  public object _Parent
913  {
914  get
915  {
916  return loParent;
917  }
918  set
919  {
920  loParent = (ContacTelefs)value;
921  }
922  }
923 
927  public ContacTelef()
928  {
929 
930  }
931 
936  public bool Fila_Plena()
937  {
938  bool lbFilaPlena;
939 
940  lbFilaPlena = _Cargo != "" || _Email != "" || _Persona != "" || _Telefono != "";
941 
942  return lbFilaPlena;
943  }
944  }
945  }
946 
947 
951  public class Giros : ewManteTRel<Giros.Giro, Giros.Clave>
952  {
956  public override string _NombreManteTRel => "Giros";
957 
961  public Giros()
962  {
963  CrearEstructura();
964 
965  }
966 
970  public Giros(string tcCodigoCliente)
971  {
972  CrearEstructura();
973 
974  this._Claves._Cliente._Valor = tcCodigoCliente;
975  }
976 
977  private void CrearEstructura()
978  {
979  // Definir la base
980  this._DataBase = "Gestion";
981  this._Tabla = "Giro_cli";
982  this._Condicion = "";
983 
984  // Máscara para definir días de giro.
985  //
986  ewMascara loMascaraGiro = new ewMascara("999");
987  loMascaraGiro._Rango_Max = 999;
988  loMascaraGiro._Rango_Min = 0;
989 
990  ewMascara loMascaraPorcen = new ewMascara("999.99");
991  loMascaraPorcen._Rango_Max = 100.00M;
992  loMascaraPorcen._Rango_Min = 0.01M;
993 
994 
995  // Campo Cliente, no visible
996  //
997  this._AddCampoTRel("_Cliente", "Cliente", false, true, false);
998 
999  // Campo virtual Nº giro, no apunta a ningún campo de tabla, se numeran correlativamente los registrs 1,2,3 al hacer el
1000  // _Load() y si se borra un registro se renumera.
1001  //
1002  this._AddCampoTRel("_NumGiro", "", true, false, false, "Nº previsión", gridColumnsTypes.Número, loMascaraGiro);
1003 
1004  // Campo días de giro
1005  //
1006  ewCampoTRel _Def_Giros = this._AddCampoTRel("_Giro", "Giro", true, true, true, "Días de vencimiento", gridColumnsTypes.Número, loMascaraGiro);
1007  {
1008  _Def_Giros._PermiteDuplicados = false;
1009  }
1010 
1011  // Campo porcentaje de reparto.
1012  //
1013  this._AddCampoTRel("_Porcentaje", "Prcreparto", true, true, true, "% Reparto importe", gridColumnsTypes.Número, loMascaraPorcen);
1014 
1015  this._AddCampoTRel("_Linia", "Linea", false, true, false);
1016 
1017  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid"))
1018  this._AddCampoTRel("_Guid", "Guid", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1019 
1020  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid_exp"))
1021  this._AddCampoTRel("_Guid_Exp", "Guid_exp", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1022 
1023  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Importar"))
1024  this._AddCampoTRel("_Importar", "Importar", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1025 
1026  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Exportar"))
1027  this._AddCampoTRel("_Exportar", "Exportar", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1028 
1029  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_estado"))
1030  this._AddCampoTRel("_Com_estado", "Com_estado", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1031 
1032  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_fecha"))
1033  this._AddCampoTRel("_Com_fecha", "Com_fecha", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1034 
1035  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_ini"))
1036  this._AddCampoTRel("_Com_ini", "Com_ini", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1037 
1038  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Sucursal"))
1039  this._AddCampoTRel("_Sucursal", "Sucursal", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1040 
1041  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid_Id"))
1042  this._AddCampoTRel("_Guid_Id", "Guid_Id", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1043  }
1044 
1048  protected override void _Configurar_Grid()
1049  {
1050  base._Configurar_Grid();
1051 
1052  this._ManteGrid._DataSource_Row_New_Event += new objetos.UserControls.Mantegrid._DataSource_Row_New_Event_Handler(Giros_ManteGrid__DataSource_Row_New_Event);
1053  }
1054 
1060  void Giros_ManteGrid__DataSource_Row_New_Event(int tnInsertLinea)
1061  {
1062  int lnNext = 0;
1063  DataGridViewRow loRow;
1064  if (this._ManteGrid._Grid.Rows.Count > 1)
1065  {
1066  // Hay al menos 2 registros.
1067  //
1068  loRow = this._ManteGrid._Grid.Rows[this._ManteGrid._Grid.Rows.Count - 2];
1069  lnNext = Convert.ToInt16(loRow.Cells["_Giro"].Value) + 30;
1070 
1071  // Fiquem els valor dels giros que toca
1072  //
1073  this._CurrentItem._Giro = lnNext;
1074  }
1075  }
1076 
1080  public override void _Load()
1081  {
1082  base._Load();
1083  int nNumGiro = 0;
1084  foreach (Giro loGiro in this._Items)
1085  {
1086  nNumGiro++;
1087  loGiro._NumGiro = nNumGiro;
1088  }
1089 
1090  }
1091 
1097  protected override string CreateSQLTraspaso(string tcNextEjer)
1098  {
1099  StringBuilder loSQL = new StringBuilder();
1100 
1101  if (_Items.Count > 0)
1102  {
1103  loSQL.AppendLine($"DELETE FROM {DB.SQLDatabase(tcNextEjer, _Tabla)} WHERE CLIENTE = {DB.SQLString(_Claves._Cliente._Valor)};");
1104  _Items.ToList().ForEach(f => loSQL.AppendLine(GetQuery_SaveItem(f, tcNextEjer)));
1105  }
1106 
1107  return loSQL.ToString();
1108  }
1109 
1113  public class Giro : ILinTRel, ILineaGiro
1114  {
1115  private string _cCliente = "";
1119  public string _Cliente
1120  {
1121  get { return _cCliente; }
1122  set
1123  {
1124  if (value != _cCliente)
1125  {
1126  _cCliente = value;
1127  loParent._Exportar_Null();
1128  }
1129  }
1130  }
1131 
1132 
1136  public int _Giro
1137  {
1138  get { return _nGiro; }
1139  set
1140  {
1141  if (loParent != null && !loParent._bIsLoading)
1142  {
1143  //Bug 114187
1144  if (value != _nGiro)
1145  {
1146  if (loParent._Items.Where(g => g._Linia.ToString() + g._Giro.ToString() == _Linia.ToString() + value.ToString()).Count() > 0) // if (loParent.CamposTRel_Validar_Valor("_Giro", value, this))
1147  {
1148  FUNCTIONS._MessageBox("Ha introducido un valor que ya está asignado a otro registro.No se permiten valores duplicados en este campo.", "Verificar dato", MessageBoxButtons.OK, MessageBoxIcon.Stop);
1149  value = _nGiro;
1150  loParent._Refresh("_Giro");
1151  }
1152  }
1153  }
1154 
1155  if (value != _nGiro)
1156  {
1157  _nGiro = value;
1158  loParent._Exportar_Null();
1159  }
1160  }
1161  }
1162  private int _nGiro = 0;
1163 
1164 
1168  public int _Linia
1169  {
1170  get { return _nLinia; }
1171  set
1172  {
1173  if (value != _nLinia)
1174  {
1175  _nLinia = value;
1176  loParent._Exportar_Null();
1177  }
1178  }
1179  }
1180  private int _nLinia = 0;
1181 
1182 
1188  public int _NumGiro
1189  {
1190  get { return _nNumGiro; }
1191  set { _nNumGiro = value; }
1192  }
1193  private int _nNumGiro = 0;
1194 
1195 
1199  public decimal _Porcentaje
1200  {
1201  get { return _nPorcentaje; }
1202  set { _nPorcentaje = value; }
1203  }
1204  private decimal _nPorcentaje = 0.00M;
1205 
1206 
1210  public string _Guid_Exp
1211  {
1212  get { return _cGuid_Exp; }
1213  set { _cGuid_Exp = value; }
1214  }
1215  private string _cGuid_Exp = "";
1216 
1220  public string _Guid
1221  {
1222  get { return _cGuid; }
1223  set { _cGuid = value; }
1224  }
1225  private string _cGuid = "";
1226 
1230  public DateTime? _Importar
1231  {
1232  get { return _dImportar; }
1233  set { _dImportar = value; }
1234  }
1235  private DateTime? _dImportar;
1236 
1237 
1241  public DateTime? _Exportar
1242  {
1243  get { return _dExportar; }
1244  set { _dExportar = value; }
1245  }
1246  private DateTime? _dExportar;
1247 
1251  public int _Com_estado
1252  {
1253  get { return _nCom_estado; }
1254  set { _nCom_estado = value; }
1255  }
1256  private int _nCom_estado = 0;
1257 
1261  public DateTime _Com_fecha
1262  {
1263  get { return _dCom_fecha; }
1264  set { _dCom_fecha = value; }
1265  }
1266  private DateTime _dCom_fecha;
1267 
1271  public DateTime _Com_ini
1272  {
1273  get { return _dCom_ini; }
1274  set { _dCom_ini = value; }
1275  }
1276  private DateTime _dCom_ini;
1277 
1281  public string _Sucursal
1282  {
1283  get { return _cSucursal; }
1284  set { _cSucursal = value; }
1285  }
1286  private string _cSucursal = "";
1287 
1291  public string _Guid_Id
1292  {
1293  get
1294  {
1295  if (string.IsNullOrWhiteSpace(_cGuid_Id))
1296  {
1297  _cGuid_Id = Guid.NewGuid().ToString().ToUpper();
1298  }
1299  return _cGuid_Id;
1300  }
1301  set { _cGuid_Id = value; }
1302  }
1303  private string _cGuid_Id = "";
1304 
1308  public Giro()
1309  {
1310 
1311  }
1312 
1317  public bool Fila_Plena()
1318  {
1319  return _Giro >= 0;
1320  }
1321 
1322  private Giros loParent;
1326  public object _Parent
1327  {
1328  get
1329  {
1330  return loParent;
1331  }
1332  set
1333  {
1334  loParent = (Giros)value;
1335  }
1336  }
1337  }
1338 
1342  public class Clave : IClaves
1343  {
1347  public ClaveTRel _Cliente { get; set; }
1348 
1352  public ClaveTRel _Linia { get; set; }
1353 
1357  public Clave()
1358  {
1359  // Definim les propietats de cada una de les claus
1360  _Cliente = new ClaveTRel();
1361  _Cliente._EsFiltro = true; // Actuarà com a filtre per recuperar els registres
1362 
1363  _Linia = new ClaveTRel();
1364  _Linia._EsCampoLinea = true;
1365 
1366  // Per defecte, totes les ClaveTRel son EsClave = true
1367  }
1368  }
1369  }
1370 
1371 
1375  public class Vacaciones : ewManteTRel<Vacaciones.Vacacion, Vacaciones.Clave>
1376  {
1380  public override string _NombreManteTRel => "Vacaciones";
1381 
1385  public Vacaciones()
1386  {
1387  CrearEstructura();
1388  }
1389 
1393  public Vacaciones(string tcCodigoCliente)
1394  {
1395  CrearEstructura();
1396 
1397  this._Claves._Cliente._Valor = tcCodigoCliente;
1398  }
1399 
1400  private void CrearEstructura()
1401  {
1402  // Definir la base
1403  this._DataBase = "Gestion";
1404  this._Tabla = "Vaca_cli";
1405  this._Condicion = "";
1406 
1407  // Omplim els camps i relació de propietats
1408  this._AddCampoTRel("_Cliente", "Cliente", false, true, false);
1409  this._AddCampoTRel("_Inicio", "Inicio", true, true, true, "Inicio", gridColumnsTypes.TextoFormateado, "99/99");
1410  this._AddCampoTRel("_Final", "Final", true, true, true, "Final", gridColumnsTypes.TextoFormateado, "99/99");
1411  this._AddCampoTRel("_Linia", "Linea", false, true, false);
1412 
1413  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid"))
1414  this._AddCampoTRel("_Guid", "Guid", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1415 
1416  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Importar"))
1417  this._AddCampoTRel("_Importar", "Importar", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1418 
1419  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid_exp"))
1420  this._AddCampoTRel("_Guid_Exp", "Guid_exp", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1421 
1422  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Exportar"))
1423  this._AddCampoTRel("_Exportar", "Exportar", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1424 
1425  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_estado"))
1426  this._AddCampoTRel("_Com_estado", "Com_estado", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1427 
1428  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_fecha"))
1429  this._AddCampoTRel("_Com_fecha", "Com_fecha", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1430 
1431  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_ini"))
1432  this._AddCampoTRel("_Com_ini", "Com_ini", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1433 
1434  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Sucursal"))
1435  this._AddCampoTRel("_Sucursal", "Sucursal", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1436 
1437  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid_Id"))
1438  this._AddCampoTRel("_Guid_Id", "Guid_Id", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
1439  }
1440 
1444  protected override void _Configurar_Grid()
1445  {
1446  base._Configurar_Grid();
1447  this._ManteGrid._DataSource_Row_New_Event += new objetos.UserControls.Mantegrid._DataSource_Row_New_Event_Handler(Vacaciones_ManteGrid__DataSource_Row_New_Event);
1448  }
1449 
1450 
1455  void Vacaciones_ManteGrid__DataSource_Row_New_Event(int tnInsertLinea)
1456  {
1457  this._CurrentItem._Inicio = new string(' ', 5);
1458  this._CurrentItem._Final = new string(' ', 5);
1459  }
1460 
1464  public class Vacacion : ILinTRel
1465  {
1466  bool _Validad_Periodo(string tcInicio, string tcFinal)
1467  {
1468  bool llOk = true;
1469 
1470  if (!string.IsNullOrWhiteSpace(tcInicio) && !string.IsNullOrWhiteSpace(tcFinal) && tcInicio.Trim() != "/" && tcFinal.Trim() != "/" && tcInicio.Trim().Length == 5 && tcFinal.Trim().Length == 5)
1471  {
1472  int lnDiaIni = Convert.ToInt32(tcInicio.Substring(0, 2));
1473  int lnMesIni = Convert.ToInt32(tcInicio.Substring(3, 2));
1474 
1475  int lnDiaFin = Convert.ToInt32(tcFinal.Substring(0, 2));
1476  int lnMesFin = Convert.ToInt32(tcFinal.Substring(3, 2));
1477 
1478  if (lnDiaIni != 0 && lnDiaFin != 0 && lnMesIni != 0 && lnMesFin != 0)
1479  {
1480  if (lnMesIni > lnMesFin || (lnMesIni == lnMesFin && lnDiaIni > lnDiaFin))
1481  llOk = false;
1482  else if (!this._Validar_Dia_Mes(lnDiaIni, lnMesIni, lnDiaFin, lnMesFin)) //PE-104137: Validar el día y mes que sean correctos dentro del rango
1483  llOk = false;
1484  }
1485  }
1486  return llOk;
1487  }
1488 
1498  private bool _Validar_Dia_Mes(int tnDiaIni, int tnMesIni, int tnDiaFin, int tnMesFin)
1499  {
1500  int lnDiasMes = 0;
1501 
1502  if (tnMesIni > 12 || tnMesFin > 12) //Si hemos puesto más del mes 12 ya podemos salir
1503  return false;
1504 
1505  lnDiasMes = DateTime.DaysInMonth(DateTime.Today.Year, tnMesIni);
1506  if (lnDiasMes == 28) //Si estamos en febrero dejamos poner hasta 29 para que no varíe segun el año en que estamos
1507  lnDiasMes = 29;
1508 
1509  if (tnDiaIni > lnDiasMes)
1510  return false;
1511 
1512  lnDiasMes = DateTime.DaysInMonth(DateTime.Today.Year, tnMesFin);
1513  if (lnDiasMes == 28)
1514  lnDiasMes = 29;
1515 
1516  if (tnDiaFin > lnDiasMes)
1517  return false;
1518 
1519  return true;
1520  }
1521 
1522  private string _cCliente = "";
1526  public string _Cliente
1527  {
1528  get { return _cCliente; }
1529  set
1530  {
1531  if (value != _cCliente)
1532  {
1533  _cCliente = value;
1534  loParent._Exportar_Null();
1535  }
1536  }
1537  }
1538 
1539  private string _cInicio = "";
1543  public string _Inicio
1544  {
1545  get { return _cInicio; }
1546  set
1547  {
1548  if (value != _cInicio)
1549  {
1550  if (!string.IsNullOrWhiteSpace(value) && value.Trim() != "/" && value.Trim().Length != 5)
1551  {
1552  FUNCTIONS._MessageBox("La fecha inicial del periodo vacacional " + value.Trim() + " no tiene un formato correcto.", "Mantenimiento clientes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
1553  return;
1554  }
1555 
1556  bool llOk = this._Validad_Periodo(value, this._cFinal);
1557 
1558  if (llOk)
1559  {
1560  _cInicio = value;
1561  loParent._Exportar_Null();
1562  }
1563  else
1564  FUNCTIONS._MessageBox("La fecha introducida debe estar en un valor correcto por día y mes. Además, la fecha inicial del periodo vacacional no puede ser superior a la fecha final.", "Mantenimiento clientes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
1565  }
1566  }
1567  }
1568 
1569  private string _cFinal = "";
1573  public string _Final
1574  {
1575  get { return _cFinal; }
1576  set
1577  {
1578  if (!string.IsNullOrWhiteSpace(value) && value.Trim() != "/" && value.Trim().Length != 5)
1579  {
1580  FUNCTIONS._MessageBox("La fecha final del periodo vacacional " + value.Trim() + "no tiene un formato correcto.", "Mantenimiento clientes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
1581 
1582  return;
1583  }
1584 
1585  bool llOk = this._Validad_Periodo(this._cInicio, value);
1586 
1587  if (llOk)
1588  {
1589  _cFinal = value;
1590  loParent._Exportar_Null();
1591  }
1592  else
1593  FUNCTIONS._MessageBox("La fecha introducida debe estar en un valor correcto por día y mes. Además, la fecha final del periodo vacacional no puede ser inferior a la fecha inicial.", "Mantenimiento clientes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
1594  }
1595  }
1596 
1597  private int _nLinia = 0;
1601  public int _Linia
1602  {
1603  get { return _nLinia; }
1604  set
1605  {
1606  if (value != _nLinia)
1607  {
1608  _nLinia = value;
1609  loParent._Exportar_Null();
1610  }
1611  }
1612  }
1613 
1617  public string _Guid_Exp
1618  {
1619  get { return _cGuid_Exp; }
1620  set { _cGuid_Exp = value; }
1621  }
1622  private string _cGuid_Exp = "";
1623 
1627  public string _Guid
1628  {
1629  get { return _cGuid; }
1630  set { _cGuid = value; }
1631  }
1632  private string _cGuid = "";
1633 
1637  public DateTime? _Importar
1638  {
1639  get { return _dImportar; }
1640  set { _dImportar = value; }
1641  }
1642  private DateTime? _dImportar;
1643 
1644 
1648  public DateTime? _Exportar
1649  {
1650  get { return _dExportar; }
1651  set { _dExportar = value; }
1652  }
1653  private DateTime? _dExportar;
1654 
1658  public int _Com_estado
1659  {
1660  get { return _nCom_estado; }
1661  set { _nCom_estado = value; }
1662  }
1663  private int _nCom_estado = 0;
1664 
1668  public DateTime _Com_fecha
1669  {
1670  get { return _dCom_fecha; }
1671  set { _dCom_fecha = value; }
1672  }
1673  private DateTime _dCom_fecha;
1674 
1678  public DateTime _Com_ini
1679  {
1680  get { return _dCom_ini; }
1681  set { _dCom_ini = value; }
1682  }
1683  private DateTime _dCom_ini;
1684 
1688  public string _Sucursal
1689  {
1690  get { return _cSucursal; }
1691  set { _cSucursal = value; }
1692  }
1693  private string _cSucursal = "";
1694 
1698  public string _Guid_Id
1699  {
1700  get
1701  {
1702  if (string.IsNullOrWhiteSpace(_cGuid_Id))
1703  {
1704  _cGuid_Id = Guid.NewGuid().ToString().ToUpper();
1705  }
1706  return _cGuid_Id;
1707  }
1708  set { _cGuid_Id = value; }
1709  }
1710  private string _cGuid_Id = "";
1711 
1715  public Vacacion()
1716  {
1717 
1718  }
1719 
1724  public bool Fila_Plena()
1725  {
1726  return !string.IsNullOrWhiteSpace(_Inicio) && !string.IsNullOrWhiteSpace(_Final);
1727  }
1728 
1729  private Vacaciones loParent;
1733  public object _Parent
1734  {
1735  get
1736  {
1737  return loParent;
1738  }
1739  set
1740  {
1741  loParent = (Vacaciones)value;
1742  }
1743  }
1744  }
1745 
1749  public class Clave : IClaves
1750  {
1754  public ClaveTRel _Cliente { get; set; }
1755 
1759  public ClaveTRel _Linia { get; set; }
1760 
1764  public Clave()
1765  {
1766  // Definim les propietats de cada una de les claus
1767  _Cliente = new ClaveTRel();
1768  _Cliente._EsFiltro = true; // Actuarà com a filtre per recuperar els registres
1769 
1770  _Linia = new ClaveTRel();
1771  _Linia._EsCampoLinea = true;
1772 
1773  // Per defecte, totes les ClaveTRel son EsClave = true
1774  }
1775  }
1776  }
1777 
1778 
1782  public class Direcciones : ewManteTRel<Direcciones.Direccion, Direcciones.Clave>
1783  {
1784 
1785  bool lHera = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_hera"));
1786 
1790  public override string _NombreManteTRel => "Direcciones";
1791 
1795  public enum TiposDirecciones
1796  {
1800  [Description("")]
1801  SinDescripcion = 1, //PE102520 - s'ha posat el número com a EW
1802 
1806  [Description("Facturación")]
1807  Facturacion = 2,
1808 
1812  [Description("Envíos")]
1813  Envios = 3,
1814 
1818  [Description("Remesa SEPA")]
1819  RemesaCsb = 4,
1820 
1824  [Description("Envío de comunicados")]
1825  EnvioComunicados = 5
1826  }
1827 
1828 
1832  public Direcciones()
1833  {
1834  CrearEstructura();
1835  }
1836 
1840  public Direcciones(string tcCodigoCliente)
1841  {
1842  CrearEstructura();
1843 
1844  this._Claves._Cliente._Valor = tcCodigoCliente;
1845  }
1846 
1847  private void CrearEstructura()
1848  {
1849 
1850  // Definir la base
1851  this._DataBase = "Gestion";
1852  this._Tabla = "Env_cli";
1853  this._Condicion = "";
1854  this._Titulo_Browser = "Buscar dirección";
1855 
1856  // Definir el formulari associat
1857  this._FormManteTRelBaseType = typeof(sage.ew.cliente.Forms.frmDireccionesCliente);
1858 
1859  // Omplim els camps i relació de propietats
1860  this._AddCampoTRel("_Cliente", "Cliente", false, true, false);
1861 
1862  // En Hera el campo Linia es visible (pero no editable, como de costumbre)
1863  this._AddCampoTRel("_Linia", "Linea", this.lHera, true, false, "Linea");
1864 
1865 
1866  this._AddCampoTRel("_Direccion", "Direccion", true, true, true, "Dirección");
1867 
1868  // TODO, ojo Hera
1869  ewCampoTRel _Def_CodPos = this._AddCampoTRel("_CodPos", "Codpos", true, true, true, "C. Postal");
1870  {
1871  // Validacions
1872  _Def_CodPos._Validar_Dato_BaseDatos = "Gestion";
1873  _Def_CodPos._Validar_Dato_Tabla = "CodPos";
1874  _Def_CodPos._Validar_Dato_Clave = "Codigo";
1875  _Def_CodPos._Validar_Dato_Campos = "Poblacion,Provincia";
1876  _Def_CodPos._Validar_Dato_CampoTRel_Asignar = "_Poblacion,_Provincia";
1877  _Def_CodPos._Error_Validar_Dato = "El código postal indicado no existe.";
1878  // Configurar el browser
1879  _Def_CodPos._Browser = new sage.ew.botones.btBrowser();
1880  _Def_CodPos._Browser._Campos = "Codigo,Poblacion,Provincia,Linea";
1881  _Def_CodPos._Browser._Campo_Predet = "Poblacion";
1882  _Def_CodPos._Browser._Campos_No_Visibles = "Linea";
1883  _Def_CodPos._Browser._Clave = "codigo,linea,poblacion,provincia";
1884  _Def_CodPos._Browser._DataBase = "Gestion";
1885  _Def_CodPos._Browser._Tabla = "CodPos";
1886  _Def_CodPos._Browser._Titulo = "Listado de códigos postales";
1887  _Def_CodPos._Browser._Titulos_Campos = "Código,Población,Provincia";
1888  _Def_CodPos._Browser.NombreMantenimiento = "CODPOS";
1889 
1890 
1891  // Configurar el manteniment
1892  _Def_CodPos._Mante = new sage.ew.botones.btMante();
1893  _Def_CodPos._Mante._NombreManteNet = "CODPOS";
1894  }
1895 
1896  if (!this.lHera)
1897  {
1898  this._AddCampoTRel("_Poblacion", "Poblacion", true, true, true, "Población");
1899  }
1900  else
1901  {
1902  // Ocultamos el campo pero estará en el TREL por que lo actualizaremos a partir del código de municipio
1903  // Idem con _Provincia, que se añade un poco más abajo.
1904  ewCampoTRel _Def_Poblacion = this._AddCampoTRel("_PoblacERP", "Poblacerp", true, true, true, "Población");
1905  {
1906  // Validacions
1907  _Def_Poblacion._Validar_Dato_BaseDatos = "Comunes";
1908  _Def_Poblacion._Validar_Dato_Tabla = "Municipios";
1909  _Def_Poblacion._Validar_Dato_Clave = "Codigo";
1910  _Def_Poblacion._Validar_Dato_Campos = "Nombre";
1911  _Def_Poblacion._Validar_Dato_CampoTRel_Asignar = "_Poblacion";
1912  _Def_Poblacion._Error_Validar_Dato = "El código de población indicado no existe.";
1913 
1914  // Configurar el browser
1915  _Def_Poblacion._Browser = new sage.ew.botones.btBrowser();
1916  _Def_Poblacion._Browser._Campos = "Codigo,Nombre,Provincia";
1917  _Def_Poblacion._Browser._Campo_Predet = "Nombre";
1918  _Def_Poblacion._Browser._Clave = "Codigo";
1919  _Def_Poblacion._Browser._DataBase = "Comunes";
1920  _Def_Poblacion._Browser._Tabla = "Municipios";
1921  _Def_Poblacion._Browser._Titulo = "Listado de poblaciones";
1922  _Def_Poblacion._Browser._Titulos_Campos = "Código,Nombre,Provincia";
1923  }
1924  this._AddCampoTRel("_Poblacion", "Poblacion", true, true, false, "Nombre");
1925  }
1926 
1927  if (!this.lHera)
1928  {
1929  this._AddCampoTRel("_Provincia", "Provincia", true, true, true, "Provincia");
1930  }
1931  else
1932  {
1933  // Ocultamos el campo estará en el TREL por que lo actualizaremos a partir del código de provincia
1934 
1935  ewCampoTRel _Def_Provincia = this._AddCampoTRel("_ProvinERP", "Provinerp", true, true, true, "Provincia");
1936  {
1937  // Validacions
1938  _Def_Provincia._Validar_Dato_BaseDatos = "Comunes";
1939  _Def_Provincia._Validar_Dato_Tabla = "Provincias";
1940  _Def_Provincia._Validar_Dato_Clave = "Codigo";
1941  _Def_Provincia._Validar_Dato_Campos = "Nombre";
1942  _Def_Provincia._Validar_Dato_CampoTRel_Asignar = "_Provincia";
1943  _Def_Provincia._Error_Validar_Dato = "El código de provincia indicado no existe.";
1944 
1945  // Configurar el browser
1946  _Def_Provincia._Browser = new sage.ew.botones.btBrowser();
1947  _Def_Provincia._Browser._Campos = "Codigo,Nombre";
1948  _Def_Provincia._Browser._Campo_Predet = "Nombre";
1949  _Def_Provincia._Browser._Clave = "Codigo";
1950  _Def_Provincia._Browser._DataBase = "Comunes";
1951  _Def_Provincia._Browser._Tabla = "Provincias";
1952  _Def_Provincia._Browser._Titulo = "Listado de provincias";
1953  _Def_Provincia._Browser._Titulos_Campos = "Código,Nombre";
1954  }
1955  this._AddCampoTRel("_Provincia", "Provincia", true, true, false, "Nombre");
1956  }
1957 
1958  ewCampoTRel _Def_Pais = this._AddCampoTRel("_Pais", "Pais", true, true, true, "País");
1959  {
1960  // Validacions
1961  _Def_Pais._Validar_Dato_BaseDatos = "Comunes";
1962  _Def_Pais._Validar_Dato_Tabla = "Paises";
1963  _Def_Pais._Validar_Dato_Clave = "Codigo";
1964  _Def_Pais._Validar_Dato_Campos = "Nombre";
1965  _Def_Pais._Validar_Dato_CampoTRel_Asignar = "_NombrePais";
1966  _Def_Pais._Validar_Asignar_Cargando = true;
1967  _Def_Pais._Error_Validar_Dato = "El código de país indicado no existe.";
1968 
1969  // Configurar el browser
1970  _Def_Pais._Browser = new sage.ew.botones.btBrowser();
1971  _Def_Pais._Browser._Campos = "Codigo,Nombre";
1972  _Def_Pais._Browser._Campo_Predet = "Nombre";
1973  _Def_Pais._Browser._Clave = "Codigo";
1974  _Def_Pais._Browser._DataBase = "Comunes";
1975  _Def_Pais._Browser._Tabla = "Paises";
1976  _Def_Pais._Browser._Titulo = "Listado de países";
1977  _Def_Pais._Browser._Titulos_Campos = "Código,Nombre";
1978  _Def_Pais._Browser.NombreMantenimiento = "PAISES";
1979 
1980  // Configurar el manteniment
1981  _Def_Pais._Mante = new sage.ew.botones.btMante();
1982  _Def_Pais._Mante._NombreManteNet = "PAISES";
1983  }
1984 
1985  this._AddCampoTRel("_NombrePais", "", true, false, false, "Nombre país");
1986 
1987  this._AddCampoTRel("_Nombre", "Nombre", true, true, true, "Persona");
1988 
1989  this._AddCampoTRel("_Telefono", "Telefono", true, true, true, "Teléfono");
1990 
1991  this._AddCampoTRel("_Fax", "Fax", true, true, true, "Fax");
1992 
1993  //Tipo de direccion
1994  List<object> lstLista = new List<object>();
1995  var values = Enum.GetValues(typeof(TiposDirecciones)).Cast<TiposDirecciones>();
1996  foreach (TiposDirecciones item in values)
1997  lstLista.Add((object)sage.ew.functions.FUNCTIONS._GetEnumDescription(item));
1998 
1999  //Campo real de la BD que ocultamos pero actualizamos
2000  this._AddCampoTRel("_Tipo", "Tipo", false, true, false);
2001  //Campo visible solamente. Como tal no se actualiza, pero el Set de la propiedad actualiza el valor de la propiedad _Tipo
2002  this._AddCampoTRel("_Tipo2", "", true, false, true, "Tipo", gridColumnsTypes.Combo, toComboValues: lstLista);
2003 
2004  this._AddCampoTRel("_Horario", "Horario", true, true, true, "Horario");
2005 
2006  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid"))
2007  this._AddCampoTRel("_Guid", "Guid", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2008 
2009  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid_Exp"))
2010  this._AddCampoTRel("_Guid_Exp", "Guid_Exp", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2011 
2012  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Importar"))
2013  this._AddCampoTRel("_Importar", "Importar", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2014 
2015  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Exportar"))
2016  this._AddCampoTRel("_Exportar", "Exportar", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2017 
2018  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_estado"))
2019  this._AddCampoTRel("_Com_estado", "Com_estado", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2020 
2021  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_fecha"))
2022  this._AddCampoTRel("_Com_fecha", "Com_fecha", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2023 
2024  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_ini"))
2025  this._AddCampoTRel("_Com_ini", "Com_ini", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2026 
2027  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Sucursal"))
2028  this._AddCampoTRel("_Sucursal", "Sucursal", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2029 
2030  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid_id"))
2031  this._AddCampoTRel("_Guid_Id", "Guid_id", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2032 
2033  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Created"))
2034  this._AddCampoTRel("_Created", "Created", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2035 
2036  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Modified"))
2037  this._AddCampoTRel("_Modified", "Modified", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2038  }
2039 
2043  protected override void _Configurar_Grid()
2044  {
2045  base._Configurar_Grid();
2046  if (this._ManteGrid != null)
2047  {
2048  this._ManteGrid._DataSource_Row_New_Event += new objetos.UserControls.Mantegrid._DataSource_Row_New_Event_Handler(Direcciones_ManteGrid__DataSource_Row_New_Event);
2049 
2050  this._ManteGrid._Grid._FiltrarPorColumna = true;
2051  }
2052  }
2053 
2054 
2059  void Direcciones_ManteGrid__DataSource_Row_New_Event(int tnInsertLinea)
2060  {
2061  this._CurrentItem._CodPos = new string(' ', 5);
2062  this._CurrentItem._Direccion = new string(' ', 80);
2063  this._CurrentItem._Fax = new string(' ', 15);
2064  this._CurrentItem._Horario = new string(' ', 30);
2065  this._CurrentItem._Nombre = new string(' ', 80);
2066  this._CurrentItem._Pais = new string(' ', 3);
2067  this._CurrentItem._PoblacERP = new string(' ', 10);
2068  this._CurrentItem._Poblacion = new string(' ', 30);
2069  this._CurrentItem._Provincia = new string(' ', 30);
2070  this._CurrentItem._ProvinERP = new string(' ', 10);
2071  this._CurrentItem._Telefono = new string(' ', 15);
2072  this._CurrentItem._Tipo = 1; //PE102520
2073  }
2074 
2079  public class Clave : IClaves
2080  {
2084  public ClaveTRel _Cliente { get; set; }
2085 
2089  public ClaveTRel _Linia { get; set; }
2090 
2094  public Clave()
2095  {
2096  // Definim les propietats de cada una de les claus
2097  _Cliente = new ClaveTRel();
2098  _Cliente._EsFiltro = true; // Actuarà com a filtre per recuperar els registres
2099 
2100  _Linia = new ClaveTRel();
2101  _Linia._EsCampoLinea = true;
2102 
2103  // i valors per defecte
2104  _Cliente._Valor = "";
2105  _Linia._Valor = 0;
2106 
2107  // Per defecte, totes les ClaveTRel son EsClave = true
2108  }
2109  }
2110 
2114  public class Direccion : ILinTRel
2115  {
2116  private string _cCliente = "";
2120  public string _Cliente
2121  {
2122  get { return _cCliente; }
2123  set
2124  {
2125  if (value != _cCliente)
2126  {
2127  _cCliente = value;
2128  loParent._Exportar_Null();
2129  }
2130  }
2131  }
2132 
2133  private string _cNombre = "";
2137  public string _Nombre
2138  {
2139  get { return _cNombre; }
2140  set
2141  {
2142  if (value != _cNombre)
2143  {
2144  _cNombre = value;
2145  loParent._Exportar_Null();
2146  }
2147  }
2148  }
2149 
2150  private string _cDireccion = "";
2154  public string _Direccion
2155  {
2156  get { return _cDireccion; }
2157  set
2158  {
2159  if (value != _cDireccion)
2160  {
2161  _cDireccion = value;
2162  loParent._Exportar_Null();
2163  }
2164  }
2165  }
2166 
2167  private string _cCodPos = "";
2171  public string _CodPos
2172  {
2173  get { return _cCodPos; }
2174  set
2175  {
2176  if (loParent != null && !loParent._bIsLoading) // PE-99815 en la carga no hemos de validar nada
2177  {
2178  if (_cCodPos != value)
2179  {
2180  if (loParent.CamposTRel_Validar_Valor("_CodPos", value, this))
2181  {
2182  value = _cCodPos;
2183  loParent._Refresh("_CodPos");
2184  }
2185  }
2186  }
2187 
2188  if (_cCodPos != value)
2189  {
2190  _cCodPos = value;
2191  loParent._Exportar_Null();
2192  }
2193  }
2194  }
2195 
2196  private string _cPoblacion = "";
2200  public string _Poblacion
2201  {
2202  get { return _cPoblacion; }
2203  set
2204  {
2205  if (value != _cPoblacion)
2206  {
2207  _cPoblacion = value;
2208  loParent._Exportar_Null();
2209  }
2210  }
2211  }
2212 
2213  private string _cProvincia = "";
2217  public string _Provincia
2218  {
2219  get { return _cProvincia; }
2220  set
2221  {
2222  if (value != _cProvincia)
2223  {
2224  _cProvincia = value;
2225  loParent._Exportar_Null();
2226  }
2227  }
2228  }
2229 
2230 
2231  private string _cPoblacERP = "";
2235  public string _PoblacERP
2236  {
2237  get { return _cPoblacERP; }
2238  set
2239  {
2240  if (loParent != null && !loParent._bIsLoading) // PE-99815 en la carga no hemos de validar nada
2241  {
2242  if (_cPoblacERP != value)
2243  {
2244  if (loParent.CamposTRel_Validar_Valor("_PoblacERP", value, this))
2245  {
2246  value = _cPoblacERP;
2247  loParent._Refresh("_PoblacERP");
2248  }
2249  }
2250  }
2251 
2252  if (_cPoblacERP != value)
2253  {
2254  _cPoblacERP = value;
2255  loParent._Exportar_Null();
2256  }
2257  }
2258  }
2259 
2260  private string _cProvinERP = "";
2264  public string _ProvinERP
2265  {
2266  get { return _cProvinERP; }
2267  set
2268  {
2269  if (loParent != null && !loParent._bIsLoading) // PE-99815 en la carga no hemos de validar nada
2270  {
2271  if (_cProvinERP != value)
2272  {
2273  if (loParent.CamposTRel_Validar_Valor("_ProvinERP", value, this))
2274  {
2275  value = _cProvinERP;
2276  loParent._Refresh("_PoblacERP");
2277  }
2278  }
2279  }
2280 
2281  if (_cProvinERP != value)
2282  {
2283  _cProvinERP = value;
2284  loParent._Exportar_Null();
2285  }
2286  }
2287  }
2288 
2289  private string _cPais = "";
2293  public string _Pais
2294  {
2295  get { return _cPais; }
2296  set
2297  {
2298  if (_cPais != value)
2299  {
2300  if (!string.IsNullOrWhiteSpace(value))
2301  {
2302  value = value.Trim().PadLeft(3, '0');
2303  if (loParent.CamposTRel_Validar_Valor("_Pais", value, this))
2304  {
2305  value = _cPais;
2306  loParent._Refresh("_Pais");
2307  }
2308  }
2309  }
2310 
2311  if (_cPais != value)
2312  {
2313  _cPais = value;
2314  loParent._Exportar_Null();
2315  }
2316  }
2317  }
2318 
2319  private string _cNombrePais = "";
2323  public string _NombrePais
2324  {
2325  get { return _cNombrePais; }
2326  set
2327  {
2328  if (_cNombrePais != value)
2329  {
2330  _cNombrePais = value;
2331  }
2332  }
2333  }
2334 
2335  private string _cTelefono = "";
2339  public string _Telefono
2340  {
2341  get { return _cTelefono; }
2342  set
2343  {
2344  if (value != _cTelefono)
2345  {
2346  _cTelefono = value;
2347  loParent._Exportar_Null();
2348  }
2349  }
2350  }
2351 
2352 
2353  private string _cFax = "";
2357  public string _Fax
2358  {
2359  get { return _cFax; }
2360  set
2361  {
2362  if (value != _cFax)
2363  {
2364  _cFax = value;
2365  loParent._Exportar_Null();
2366  }
2367  }
2368  }
2369 
2370 
2371  private string _cHorario = "";
2375  public string _Horario
2376  {
2377  get { return _cHorario; }
2378  set
2379  {
2380  if (value != _cHorario)
2381  {
2382  _cHorario = value;
2383  loParent._Exportar_Null();
2384  }
2385  }
2386  }
2387 
2388  private int _cTipo = 1; //PE102520 valor per defecte 1
2392  public int _Tipo
2393  {
2394  get { return _cTipo; }
2395  set { _cTipo = value; }
2396  }
2397 
2402  public string _Tipo2
2403  {
2404  get
2405  {
2406  if (Enum.IsDefined(typeof(TiposDirecciones), this._Tipo))
2407  return sage.ew.functions.FUNCTIONS._GetEnumDescription((TiposDirecciones)this._Tipo);
2408  return "";
2409  }
2410  set
2411  {
2412  if (value == null)
2413  value = "";
2414  TiposDirecciones loTmpTipo = sage.ew.functions.FUNCTIONS._GetEnumFromDescription<TiposDirecciones>(value, TiposDirecciones.SinDescripcion);
2415  this._cTipo = (int)loTmpTipo;
2416  }
2417  }
2418 
2419 
2420  private int _nLinia = 0;
2424  public int _Linia
2425  {
2426  get { return _nLinia; }
2427  set
2428  {
2429  if (value != _nLinia)
2430  {
2431  _nLinia = value;
2432  loParent._Exportar_Null();
2433  }
2434  }
2435  }
2436 
2440  public string _Guid_Exp
2441  {
2442  get { return _cGuid_Exp; }
2443  set { _cGuid_Exp = value; }
2444  }
2445  private string _cGuid_Exp = "";
2446 
2450  public string _Guid
2451  {
2452  get { return _cGuid; }
2453  set { _cGuid = value; }
2454  }
2455  private string _cGuid = "";
2456 
2460  public DateTime? _Importar
2461  {
2462  get { return _dImportar; }
2463  set { _dImportar = value; }
2464  }
2465  private DateTime? _dImportar;
2466 
2467 
2471  public DateTime? _Exportar
2472  {
2473  get { return _dExportar; }
2474  set { _dExportar = value; }
2475  }
2476  private DateTime? _dExportar;
2477 
2481  public int _Com_estado
2482  {
2483  get { return _nCom_estado; }
2484  set { _nCom_estado = value; }
2485  }
2486  private int _nCom_estado = 0;
2487 
2491  public DateTime _Com_fecha
2492  {
2493  get { return _dCom_fecha; }
2494  set { _dCom_fecha = value; }
2495  }
2496  private DateTime _dCom_fecha;
2497 
2501  public DateTime _Com_ini
2502  {
2503  get { return _dCom_ini; }
2504  set { _dCom_ini = value; }
2505  }
2506  private DateTime _dCom_ini;
2507 
2511  public string _Sucursal
2512  {
2513  get { return _cSucursal; }
2514  set { _cSucursal = value; }
2515  }
2516  private string _cSucursal = "";
2517 
2521  public string _Guid_Id
2522  {
2523  get
2524  {
2525  if (string.IsNullOrWhiteSpace(_cGuid_Id))
2526  {
2527  _cGuid_Id = Guid.NewGuid().ToString().ToUpper();
2528  }
2529  return _cGuid_Id;
2530  }
2531  set { _cGuid_Id = value; }
2532  }
2533  private string _cGuid_Id = "";
2534 
2538  public DateTime _Created
2539  {
2540  get
2541  {
2542  if (_dCreated == DateTime.MinValue)
2543  {
2544  _dCreated = DateTime.Now;
2545  }
2546  return _dCreated;
2547  }
2548  set { _dCreated = value; }
2549  }
2550  private DateTime _dCreated;
2551 
2555  public DateTime? _Modified
2556  {
2557  get
2558  {
2559  return _dModified;
2560  }
2561  set { _dModified = value; }
2562  }
2563  private DateTime? _dModified = null;
2564 
2565 
2566  private Direcciones loParent;
2570  public object _Parent
2571  {
2572  get
2573  {
2574  return loParent;
2575  }
2576  set
2577  {
2578  loParent = (Direcciones)value;
2579  }
2580  }
2581 
2585  public Direccion()
2586  {
2587 
2588  }
2589 
2594  public bool Fila_Plena()
2595  {
2596  bool lbFilaPlena;
2597 
2598  lbFilaPlena = !(string.IsNullOrWhiteSpace(_Direccion) && string.IsNullOrWhiteSpace(_CodPos) && string.IsNullOrWhiteSpace(_Poblacion) && string.IsNullOrWhiteSpace(_Provincia));
2599 
2600  return lbFilaPlena;
2601  }
2602  }
2603  }
2604 
2605 
2609  public class Descuentos : ewManteTRel<Descuentos.Descuento, Descuentos.Clave>
2610  {
2614  public override string _NombreManteTRel => "Descuentos";
2615 
2619  public Descuentos()
2620  {
2621  CrearEstructura();
2622  }
2623 
2627  public Descuentos(string tcCodigoCliente)
2628  {
2629  CrearEstructura();
2630 
2631  this._Claves._Cliente._Valor = tcCodigoCliente;
2632  }
2633 
2641  public override bool _TraspasarSiguienteEjercicio(TipoExecute toTipo, string tcEjerAct, string tcNextEjer)
2642  {
2643  string lcCadena;
2644 
2645  if (_ewMantePrincipal is ewMante)
2646  {
2647  lcCadena = $"Los descuentos segmentados no se traspasarán al siguiente ejercicio.";
2648  _ewMantePrincipal._ShowMessageValidacionTrapaso(lcCadena, tcNextEjer, _ewMantePrincipal._IsNew || _ewMantePrincipal._Estado == _EstadosMantenimiento.EntrandoNuevo);
2649  }
2650 
2651  return false;
2652  }
2653 
2660  protected override bool ConsultaTraspaso(CambiosTRel toCambios, string tcNextEjer)
2661  {
2662  return true;
2663  }
2664 
2669  public override void _Load()
2670  {
2671  base._Load();
2672 
2673  this._Actualizar_Definicion_Todos_Registros();
2674  }
2675 
2680  {
2681  string lcDefinicion = "";
2682 
2683  foreach (Descuento loDto in this._Items)
2684  {
2685  if (!string.IsNullOrWhiteSpace(loDto._Articulo) ||
2686  !string.IsNullOrWhiteSpace(loDto._Marca) ||
2687  !string.IsNullOrWhiteSpace(loDto._Familia) ||
2688  !string.IsNullOrWhiteSpace(loDto._Subfamilia))
2689  {
2690  lcDefinicion = loDto._Obtener_Definicion_Registro_Descuen();
2691  loDto._Definicion = lcDefinicion;
2692  }
2693  }
2694  }
2695 
2696  private void CrearEstructura()
2697  {
2698  bool llTalCol = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_color"));
2699  bool llHera = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_hera"));
2700 
2701  // Definir la base
2702  this._DataBase = "Gestion";
2703  this._Tabla = "Descuen";
2704  this._Condicion = "";
2705 
2706  // Omplim els camps i relació de propietats
2707  this._AddCampoTRel("_Cliente", "Cliente", false, true, false);
2708 
2709  ewCampoTRel _Def_Articulo = this._AddCampoTRel("_Articulo", "Articulo", true, true, true, "Artículo");
2710  {
2711  // Validacions
2712  _Def_Articulo._Validar_Dato_BaseDatos = "Gestion";
2713  _Def_Articulo._Validar_Dato_Tabla = "Articulo";
2714  _Def_Articulo._Validar_Dato_Clave = "Codigo";
2715  _Def_Articulo._Validar_Dato_Campos = "Nombre";
2716  _Def_Articulo._Validar_Dato_CampoTRel_Asignar = "_Definicion";
2717  _Def_Articulo._Validar_Asignar_Cargando = true;
2718  _Def_Articulo._Error_Validar_Dato = "El código de artículo indicado no existe.";
2719 
2720  // Configurar el browser
2721  _Def_Articulo._Browser = new sage.ew.botones.btBrowser();
2722  _Def_Articulo._Browser._Campos = "Codigo,Nombre";
2723  _Def_Articulo._Browser._Campo_Predet = "Nombre";
2724  _Def_Articulo._Browser._Clave = "Codigo";
2725  _Def_Articulo._Browser._DataBase = "Gestion";
2726  _Def_Articulo._Browser._Tabla = "Articulo";
2727  _Def_Articulo._Browser._Titulo = "Listado de artículos";
2728  _Def_Articulo._Browser._Titulos_Campos = "Código,Nombre";
2729 
2730  _Def_Articulo._Browser.NombreMantenimiento = "ARTICULO"; // Bug 124324
2731 
2732  // Configurar el manteniment
2733  _Def_Articulo._Mante = new sage.ew.botones.btMante();
2734  _Def_Articulo._Mante._NombreManteNet = "ARTICULO";
2735  }
2736 
2737  // TODO Habrá que validar que el código introducido exista para el artículo, y que solo permita
2738  // editarlo caso de que haya artículo declarado en la linia.
2739  ewCampoTRel _Def_Talla = this._AddCampoTRel("_Talla", "Talla", llTalCol, true, llTalCol, "Talla");
2740  {
2741  // Validacions
2742  _Def_Talla._Validar_Dato_BaseDatos = "Comunes";
2743  _Def_Talla._Validar_Dato_Tabla = "Tallas";
2744  _Def_Talla._Validar_Dato_Clave = "Codigo";
2745  _Def_Talla._Validar_Dato_Campos = "Nombre";
2746  _Def_Talla._Error_Validar_Dato = "El código de talla indicado no existe.";
2747 
2748  // Configurar el browser
2749  _Def_Talla._Browser = new sage.ew.botones.btBrowser();
2750  _Def_Talla._Browser._Campos = "Codigo,Nombre";
2751  _Def_Talla._Browser._Campo_Predet = "Nombre";
2752  _Def_Talla._Browser._Clave = "Codigo";
2753  _Def_Talla._Browser._DataBase = "Comunes";
2754  _Def_Talla._Browser._Tabla = "Tallas";
2755  _Def_Talla._Browser._Titulo = "Listado de tallas";
2756  _Def_Talla._Browser._Titulos_Campos = "Código,Nombre";
2757  _Def_Talla._Browser.NombreMantenimiento = "TALLAS"; // Bug 124324
2758 
2759  // Configurar el manteniment
2760  _Def_Talla._Mante = new sage.ew.botones.btMante();
2761  _Def_Talla._Mante._NombreManteNet = "TALLAS";
2762  }
2763 
2764  // TODO, habrá que validar que el código introducido exista para el artículo, y que solo permita
2765  // editarlo caso de que haya artículo declarado en la linia.
2766  ewCampoTRel _Def_Color = this._AddCampoTRel("_Color", "Color", llTalCol, true, llTalCol, "Color");
2767  {
2768  // Validacions
2769  _Def_Color._Validar_Dato_BaseDatos = "Comunes";
2770  _Def_Color._Validar_Dato_Tabla = "Colores";
2771  _Def_Color._Validar_Dato_Clave = "Codigo";
2772  _Def_Color._Validar_Dato_Campos = "Nombre";
2773  _Def_Color._Error_Validar_Dato = "El código de color indicado no existe.";
2774 
2775  // Configurar el browser
2776  _Def_Color._Browser = new sage.ew.botones.btBrowser();
2777  _Def_Color._Browser._Campos = "Codigo,Nombre";
2778  _Def_Color._Browser._Campo_Predet = "Nombre";
2779  _Def_Color._Browser._Clave = "Codigo";
2780  _Def_Color._Browser._DataBase = "Comunes";
2781  _Def_Color._Browser._Tabla = "Colores";
2782  _Def_Color._Browser._Titulo = "Listado de colores";
2783  _Def_Color._Browser._Titulos_Campos = "Código,Nombre";
2784  _Def_Color._Browser.NombreMantenimiento = "COLORES"; // Bug 124324
2785 
2786  // Configurar el manteniment
2787  _Def_Color._Mante = new sage.ew.botones.btMante();
2788  _Def_Color._Mante._NombreManteNet = "COLORES";
2789  }
2790 
2791 
2792  ewCampoTRel _Def_Marca = this._AddCampoTRel("_Marca", "Marca", !llHera, true, !llHera, "Marca");
2793  {
2794  // Validacions
2795  _Def_Marca._Validar_Dato_BaseDatos = "Gestion";
2796  _Def_Marca._Validar_Dato_Tabla = "Marcas";
2797  _Def_Marca._Validar_Dato_Clave = "Codigo";
2798  _Def_Marca._Validar_Dato_Campos = "Nombre";
2799  _Def_Marca._Validar_Dato_CampoTRel_Asignar = "_Definicion";
2800  _Def_Marca._Validar_Asignar_Cargando = true;
2801  _Def_Marca._Error_Validar_Dato = "El código de marca indicado no existe.";
2802 
2803  // Configurar el browser
2804  _Def_Marca._Browser = new sage.ew.botones.btBrowser();
2805  _Def_Marca._Browser._Campos = "Codigo,Nombre";
2806  _Def_Marca._Browser._Campo_Predet = "Nombre";
2807  _Def_Marca._Browser._Clave = "Codigo";
2808  _Def_Marca._Browser._DataBase = "Gestion";
2809  _Def_Marca._Browser._Tabla = "Marcas";
2810  _Def_Marca._Browser._Titulo = "Listado de marcas";
2811  _Def_Marca._Browser._Titulos_Campos = "Código,Nombre";
2812  _Def_Marca._Browser.NombreMantenimiento = "MARCAS"; // Bug 124324
2813 
2814  // Configurar el manteniment
2815  _Def_Marca._Mante = new sage.ew.botones.btMante();
2816  _Def_Marca._Mante._NombreManteNet = "MARCAS";
2817  }
2818 
2819  ewCampoTRel _Def_Familia = this._AddCampoTRel("_Familia", "Familia", true, true, true, "Familia");
2820  {
2821  // Validacions
2822  _Def_Familia._Validar_Dato_BaseDatos = "Gestion";
2823  _Def_Familia._Validar_Dato_Tabla = "Familias";
2824  _Def_Familia._Validar_Dato_Clave = "Codigo";
2825  _Def_Familia._Validar_Dato_Campos = "Nombre";
2826  _Def_Familia._Validar_Dato_CampoTRel_Asignar = "_Definicion";
2827  _Def_Familia._Validar_Asignar_Cargando = true;
2828  _Def_Familia._Error_Validar_Dato = "El código de familia indicado no existe.";
2829 
2830 
2831  // Configurar el browser
2832  _Def_Familia._Browser = new sage.ew.botones.btBrowser();
2833  _Def_Familia._Browser._Campos = "Codigo,Nombre";
2834  _Def_Familia._Browser._Campo_Predet = "Nombre";
2835  _Def_Familia._Browser._Clave = "Codigo";
2836  _Def_Familia._Browser._DataBase = "Gestion";
2837  _Def_Familia._Browser._Tabla = "Familias";
2838  _Def_Familia._Browser._Titulo = "Listado de familias";
2839  _Def_Familia._Browser._Titulos_Campos = "Código,Nombre";
2840  _Def_Familia._Browser.NombreMantenimiento = "FAMILIAS"; // Bug 124324
2841 
2842  // Configurar el manteniment
2843  _Def_Familia._Mante = new sage.ew.botones.btMante();
2844  _Def_Familia._Mante._NombreManteNet = "FAMILIAS";
2845  }
2846 
2847  ewCampoTRel _Def_SubFamilia = this._AddCampoTRel("_Subfamilia", "Subfamilia", true, true, true, "Subfamilia");
2848  {
2849  // Validacions
2850  _Def_SubFamilia._Validar_Dato_BaseDatos = "Gestion";
2851  _Def_SubFamilia._Validar_Dato_Tabla = "Subfam";
2852  _Def_SubFamilia._Validar_Dato_Clave = "Codigo";
2853  _Def_SubFamilia._Validar_Dato_Campos = "Nombre";
2854  _Def_SubFamilia._Validar_Dato_CampoTRel_Asignar = "_Definicion";
2855  _Def_SubFamilia._Validar_Asignar_Cargando = true;
2856  _Def_SubFamilia._Error_Validar_Dato = "El código de subfamilia indicado no existe.";
2857 
2858 
2859  // Configurar el browser
2860  _Def_SubFamilia._Browser = new sage.ew.botones.btBrowser();
2861  _Def_SubFamilia._Browser._Campos = "Codigo,Nombre";
2862  _Def_SubFamilia._Browser._Campo_Predet = "Nombre";
2863  _Def_SubFamilia._Browser._Clave = "Codigo";
2864  _Def_SubFamilia._Browser._DataBase = "Gestion";
2865  _Def_SubFamilia._Browser._Tabla = "Subfam";
2866  _Def_SubFamilia._Browser._Titulo = "Listado de subfamilias";
2867  _Def_SubFamilia._Browser._Titulos_Campos = "Código,Nombre";
2868  _Def_SubFamilia._Browser.NombreMantenimiento = "SUBFAMI"; // Bug 124324
2869 
2870  // Configurar el manteniment
2871  _Def_SubFamilia._Mante = new sage.ew.botones.btMante();
2872  _Def_SubFamilia._Mante._NombreManteNet = "SUBFAMI";
2873  }
2874 
2875 
2876  // TODO, ojo que es un campo virtual, no hay campo respectivo en la BD.
2877  this._AddCampoTRel("_Definicion", "", !llHera, false, false, "Definición");
2878 
2879  //Task 113401 Máscara máxima
2880  ewMascara loDivisaMascaraPrecio = new ewMascara();
2881  ewMascara loDivisaMascaraImporte = new ewMascara();
2882  Divisa._obtenerMascarasMaximas(out loDivisaMascaraPrecio, out loDivisaMascaraImporte);
2883 
2884 
2885 
2886  this._AddCampoTRel("_Pvp", "Pvp", !llHera, true, !llHera, "PVP", gridColumnsTypes.Número, loDivisaMascaraPrecio);
2887 
2888  DataTable loDivisas = Divisa._Monedas();
2889 
2890  List<object> lstLista = new List<object>();
2891  foreach (DataRow item in loDivisas.Rows)
2892  lstLista.Add(item["codigo"].ToString() + "|" + item["nombre"].ToString());
2893 
2894  FUNCTIONS._DisposeDatatable(loDivisas);
2895 
2896  ewCampoTRel _Def_Divisa = this._AddCampoTRel("_Moneda", "Moneda", DataGridViewAutoSizeColumnMode.DisplayedCells, true, true, true, "Divisa", teTipoColumna: gridColumnsTypes.Combo, toComboValues: lstLista);
2897  //Configuramos los parametros de divisa ( si el campo es de tipo combo, se añadirá evento para actualizar los datos al modificar el mante)
2898  FUNCTIONS.ConfigurarColumnaTRelDivisa(_Def_Divisa, this);
2899 
2900  this._AddCampoTRel("_Dto1", "Dto1", true, true, true, "% Dto. 1", gridColumnsTypes.Número, new ewMascara(EW_GLOBAL._GetMascara(KeyDiccionarioMascara.wc_tpc).ToString()));
2901 
2902  this._AddCampoTRel("_Dto2", "Dto2", true, true, true, "% Dto. 2", gridColumnsTypes.Número, new ewMascara(EW_GLOBAL._GetMascara(KeyDiccionarioMascara.wc_tpc).ToString()));
2903 
2904  this._AddCampoTRel("_Unimin", "Uni_min", ewCampoTRel.Visible.Si, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.Si, "Uni. Min.", gridColumnsTypes.Número, new ewMascara(EW_GLOBAL._GetMascara(KeyDiccionarioMascara.wc_unidades).ToString()));
2905 
2906  this._AddCampoTRel("_Unimax", "Uni_max", ewCampoTRel.Visible.Si, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.Si, "Uni. Max.", gridColumnsTypes.Número, new ewMascara(EW_GLOBAL._GetMascara(KeyDiccionarioMascara.wc_unidades).ToString()));
2907 
2908  this._AddCampoTRel("_Fecha_ini", "Fecha_In", ewCampoTRel.Visible.Si, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.Si, "Fecha inicial", gridColumnsTypes.Fecha);
2909 
2910  this._AddCampoTRel("_Fecha_fin", "Fecha_Fin", ewCampoTRel.Visible.Si, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.Si, "Fecha final", gridColumnsTypes.Fecha);
2911 
2912  this._AddCampoTRel("_Linia", "Linia", false, true, false);
2913 
2914  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid"))
2915  this._AddCampoTRel("_Guid", "Guid", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2916 
2917  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid_exp"))
2918  this._AddCampoTRel("_Guid_Exp", "Guid_exp", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2919 
2920  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Importar"))
2921  this._AddCampoTRel("_Importar", "Importar", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2922 
2923  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Exportar"))
2924  this._AddCampoTRel("_Exportar", "Exportar", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2925 
2926  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_estado"))
2927  this._AddCampoTRel("_Com_estado", "Com_estado", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2928 
2929  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_fecha"))
2930  this._AddCampoTRel("_Com_fecha", "Com_fecha", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2931 
2932  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Com_ini"))
2933  this._AddCampoTRel("_Com_ini", "Com_ini", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2934 
2935  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Sucursal"))
2936  this._AddCampoTRel("_Sucursal", "Sucursal", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2937 
2938  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid_id"))
2939  this._AddCampoTRel("_Guid_Id", "Guid_id", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
2940  }
2941 
2945  protected override void _Configurar_Grid()
2946  {
2947  base._Configurar_Grid();
2948  this._ManteGrid._DataSource_Row_New_Event += new objetos.UserControls.Mantegrid._DataSource_Row_New_Event_Handler(Descuen_ManteGrid__DataSource_Row_New_Event);
2949  }
2950 
2951 
2956  void Descuen_ManteGrid__DataSource_Row_New_Event(int tnInsertLinea)
2957  {
2958  int lnMarca = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_marcas));
2959  int lnFamilia = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_familias));
2960  int lnSubfamilia = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_subfamilia));
2961  int lnArticulo = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_articulo));
2962  int lnTalla = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_talla));
2963  int lnColor = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_color));
2964 
2965  this._CurrentItem._Fecha_ini = DateTime.Today;
2966  this._CurrentItem._Fecha_fin = DateTime.Today;
2967  this._CurrentItem._Articulo = new string(' ', lnArticulo);
2968  this._CurrentItem._Marca = new string(' ', lnMarca);
2969  this._CurrentItem._Familia = new string(' ', lnFamilia);
2970  this._CurrentItem._Subfamilia = new string(' ', lnSubfamilia);
2971  this._CurrentItem._Talla = new string(' ', lnTalla);
2972  this._CurrentItem._Color = new string(' ', lnColor);
2973  this._CurrentItem._Dto1 = 0.0M;
2974  this._CurrentItem._Dto2 = 0.0M;
2975  this._CurrentItem._Unimin = 0.0M;
2976  this._CurrentItem._Unimax = 0.0M;
2977  this._CurrentItem._Definicion = "";
2978  this._CurrentItem._Pvp = 0.0M;
2979 
2980  //Moneda: la del cliente sempre que estigui definida i no tingui el RECC marcat, si no la d'empresa
2981  if (!string.IsNullOrWhiteSpace(((Cliente)this._ewMantePrincipal)._Moneda) && !((Cliente)this._ewMantePrincipal)._RECC)
2982  this._CurrentItem._Moneda = ((Cliente)this._ewMantePrincipal)._Moneda;
2983  else
2984  this._CurrentItem._Moneda = EW_GLOBAL._Moneda._Codigo;
2985  }
2986 
2990  public class Clave : IClaves
2991  {
2995  public ClaveTRel _Cliente { get; set; }
2996 
3000  public ClaveTRel _Linia { get; set; }
3001 
3005  public Clave()
3006  {
3007  // Definim les propietats de cada una de les claus
3008  _Cliente = new ClaveTRel();
3009  _Cliente._EsFiltro = true; // Actuarà com a filtre per recuperar els registres
3010 
3011  _Linia = new ClaveTRel();
3012  _Linia._EsCampoLinea = true;
3013 
3014  // i valors per defecte
3015  _Cliente._Valor = "";
3016  _Linia._Valor = 0;
3017 
3018  // Per defecte, totes les ClaveTRel son EsClave = true
3019  }
3020  }
3021 
3025  public class Descuento : ILinTRel
3026  {
3027 
3028  private string _cCliente = "";
3032  public string _Cliente
3033  {
3034  get { return _cCliente; }
3035  set
3036  {
3037  if (value != _cCliente)
3038  {
3039  _cCliente = value;
3040  loParent._Exportar_Null();
3041  }
3042  }
3043  }
3044 
3045  private string _cArticulo = "";
3049  public string _Articulo
3050  {
3051  get { return _cArticulo; }
3052  set
3053  {
3054  if (loParent != null && !loParent._bIsLoading) // PE-99815 en la carga no hemos de validar nada
3055  {
3056  if (value != _cArticulo)
3057  {
3058  if (loParent.CamposTRel_Validar_Valor("_Articulo", value, this))
3059  {
3060  value = _cArticulo;
3061  loParent._Refresh("_Articulo");
3062  }
3063  }
3064  }
3065 
3066  if (_cArticulo != value)
3067  {
3068  _cArticulo = value;
3069  loParent._Exportar_Null();
3070 
3071  if (string.IsNullOrWhiteSpace(_cArticulo))
3072  _nPvp = 0;
3073 
3074  //PE-101406
3075  if (loParent != null && !loParent._bIsLoading)
3076  {
3077  string lcDefinicion = this._Obtener_Definicion_Registro_Descuen();
3078  this._Definicion = lcDefinicion;
3079  }
3080  }
3081 
3082  }
3083  }
3084 
3085  private string _cMarca = "";
3086 
3090  public string _Marca
3091  {
3092  get { return _cMarca; }
3093  set
3094  {
3095  //PE-101406
3096  if (value == null) value = String.Empty;
3097 
3098 
3099 
3100  if (loParent != null && !loParent._bIsLoading) // PE-99815 en la carga no hemos de validar nada
3101  {
3102  if (value != _cMarca)
3103  {
3104  if (!string.IsNullOrWhiteSpace(value))
3105  value = value.Trim().PadLeft(Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_marcas)), '0');
3106 
3107  if (loParent.CamposTRel_Validar_Valor("_Marca", value, this))
3108  {
3109  value = _cMarca;
3110  loParent._Refresh("_Marca");
3111  }
3112  }
3113  }
3114 
3115 
3116  if (_cMarca.Trim() != value.Trim())
3117  {
3118  _cMarca = value;
3119 
3120  if (loParent != null && !loParent._bIsLoading) // PE-99815 en la carga no hemos de actualizar la definicion, ya lo hace en el Descuentos._Load() al final
3121  {
3122  // Actualizo la definición por si acaso antes solo hubises un codigo y ahora hubiese 2 con lo cual habría que combinar la definicion de los dos codigos.
3123  // O caso contrario, habían 2 códigos y el usuario borra una de los dos y hay que dejar la definicion de uno solo.
3124  //
3125  // Para no complicarlo con múltiples condiciones, lo haré siempre.
3126  string lcDefinicion = this._Obtener_Definicion_Registro_Descuen();
3127  this._Definicion = lcDefinicion;
3128 
3129  loParent._Exportar_Null();
3130  }
3131  }
3132  }
3133  }
3134 
3135  private string _cFamilia = "";
3139  public string _Familia
3140  {
3141  get { return _cFamilia; }
3142  set
3143  {
3144  //PE-101406
3145  if (value == null) value = String.Empty;
3146 
3147  if (loParent != null && !loParent._bIsLoading) // PE-99815 en la carga no hemos de validar nada
3148  {
3149 
3150  if (value != _cFamilia)
3151  {
3152  if (!string.IsNullOrWhiteSpace(value))
3153  value = value.Trim().PadLeft(Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_familias)), '0');
3154 
3155  // Comprovacions familia
3156  if (loParent.CamposTRel_Validar_Valor("_Familia", value, this))
3157  {
3158  value = _cFamilia;
3159  loParent._Refresh("_Familia");
3160  }
3161  }
3162  }
3163 
3164  if (_cFamilia.Trim() != value.Trim())
3165  {
3166  _cFamilia = value;
3167 
3168  if (loParent != null && !loParent._bIsLoading) // PE-99815 en la carga no hemos de generar ninguna definicion, ya lo hace Descuentos._Load() al final
3169  {
3170  // Actualizo la definición por si acaso antes solo hubises un codigo y ahora hubiese 2 con lo cual habría que combinar la definicion de los dos codigos.
3171  // O caso contrario, habían 2 códigos y el usuario borra una de los dos y hay que dejar la definicion de uno solo.
3172  //
3173  // Para no complicarlo con múltiples condiciones, lo haré siempre.
3174  string lcDefinicion = this._Obtener_Definicion_Registro_Descuen();
3175  this._Definicion = lcDefinicion;
3176 
3177  loParent._Exportar_Null();
3178  }
3179  }
3180 
3181  }
3182  }
3183 
3184  private string _cSubfamilia = "";
3188  public string _Subfamilia
3189  {
3190  get { return _cSubfamilia; }
3191  set
3192  {
3193  //PE-101406
3194  if (value == null) value = String.Empty;
3195 
3196  if (loParent != null && !loParent._bIsLoading) // PE-99815 en la carga no hemos de validar nada
3197  {
3198  if (value != _cSubfamilia)
3199  {
3200  if (!string.IsNullOrWhiteSpace(value))
3201  value = value.Trim().PadLeft(Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_subfamilia)), '0');
3202 
3203  if (loParent.CamposTRel_Validar_Valor("_Subfamilia", value, this))
3204  {
3205  value = _cSubfamilia;
3206  loParent._Refresh("_Subfamilia");
3207  }
3208  }
3209  }
3210 
3211  if (_cSubfamilia.Trim() != value.Trim())
3212  {
3213  _cSubfamilia = value;
3214 
3215  if (loParent != null && !loParent._bIsLoading) // PE-99815 en la carga no hemos de generar ninguna definicion, ya lo hace Descuentos._Load() al final
3216  {
3217  // Actualizo la definición por si acaso antes solo hubises un codigo y ahora hubiese 2 con lo cual habría que combinar la definicion de los dos codigos.
3218  // O caso contrario, habían 2 códigos y el usuario borra una de los dos y hay que dejar la definicion de uno solo.
3219  //
3220  // Para no complicarlo con múltiples condiciones, lo haré siempre.
3221  string lcDefinicion = this._Obtener_Definicion_Registro_Descuen();
3222  this._Definicion = lcDefinicion;
3223 
3224  loParent._Exportar_Null();
3225  }
3226  }
3227 
3228  }
3229  }
3230 
3231  private string _cDefinicion = "";
3235  public string _Definicion
3236  {
3237  get { return _cDefinicion; }
3238  set
3239  {
3240  if (value != _cDefinicion)
3241  {
3242  _cDefinicion = value;
3243  }
3244  }
3245  }
3246 
3250  public string _Talla
3251  {
3252  get { return _cTalla; }
3253  set
3254  {
3255  if (string.IsNullOrWhiteSpace(this._Articulo))
3256  return;
3257 
3258  if (value != _cTalla)
3259  {
3260  if (loParent != null)
3261  {
3262  if (loParent.CamposTRel_Validar_Valor("_Talla", value, this))
3263  {
3264  value = _cTalla;
3265  loParent._Refresh("_Talla");
3266  }
3267  else
3268  {
3269  string lcArticulo = "";
3270  if (!string.IsNullOrWhiteSpace(this._Articulo) && !string.IsNullOrWhiteSpace(value))
3271  {
3272  lcArticulo = Convert.ToString(DB.SQLValor("art_tall", "articulo=" + DB.SQLString(this._Articulo) + " and talla", value, "articulo", "comunes"));
3273  if (string.IsNullOrWhiteSpace(lcArticulo))
3274  {
3275  FUNCTIONS._MessageBox("Este código de talla no es válido para el artículo declarado.", "Mantenimiento clientes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
3276  value = _cTalla;
3277  }
3278  }
3279  }
3280  }
3281  }
3282 
3283  if (_cTalla != value)
3284  {
3285  _cTalla = value;
3286  loParent._Exportar_Null();
3287  }
3288  }
3289  }
3290  private string _cTalla = "";
3291 
3295  public string _Color
3296  {
3297  get { return _cColor; }
3298  set
3299  {
3300  if (string.IsNullOrWhiteSpace(this._Articulo))
3301  return;
3302 
3303  if (value != _cColor)
3304  {
3305  if (loParent != null)
3306  {
3307  if (loParent.CamposTRel_Validar_Valor("_Color", value, this))
3308  {
3309  value = _cColor;
3310  loParent._Refresh("_Color");
3311  }
3312  else
3313  {
3314  string lcArticulo = "";
3315  if (!string.IsNullOrWhiteSpace(this._Articulo) && !string.IsNullOrWhiteSpace(value))
3316  {
3317  lcArticulo = Convert.ToString(DB.SQLValor("art_colo", "articulo=" + DB.SQLString(this._Articulo) + " and color", value, "articulo", "comunes"));
3318  if (string.IsNullOrWhiteSpace(lcArticulo))
3319  {
3320  FUNCTIONS._MessageBox("Este código de color no es válido para el artículo declarado.", "Mantenimiento clientes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
3321  value = _cColor;
3322  }
3323  }
3324  }
3325  }
3326  }
3327 
3328  if (_cColor != value)
3329  {
3330  _cColor = value;
3331  loParent._Exportar_Null();
3332  }
3333  }
3334  }
3335  private string _cColor = "";
3336 
3340  public decimal _Pvp
3341  {
3342  get { return _nPvp; }
3343  set
3344  {
3345  if (value != _nPvp)
3346  {
3347  _nPvp = value;
3348  loParent._Exportar_Null();
3349  }
3350  }
3351  }
3352  private decimal _nPvp = 0;
3353 
3357  public string _Moneda
3358  {
3359  get
3360  {
3361  if (String.IsNullOrWhiteSpace(_cMoneda)) //Task 113401 => Valores vacios hacen petar el grid
3362  _cMoneda = Convert.ToString(EW_GLOBAL._GetVariable("wc_Moneda"));
3363  return _cMoneda;
3364 
3365  }
3366  set
3367  {
3368  //No permetem nuls
3369  if (value == null)
3370  value = _cMoneda;
3371 
3372  if (value != _cMoneda)
3373  {
3374  // Comprovacions
3375  if (loParent != null)
3376  {
3377  if (loParent.CamposTRel_Validar_Valor("_Moneda", value, this))
3378  {
3379  value = _cMoneda;
3380  loParent._Refresh("_Moneda");
3381  }
3382  }
3383  }
3384 
3385  if (value != _cMoneda && !string.IsNullOrWhiteSpace(_cMoneda))
3386  {
3387  //Si entrem nou registre i el proveedor te el Recc marcat, no permetem canviar la moneda
3388  bool llEditOrCreate = (((Descuentos)this._Parent)._ewMantePrincipal as Cliente)._Estado == _EstadosMantenimiento.EditandoRegistro
3389  || (((Descuentos)this._Parent)._ewMantePrincipal as Cliente)._Estado == _EstadosMantenimiento.EntrandoNuevo;
3390  if (llEditOrCreate && (((Descuentos)this._Parent)._ewMantePrincipal as Cliente)._RECC && value != EW_GLOBAL._Moneda._Codigo)
3391  {
3392  ((Descuentos)this._Parent)._ewMantePrincipal._Error_Message = "El cliente está acogido al Régimen Especial de Criterio " +
3393  "de Caja y no es posible añadir registros en descuentos con una divisa diferente a la divisa de la empresa. " +
3394  "Para los registros ya existentes, se mantendrá la divisa informada pero no serán operativos, aunque podrá cambiar " +
3395  "la divisa informada por la de la empresa si lo precisa.";
3396  value = _cMoneda;
3397  }
3398  }
3399 
3400  if (value != _cMoneda)
3401  {
3402  bool llNuevo = ((Descuentos)this._Parent)._Estado == _EstadosMantenimiento.EntrandoNuevo;
3403  if (llNuevo && ((Cliente)((Descuentos)this._Parent)._ewMantePrincipal)._RECC && value != EW_GLOBAL._Moneda._Codigo)
3404  {
3405  ((Descuentos)this._Parent)._ewMantePrincipal._Error_Message = "La divisa no se puede modificar ya que el cliente tiene la casilla RECC marcada";
3406  _cMoneda = EW_GLOBAL._Moneda._Codigo;
3407  }
3408  else
3409  {
3410  _cMoneda = value;
3411  loParent._Exportar_Null();
3412  }
3413  }
3414  }
3415  }
3416  private string _cMoneda = "";
3417 
3421  public decimal _Dto1
3422  {
3423  get { return _nDto1; }
3424  set
3425  {
3426  if (value != _nDto1)
3427  {
3428  _nDto1 = value;
3429  loParent._Exportar_Null();
3430  }
3431  }
3432  }
3433  private decimal _nDto1 = 0;
3434 
3438  public decimal _Dto2
3439  {
3440  get { return _nDto2; }
3441  set
3442  {
3443  if (value != _nDto2)
3444  {
3445  _nDto2 = value;
3446  loParent._Exportar_Null();
3447  }
3448  }
3449  }
3450  private decimal _nDto2 = 0;
3451 
3455  public DateTime _Fecha_ini
3456  {
3457  get { return _dFecha_ini; }
3458  set
3459  {
3460  if (value != _dFecha_ini)
3461  {
3462  if (this._dFecha_fin != null && this._dFecha_fin != DateTime.MinValue && value > this._dFecha_fin)
3463  FUNCTIONS._MessageBox("La fecha inicial no puede ser superior a la fecha final declarada.", "Mantenimiento clientes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
3464  else
3465  {
3466  _dFecha_ini = value;
3467  loParent._Exportar_Null();
3468  }
3469  }
3470  }
3471  }
3472  private DateTime _dFecha_ini;
3473 
3474 
3478  public DateTime _Fecha_fin
3479  {
3480  get { return _dFecha_fin; }
3481  set
3482  {
3483  if (value != _dFecha_fin)
3484  {
3485  if (this._dFecha_ini != null && this._dFecha_ini != DateTime.MinValue && value < this._dFecha_ini)
3486  FUNCTIONS._MessageBox("La fecha final no puede ser inferior a la fecha inicial declarada.", "Mantenimiento clientes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
3487  else
3488  {
3489  _dFecha_fin = value;
3490  loParent._Exportar_Null();
3491  }
3492  }
3493  }
3494  }
3495  private DateTime _dFecha_fin;
3496 
3500  public decimal _Unimin
3501  {
3502  get { return _nUnimin; }
3503  set
3504  {
3505  if (value != _nUnimin)
3506  {
3507  _nUnimin = value;
3508  loParent._Exportar_Null();
3509  }
3510  }
3511  }
3512  private decimal _nUnimin = 0;
3513 
3517  public decimal _Unimax
3518  {
3519  get { return _nUnimax; }
3520  set
3521  {
3522  if (value != _nUnimax)
3523  {
3524  _nUnimax = value;
3525  loParent._Exportar_Null();
3526  }
3527  }
3528  }
3529  private decimal _nUnimax = 0;
3530 
3531  private int _nLinia = 0;
3535  public int _Linia
3536  {
3537  get { return _nLinia; }
3538  set
3539  {
3540  if (value != _nLinia)
3541  {
3542  _nLinia = value;
3543  loParent._Exportar_Null();
3544  }
3545  }
3546  }
3547 
3551  public string _Guid_Exp
3552  {
3553  get { return _cGuid_Exp; }
3554  set { _cGuid_Exp = value; }
3555  }
3556  private string _cGuid_Exp = "";
3557 
3561  public string _Guid
3562  {
3563  get { return _cGuid; }
3564  set { _cGuid = value; }
3565  }
3566  private string _cGuid = "";
3567 
3571  public DateTime? _Importar
3572  {
3573  get { return _dImportar; }
3574  set { _dImportar = value; }
3575  }
3576  private DateTime? _dImportar;
3577 
3578 
3582  public DateTime? _Exportar
3583  {
3584  get { return _dExportar; }
3585  set { _dExportar = value; }
3586  }
3587  private DateTime? _dExportar;
3588 
3592  public int _Com_estado
3593  {
3594  get { return _nCom_estado; }
3595  set { _nCom_estado = value; }
3596  }
3597  private int _nCom_estado = 0;
3598 
3602  public DateTime _Com_fecha
3603  {
3604  get { return _dCom_fecha; }
3605  set { _dCom_fecha = value; }
3606  }
3607  private DateTime _dCom_fecha;
3608 
3612  public DateTime _Com_ini
3613  {
3614  get { return _dCom_ini; }
3615  set { _dCom_ini = value; }
3616  }
3617  private DateTime _dCom_ini;
3618 
3622  public string _Sucursal
3623  {
3624  get { return _cSucursal; }
3625  set { _cSucursal = value; }
3626  }
3627  private string _cSucursal = "";
3628 
3632  public string _Guid_Id
3633  {
3634  get
3635  {
3636  if (string.IsNullOrWhiteSpace(_cGuid_Id))
3637  {
3638  _cGuid_Id = Guid.NewGuid().ToString().ToUpper();
3639  }
3640  return _cGuid_Id;
3641  }
3642  set { _cGuid_Id = value; }
3643  }
3644  private string _cGuid_Id = "";
3645 
3646 
3647  private Descuentos loParent;
3651  public object _Parent
3652  {
3653  get
3654  {
3655  return loParent;
3656  }
3657  set
3658  {
3659  loParent = (Descuentos)value;
3660  }
3661  }
3662 
3666  public Descuento()
3667  {
3668 
3669  }
3670 
3675  public bool Fila_Plena()
3676  {
3677  bool lbFilaPlena;
3678 
3679  lbFilaPlena = !string.IsNullOrWhiteSpace(_Articulo) || !string.IsNullOrWhiteSpace(_Marca) || !string.IsNullOrWhiteSpace(_Familia) || !string.IsNullOrWhiteSpace(_Subfamilia);
3680 
3681  return lbFilaPlena;
3682  }
3683 
3689  {
3690  string lcDefinicion = "", lcNomAux = "";
3691 
3692  if (!string.IsNullOrWhiteSpace(this._cArticulo))
3693  {
3694  lcNomAux = Convert.ToString(DB.SQLValor("articulo", "codigo", this._cArticulo, "nombre")).ToString().Trim();
3695  lcDefinicion = lcNomAux;
3696  }
3697  else
3698  {
3699  if (!string.IsNullOrWhiteSpace(this._cFamilia))
3700  {
3701  lcNomAux = Convert.ToString(DB.SQLValor("familias", "codigo", this._cFamilia, "nombre")).ToString().Trim();
3702  lcDefinicion = lcNomAux;
3703  }
3704 
3705  if (!string.IsNullOrWhiteSpace(this._cMarca))
3706  {
3707  lcNomAux = Convert.ToString(DB.SQLValor("marcas", "codigo", this._cMarca, "nombre")).ToString().Trim();
3708  lcDefinicion = lcDefinicion + (!string.IsNullOrWhiteSpace(lcDefinicion) ? "/" : "") + lcNomAux;
3709  }
3710 
3711  if (!string.IsNullOrWhiteSpace(this._cSubfamilia))
3712  {
3713  lcNomAux = Convert.ToString(DB.SQLValor("subfam", "codigo", this._cSubfamilia, "nombre")).ToString().Trim();
3714  lcDefinicion = lcDefinicion + (!string.IsNullOrWhiteSpace(lcDefinicion) ? "/" : "") + lcNomAux;
3715  }
3716  }
3717 
3718  return lcDefinicion;
3719  }
3720  }
3721  }
3722 
3723 
3739  public class MandatosCliente : ewManteTRel<MandatosCliente.MandatoCliente, MandatosCliente.Clave>
3740  {
3741  #region ENUMERACIONES
3742 
3743 
3748  {
3752  [Description("Nuevo mandato")]
3753  NuevoMandato = 0,
3754 
3758  [Description("Revisión de mandato origen")]
3759  RevisionMandatoOrigen,
3760 
3764  [Description("Duplicado de mandato origen")]
3765  DuplicadoMandatoOrigen,
3766 
3770  [Description("Generación masiva de mandatos")]
3771  GeneracionMasivaMandatos
3772  }
3773 
3774 
3778  public enum MandatosTipoPago
3779  {
3783  [Description("RECURRENTE")]
3784  Recurrente = 1,
3785 
3789  [Description("ÚNICO")]
3790  Único = 2
3791  }
3792 
3793 
3797  public enum MandatosTipo
3798  {
3802  [Description("SDD-CORE")]
3803  SDD_CORE = 1,
3807  [Description("SDD-B2B")]
3808  SDD_B2B = 2,
3812  [Description("COR-1")]
3813  COR_1 = 3
3814  }
3815 
3816 
3821  {
3825  [Description("Código estándar")]
3826  CodigoEstandar = 0,
3827 
3831  [Description("Utilizar código de cliente")]
3832  UtilizarCodCli,
3833 
3837  [Description("Código libre")]
3838  CodigoLibre
3839  }
3840 
3841 
3842  #endregion ENUMERACIONES
3843 
3844 
3845  #region EVENTOS
3846 
3847 
3852  public delegate void _Error_Message_LineaMandato_After_Handler(string tcMissatge);
3853 
3854 
3858  public event _Error_Message_LineaMandato_After_Handler _Error_Message_LineaMandato_After;
3859 
3860 
3865  public delegate void _Warning_Message_LineaMandato_After_Handler(string tcMissatge);
3866 
3867 
3871  public event _Warning_Message_LineaMandato_After_Handler _Warning_Message_LineaMandato_After;
3872 
3873 
3874  #endregion EVENTOS
3875 
3876 
3877  #region PROPIEDADES PRIVADAS
3878 
3879 
3889  private List<string> _lstMandatosBorrados = new List<string>();
3890 
3891 
3895  private Cliente _oCliente
3896  {
3897  get { return (Cliente)this._ewMantePrincipal; }
3898  }
3899 
3900 
3904  private int _nDigitos = Convert.ToInt32(EW_GLOBAL._GetLenCampo(KeyDiccionarioLenCampos.wn_digitos));
3905 
3906 
3910  private string _cNombreEmpresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_empnombre1"));
3911 
3912 
3916  private string _cEmpresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa"));
3917 
3918 
3922  private string _cNombre2Empresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_empnombre2"));
3923 
3924 
3928  private string _cDireccionEmpresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_empdireccion"));
3929 
3930 
3934  private string _cCodPosEmpresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_empcodpos"));
3935 
3936 
3940  private string _cPoblacionEmpresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_emppoblacion"));
3941 
3942 
3946  private string _cProvinciaEmpresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_empprovincia"));
3947 
3948 
3952  private string _cPaisEmpresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_emppais"));
3953 
3954 
3958  private string _cCifEmpresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_empcif"));
3959 
3960 
3964  private bool _lMandEmp = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_mandemp"));
3965 
3966 
3973  private Dictionary<string, int> _dicCuentasBanc_Cli = new Dictionary<string, int>();
3974 
3975 
3976  #endregion PROPIEDADES PRIVADAS
3977 
3978 
3979  #region PROPIEDADES PÚBLICAS
3980 
3981 
3987  public string _Error_Message_LineaMandato
3988  {
3989  get { return _cError_Message_LineaMandato; }
3990  set
3991  {
3992  _cError_Message_LineaMandato = value;
3993 
3994  if (!string.IsNullOrWhiteSpace(_cError_Message_LineaMandato))
3995  {
3996  if (this._Error_Message_LineaMandato_After != null)
3997  this._Error_Message_LineaMandato_After(_cError_Message_LineaMandato);
3998  }
3999  }
4000  }
4001  private string _cError_Message_LineaMandato = "";
4002 
4003 
4009  public string _Warning_Message_LineaMandato
4010  {
4011  get { return _cWarning_Message_LineaMandato; }
4012  set
4013  {
4014  _cWarning_Message_LineaMandato = value;
4015 
4016  if (!string.IsNullOrWhiteSpace(_cWarning_Message_LineaMandato))
4017  {
4018  if (this._Warning_Message_LineaMandato_After != null)
4019  this._Warning_Message_LineaMandato_After(_cWarning_Message_LineaMandato);
4020  }
4021  }
4022  }
4023  private string _cWarning_Message_LineaMandato = "";
4024 
4025 
4030  public bool _RefrescarCuentasBancarias = false;
4031 
4032 
4033  #endregion PROPIEDADES PÚBLICAS
4034 
4035 
4036  #region CONSTRUCTORES
4037 
4038 
4043  {
4044  this.crearEstructura();
4045  }
4046 
4047 
4051  public MandatosCliente(string tcCodigoCliente)
4052  {
4053  this.crearEstructura();
4054 
4055  this._Claves._Cliente._Valor = tcCodigoCliente;
4056  }
4057 
4058 
4062  ~MandatosCliente()
4063  {
4064  // Liberar memoria
4065  //
4066  if (this._dicCuentasBanc_Cli != null)
4067  {
4068  this._dicCuentasBanc_Cli.Clear();
4069  this._dicCuentasBanc_Cli = null;
4070  }
4071 
4072  if (this._lstMandatosBorrados != null)
4073  {
4074  this._lstMandatosBorrados.Clear();
4075  this._lstMandatosBorrados = null;
4076  }
4077 
4078  return;
4079  }
4080 
4081 
4082  #endregion CONSTRUCTORES
4083 
4084 
4085  #region MÉTODOS PROTECTED OVERRIDE
4086 
4087 
4091  protected override void _Configurar_Grid()
4092  {
4093  base._Configurar_Grid();
4094 
4095  this._ManteGrid._DataSource_Row_New_Event += new objetos.UserControls.Mantegrid._DataSource_Row_New_Event_Handler(this.mandatos_ManteGrid__DataSource_Row_New_Event);
4096  }
4097 
4098 
4099  #endregion MÉTODOS PROTECTED OVERRIDE
4100 
4101 
4102  #region MÉTODOS PUBLICOS OVERRIDE SOBREESCRITOS DE CLASE 'EWMANTETREL'
4103 
4104 
4110  public override void _Load()
4111  {
4112  this._RefrescarCuentasBancarias = false;
4113 
4114  // Cargar en el diccionario interno las cuentas bancarias del cliente y poner la lista de cuentas bancarias en la columna del mantetrel
4115  // para que las muestre en la columna combo de cuenta bancaria.
4116  //
4117  this._CargarCuentasBancariasCliente();
4118 
4119  // Vacío la lista interna de mandatos eliminados.
4120  //
4121  this._lstMandatosBorrados.Clear();
4122 
4123  // Ejecutar el _Load() de la clase base.
4124  //
4125  base._Load();
4126 
4127  // Si se está haciendo el _Load() del ManteTRel padre guardo el mandato que hay en la base de datos. Lo utilizaré en el _Save() caso de que trabajen
4128  // con mandatos por empresas y en una linea de mandato de entrada libre me cambien el nº de mandato. Conociendo el que había originalmente en el _Load()
4129  // al hacer el _Save() podré hacer el _Delete de las empresas por mandato correspondientes al mandato original que había en el momento de hacer el _Load()
4130  //
4131  foreach (Cliente.MandatosCliente.MandatoCliente loMandato in this._Items)
4132  {
4133  loMandato._MandatoOriginalEnLoad = loMandato._Mandato;
4134  }
4135 
4136  return;
4137  }
4138 
4139 
4144  public override bool _Save()
4145  {
4146  bool llOk = true;
4147  bool llOk2 = false;
4148 
4149  // Hay toda una serie de acciones que se realizan a continuación que tienen que realizarse una vez el usuario
4150  // confirma pulsando Aceptar cuando está editando. No se pueden hacer estpos cambios antes, por que el usuario
4151  // podria "Cancelar" la edición y habría que dar la vuelta a todo lo realizado en la bd.
4152 
4153 
4154  // Si tenemos activado mandatos por empresa revisamos todos los mandatos que tenemos en busca de alguno que tenga instanciado el ManteTRel
4155  // de empresas por mandato (señal de que habría sido accedido en la sesión y podría haber cambiado).
4156  //
4157  // Lo hacemos antes de hacer el _Save() del ManteTRel de mandatos de cliente por que si se hace primero este _Save() entonces la clase base de
4158  // ManteTRel después de guardar los datos en la bd. hace automáticamente un _Load() con lo que vaciaría lo que pudiera haber en la propiedad
4159  // _TRelEmpresasMandato de cada linea de mandato caso de que se hubiera accedido a ella.
4160  //
4161  if (this._lMandEmp)
4162  {
4163  foreach (MandatosCliente.MandatoCliente loMandato in this._Items)
4164  {
4165  // Detección de cambio de mandato de entrada libre, hay que borrar las empresas por mandato del mandato que había originalmente en la base de datos.
4166  //
4167  if (loMandato._MandatoEntradaLibre && !string.IsNullOrWhiteSpace(loMandato._MandatoOriginalEnLoad) &&
4168  !string.IsNullOrWhiteSpace(loMandato._Mandato) && loMandato._Mandato != loMandato._MandatoOriginalEnLoad)
4169  {
4170  EmpresasMandato loEmpresasMandato = new EmpresasMandato(loMandato._MandatoOriginalEnLoad);
4171  loEmpresasMandato._Load();
4172  loEmpresasMandato._Delete();
4173  }
4174 
4175  // El ManteTRel de empresas por mandato fue accedido, lo grabo.
4176  if (loMandato._oEmpresasMandato != null)
4177  {
4178  llOk2 = loMandato._oEmpresasMandato._Save();
4179  llOk = llOk && llOk2;
4180  }
4181  }
4182  }
4183 
4184  if (llOk)
4185  {
4186  // Lo hacemos antes de hacer el _Save() del ManteTRel de mandatos de cliente por que si se hace primero este _Save() entonces la clase base de
4187  // ManteTRel después de guardar los datos en la bd. hace automáticamente un _Load() con lo que vaciaría lo que pudiera haber en la propiedad
4188  // _CambioBanc_Cli o _CambioProcesado de cada linea de mandato caso de que se hubiera accedido a ella.
4189  //
4190  foreach (MandatoCliente loMandato in this._Items)
4191  {
4192  // Este control es para actualizar el campo _Banc_Cli en mandatos en los que haya declarado una cuenta bancaria que se haya creado en
4193  // esta misma sesión de edición de la cual se hace el _Save() ahora. Esto números de linea al ser nuevos habrán entrado como negativos en
4194  // inicialmente en el ManteTRel de datos bancarios de cliente y al hacer el _Save() de aquel ManteTRel se les cambia el signo.
4195  //
4196  // Aquí tendremos que hacer lo mismo con el campo BANC_CLI de Mandatos
4197  //
4198  if (loMandato._Banc_Cli < 0)
4199  {
4200  // Tengo que arreglar el _Banc_Cli tanto en el registro del mandato como en la lista interna de cuentas bancarias que mantengo
4201  //
4202  string lcCuentaBancaria = this._dicCuentasBanc_Cli.FirstOrDefault(x => x.Value == loMandato._Banc_Cli).Key;
4203 
4204  // Caso de crear dos nuevos mandatos y los dos con la misma cuenta bancaria recien creada, en el segundo mandato el ban_cli
4205  // ya lo habrá cambiado al pasar por el primer mandato.
4206  //
4207  if (!string.IsNullOrWhiteSpace(lcCuentaBancaria))
4208  this._dicCuentasBanc_Cli[lcCuentaBancaria] = Math.Abs(loMandato._Banc_Cli);
4209 
4210  loMandato._Banc_Cli = Math.Abs(loMandato._Banc_Cli);
4211  }
4212 
4213 
4214  // Actualizar campo BANC_CLI de GESTION!C_ALBVEN y COMUNES!PREVI_CL de los registros pendientes (de cobrar / de facturar) que tuvieran el mandato
4215  // y BANC_CLI original poniéndole el nuevo valor de BANC_CLI. Se hace cuando se ha cambiado el valor del banco del mandato en la presente sesión.
4216  //
4217  if (loMandato._CambioBanc_Cli && loMandato._Banc_Cli != loMandato._Banc_CliOriginal)
4218  {
4219  SEPA._Actualizar_BancCli_Documentos(this._oCliente, loMandato._Mandato, loMandato._Banc_Cli);
4220  }
4221 
4222  // Actualizaciones adicionales en GESTION!C_ALBVEN, COMUNES!PREVI_CL y COMUNES!CUOTAS cuando en un mandato el campo PROCESADO ha pasado de false
4223  // a true en la presente sesión.
4224  //
4225  if (loMandato._CambioProcesado && loMandato._Procesado != loMandato._ProcesadoOriginal && loMandato._Procesado)
4226  SEPA._Actualizar_Mandatos_Documentos(this._oCliente, loMandato._Mandato, loMandato._Banc_Cli);
4227  }
4228 
4229 
4230 
4231  // Si se eliminaron mandatos, hay que eliminar su referencia de documentos que lo puedan tener.
4232  //
4233  if (this._lstMandatosBorrados.Count > 0)
4234  {
4235  foreach (string lcMandato in this._lstMandatosBorrados)
4236  {
4237  // Me aseguro de que no hayan vuelto a añadir el mandato.
4238  //
4239  MandatoCliente loMandato = this._Items.Where(x => x._Mandato == lcMandato).FirstOrDefault();
4240  if (loMandato == null)
4241  {
4242  llOk = SEPA._BorrarMandatoDocumento("previ_cl", this._oCliente._Codigo, lcMandato);
4243  if (!llOk)
4244  FUNCTIONS._MessageBox("No se pudo eliminar la referencia del mandato en previsiones de cobro.", "Mandatos de cliente", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
4245 
4246  SEPA._BorrarMandatoDocumento("c_albven", this._oCliente._Codigo, lcMandato, true);
4247  if (!llOk)
4248  FUNCTIONS._MessageBox("No se pudo eliminar la referencia del mandato en albaranes de venta.", "Mandatos de cliente", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
4249 
4250  SEPA._BorrarMandatoDocumento("cuotas", this._oCliente._Codigo, lcMandato);
4251  if (!llOk)
4252  FUNCTIONS._MessageBox("No se pudo eliminar la referencia del mandato en cuotas.", "Mandatos de cliente", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
4253  }
4254  }
4255  }
4256 
4257  llOk = base._Save();
4258  }
4259 
4260  if (!llOk)
4261  this._Show_Error_Message("No se pudieron guardar los datos.");
4262 
4263  return llOk;
4264  }
4265 
4266 
4272  public override bool _Delete()
4273  {
4274  bool llOk = true;
4275  bool llOk2 = false;
4276 
4277  // Borrar los posibles registros de empresas por mandato que pueda haber.
4278  //
4279  if (this._lMandEmp)
4280  {
4281  foreach (MandatosCliente.MandatoCliente loMandato in this._Items)
4282  {
4283  // Accedo ala propiedad pública del ManteTRel para que lo intente cargar si o si.
4284  //
4285  if (loMandato._TRelEmpresasMandato._Items.Count > 0)
4286  {
4287  llOk2 = loMandato._oEmpresasMandato._Delete();
4288  llOk = llOk && llOk2;
4289  }
4290  }
4291  }
4292  if (llOk)
4293  llOk = base._Delete();
4294 
4295  return llOk;
4296  }
4297 
4298 
4310  public override bool _DeleteItem(MandatoCliente toItem)
4311  {
4312  bool deleted = false;
4313 
4314  string lcMandato = toItem._Mandato;
4315 
4316  // Borra el registro del mandato del ManteTRel de mandatos.
4317  //
4318  deleted = base._DeleteItem(toItem);
4319 
4320  // Si trabajo con mandatos por empresa activado, debo eliminar también los registros de empresas por mandato que tenga asociado el
4321  // registro de mandato que acabo de eliminar.
4322  //
4323  if (deleted )
4324  {
4325  if (this._lMandEmp)
4326  {
4327  if (toItem.Fila_Plena())
4328  deleted = toItem._TRelEmpresasMandato._Delete();
4329  }
4330 
4331  // Agrego el mandato a la lista interna de mandatos borrados.
4332  //
4333  if (!string.IsNullOrWhiteSpace(lcMandato))
4334  this._lstMandatosBorrados.Add(lcMandato);
4335  }
4336 
4337  if (!deleted)
4338  this._Show_Error_Message("No se pudo eliminar correctamente el mandato.");
4339 
4340  return deleted;
4341  }
4342 
4343 
4352  public override void _Clonar(IManteTRel manteTRelOrigen)
4353  {
4354  // No hacemos nada, ni llamamos a la base ni nada.
4355  return;
4356  }
4357 
4358 
4359  #endregion MÉTODOS PUBLICOS OVERRIDE SOBREESCRITOS DE CLASE 'EWMANTETREL'
4360 
4361 
4362  #region MÉTODOS PRIVADOS
4363 
4364 
4368  private void crearEstructura()
4369  {
4370  this._DataBase = "Comunes";
4371  this._Tabla = "Mandatos";
4372  this._OrdenarPor = "";
4373  this._Condicion = "";
4374  this._Titulo_Browser = "";
4375 
4376  // Omplim els camps i relació de propietats
4377  this._AddCampoTRel("_Cliente", "Cliente", false, true, false);
4378  this._AddCampoTRel("_Linia", "Linia", false, true, false);
4379 
4380  this._AddCampoTRel("_Mandato","Mandato", true, true, true, "Mandato");
4381 
4382  // CAMPO 'BANC_CLI'
4383  //
4384 
4385  // Campo real de la BD que ocultamos pero actualizamos.
4386  //
4387  this._AddCampoTRel("_Banc_Cli", "Banc_Cli", false, true, false);
4388 
4389  // Campo visible solamente. Como tal no se actualiza, pero el Set de la propiedad actualiza el valor de la propiedad _Banc_Cli
4390  // Dejo la lista de elementos de cuentas bancarias vacía a la espera de que se haga el _Load(), es allí donde las carga.
4391  //
4392  ewCampoTRel loComboBanc_Cli = this._AddCampoTRel("_Banc_CliVisual", "", true, false, true, "Cuenta bancaria", gridColumnsTypes.Combo, toComboValues: new List<object>());
4393 
4394  this._AddCampoTRel("_Defecto", "Defecto", true, true, true, "Mandato defecto", gridColumnsTypes.Lógico);
4395  this._AddCampoTRel("_FechaFin", "Fecha_fin", true, true, true, "Fecha fin mandato", gridColumnsTypes.Fecha);
4396 
4397 
4398  // CAMPO 'TIPO PAGO' (RECURRENTE/UNICO)
4399  //
4400 
4401  // Campo real de la BD que ocultamos pero actualizamos.
4402  //
4403  this._AddCampoTRel("_TipoPago", "Tipo_pago", false, true, false);
4404 
4405  List<object> lstListaTipoPago = new List<object>();
4406  var values3 = Enum.GetValues(typeof(MandatosTipoPago)).Cast<MandatosTipoPago>();
4407  foreach (MandatosTipoPago item in values3)
4408  lstListaTipoPago.Add((object)sage.ew.functions.FUNCTIONS._GetEnumDescription(item));
4409 
4410  // Campo visible solamente. Como tal no se actualiza, pero el Set de la propiedad actualiza el valor de la propiedad _Tipo
4411  //
4412  this._AddCampoTRel("_TipoPagoVisual", "", true, false, true, "Tipo pago", gridColumnsTypes.Combo, toComboValues: lstListaTipoPago);
4413 
4414 
4415  // CAMPO 'TIPO MANDATO' (SDD-B2B, SDD-CORE, COR-1)
4416  //
4417 
4418  //Campo real de la BD que ocultamos pero actualizamos.
4419  //
4420  this._AddCampoTRel("_TipoMandato", "Tipo", false, true, false);
4421 
4422  List<object> lstListaTipoMandato = new List<object>();
4423  var values2 = Enum.GetValues(typeof(MandatosTipo)).Cast<MandatosTipo>();
4424  foreach (MandatosTipo item in values2)
4425  lstListaTipoMandato.Add((object)sage.ew.functions.FUNCTIONS._GetEnumDescription(item));
4426 
4427  // Campo visible solamente. Como tal no se actualiza, pero el Set de la propiedad actualiza el valor de la propiedad _TipoMandato
4428  //
4429  this._AddCampoTRel("_TipoMandatoVisual", "", true, false, true, "Tipo mandato", gridColumnsTypes.Combo, toComboValues : lstListaTipoMandato);
4430  this._AddCampoTRel("_FechaCarta", "Fecha_cart", true, true, true, "Fecha carta", gridColumnsTypes.Fecha);
4431  this._AddCampoTRel("_Carta", "Carta", true, true, true, "Ver carta/autorización firmada por el cliente");
4432  this._AddCampoTRel("", "", ewCampoTRel.Visible.Si, ewCampoTRel.Updatable.No, ewCampoTRel.Editable.No, "", gridColumnsTypes.Boton, null, 2, null, "...");
4433  this._AddCampoTRel("_FechaFirma", "Fecha_fir", true, true, true, "Fecha firma", gridColumnsTypes.Fecha);
4434  this._AddCampoTRel("_PoblacionFirma", "Poblac_fir", true, true, true, "Población firma");
4435  this._AddCampoTRel("_CliBicCtaBancaria", "Cli_bic", true, true, true, "BIC Cuenta bancaria");
4436  this._AddCampoTRel("_PersPago", "Perspago", true, true, true, "Persona en nombre de la cual se realiza el pago");
4437 
4438  ewCampoTRel def_Concepto = this._AddCampoTRel("_Concepto", "Concepto");
4439  def_Concepto._AnchoColumna = 6;
4440  def_Concepto._AutoModeSizeColumna = DataGridViewAutoSizeColumnMode.None;
4441  def_Concepto._Editable = true;
4442  def_Concepto._Error_Duplicados = "";
4443  def_Concepto._Error_Validar_Dato = "";
4444  def_Concepto._ExpandirPunto = false;
4445  def_Concepto._FormatString = "";
4446  def_Concepto._PermiteDuplicados = true;
4447  def_Concepto._TipoColumna = gridColumnsTypes.Texto;
4448  def_Concepto._Titulo = "Cód.Concepto";
4449  def_Concepto._Updatable = true;
4450  def_Concepto._Relleno = '0';
4451  def_Concepto._Validar_Asignar_Cargando = true;
4452  def_Concepto._Validar_Dato_BaseDatos = "COMUNES";
4453  def_Concepto._Validar_Dato_Tabla = "MAND_CONCE";
4454  def_Concepto._Validar_Dato_Clave = "CODIGO";
4455  def_Concepto._Validar_Dato_Campos = "NOMBRE";
4456  def_Concepto._Validar_Dato_CampoTRel_Asignar = "_NombreConcepto";
4457  def_Concepto._Error_Validar_Dato = "El código de concepto introducido introducido no existe.";
4458  def_Concepto._Visible = true;
4459  def_Concepto._Mante = new sage.ew.botones.btMante();
4460  //def_Concepto._Mante._NombreManteNet = "MANDCONCEP";
4461  def_Concepto._Mante._Form = "MANDCONCEP";
4462  def_Concepto._Mante._Tooltip = "Acceder al mantenimiento de conceptos de mandatos SEPA";
4463  def_Concepto._Browser = new sage.ew.botones.btBrowser();
4464  def_Concepto._Browser._Campos = "Codigo,Nombre";
4465  def_Concepto._Browser._Campo_Predet = "Nombre";
4466  def_Concepto._Browser._Clave = "Codigo";
4467  def_Concepto._Browser._DataBase = "Comunes";
4468  def_Concepto._Browser._Tabla = "Mand_conce";
4469  def_Concepto._Browser._Titulo = "Listado de conceptos de mandatos SEPA";
4470  def_Concepto._Browser._Titulos_Campos = "Código,Nombre";
4471  def_Concepto._Browser.NombreMantenimiento = "MAND_CONCE";
4472  def_Concepto._Browser._Tooltip = "Acceder al listado de conceptos de mandatos SEPA";
4473 
4474  // Ojo que es un campo virtual, no hay campo respectivo en la BD.
4475  //
4476  this._AddCampoTRel("_NombreConcepto", "", true, false, false, "Descripción concepto");
4477 
4478  this._AddCampoTRel("_NumEfectos", "Numefe", true, true, true, "Nº efectos", gridColumnsTypes.Entero, new ewMascara("9999"));
4479 
4480  this._AddCampoTRel("_NumEfectosPro", "Numefpro", true, true, true, "Nº efectos procesados", gridColumnsTypes.Entero, new ewMascara("9999"));
4481 
4482  this._AddCampoTRel("_Procesado", "Estpro", true, true, true, "Procesado", gridColumnsTypes.Lógico);
4483 
4484  // Campos ocultos, existentes en la tabla, pero ocultos visualmente.
4485  //
4486  ewCampoTRel def_Plantilla = this._AddCampoTRel("_Plantilla", "Plantilla");
4487  def_Plantilla._AnchoColumna = 6;
4488  def_Plantilla._AutoModeSizeColumna = DataGridViewAutoSizeColumnMode.None;
4489  def_Plantilla._Editable = true;
4490  def_Plantilla._Error_Duplicados = "";
4491  def_Plantilla._Error_Validar_Dato = "";
4492  def_Plantilla._ExpandirPunto = false;
4493  def_Plantilla._FormatString = "";
4494  def_Plantilla._PermiteDuplicados = true;
4495  def_Plantilla._TipoColumna = gridColumnsTypes.Texto;
4496  def_Plantilla._Titulo = "Plantilla";
4497  def_Plantilla._Updatable = true;
4498  def_Plantilla._Relleno = '0';
4499  def_Plantilla._Validar_Asignar_Cargando = true;
4500  def_Plantilla._Validar_Dato_BaseDatos = "GESTION";
4501  def_Plantilla._Validar_Dato_Tabla = "PLTCOMU";
4502  def_Plantilla._Validar_Dato_Clave = "CODIGO";
4503  def_Plantilla._Validar_Dato_Campos = "NOMBRE";
4504  def_Plantilla._Validar_Dato_CampoTRel_Asignar = "_NombrePlantilla";
4505  def_Plantilla._Error_Validar_Dato = "El código de plantilla introducido introducido no existe.";
4506  def_Plantilla._Visible = false;
4507 
4508  def_Plantilla._Mante = new sage.ew.botones.btMante();
4509  def_Plantilla._Mante._Form = "PLTCOMU";
4510  def_Plantilla._Mante._Tooltip = "Acceder al mantenimiento de plantillas de comunicados SEPA";
4511 
4512  def_Plantilla._Browser = new sage.ew.botones.btBrowser();
4513  def_Plantilla._Browser._Campos = "Codigo,Nombre";
4514  def_Plantilla._Browser._Campo_Predet = "Nombre";
4515  def_Plantilla._Browser._Clave = "Codigo";
4516  def_Plantilla._Browser._DataBase = "Gestion";
4517  def_Plantilla._Browser._Tabla = "Pltcomu";
4518  def_Plantilla._Browser._Titulo = "Listado de plantillas de comunicados SEPA";
4519  def_Plantilla._Browser._Titulos_Campos = "Código,Nombre";
4520  def_Plantilla._Browser.NombreMantenimiento = "PLTCOMU";
4521 
4522  this._AddCampoTRel("_NombrePlantilla", "", false, false, false);
4523 
4524  this._AddCampoTRel("_CliNombre", "Cli_nomb", false, true, true);
4525  this._AddCampoTRel("_CliNif", "Cli_nif", false, true, true);
4526  this._AddCampoTRel("_CliDireccion", "Cli_direc", false, true, true);
4527 
4528  ewCampoTRel def_Codpos = this._AddCampoTRel("_CliCodPos", "Cli_codpos", false, true, true);
4529  def_Codpos._Validar_Dato_BaseDatos = "Gestion";
4530  def_Codpos._Validar_Dato_Tabla = "CodPos";
4531  def_Codpos._Validar_Dato_Clave = "Codigo";
4532  def_Codpos._Validar_Dato_Campos = "Codigo";
4533  def_Codpos._Validar_Dato_CampoTRel_Asignar = "";
4534  def_Codpos._Error_Validar_Dato = "El código postal indicado no existe.";
4535 
4536  def_Codpos._Browser = new sage.ew.botones.btBrowser();
4537  def_Codpos._Browser._Campos = "Codigo,Poblacion,Provincia";
4538  def_Codpos._Browser._Campo_Predet = "Poblacion";
4539  def_Codpos._Browser._Clave = "Codigo";
4540  def_Codpos._Browser._DataBase = "Gestion";
4541  def_Codpos._Browser._Tabla = "CodPos";
4542  def_Codpos._Browser._Titulo = "Listado de códigos postales";
4543  def_Codpos._Browser._Titulos_Campos = "Código,Población,Provincia";
4544  def_Codpos._Browser.NombreMantenimiento = "CODPOS";
4545  def_Codpos._Mante = new sage.ew.botones.btMante();
4546  def_Codpos._Mante._NombreManteNet = "CODPOS";
4547 
4548 
4549  this._AddCampoTRel("_CliPoblacion", "Cli_poblac", false, true, true);
4550  this._AddCampoTRel("_CliProvincia", "Cli_provin", false, true, true);
4551 
4552 
4553  ewCampoTRel def_Pais = this._AddCampoTRel("_CliPais", "Cli_pais", false, true, true);
4554  def_Pais._Validar_Dato_BaseDatos = "Comunes";
4555  def_Pais._Validar_Dato_Tabla = "Paises";
4556  def_Pais._Validar_Dato_Clave = "Codigo";
4557  def_Pais._Validar_Dato_Campos = "Nombre";
4558  def_Pais._Validar_Dato_CampoTRel_Asignar = "_NombreCliPais";
4559  def_Pais._Validar_Asignar_Cargando = true;
4560  def_Pais._Error_Validar_Dato = "El código de país indicado no existe.";
4561  def_Pais._Browser = new sage.ew.botones.btBrowser();
4562  def_Pais._Browser._Campos = "Codigo,Nombre";
4563  def_Pais._Browser._Campo_Predet = "Nombre";
4564  def_Pais._Browser._Clave = "Codigo";
4565  def_Pais._Browser._DataBase = "Comunes";
4566  def_Pais._Browser._Tabla = "Paises";
4567  def_Pais._Browser._Titulo = "Listado de países";
4568  def_Pais._Browser._Titulos_Campos = "Código,Nombre";
4569  def_Pais._Browser.NombreMantenimiento = "PAISES";
4570  def_Pais._Mante = new sage.ew.botones.btMante();
4571  def_Pais._Mante._NombreManteNet = "PAISES";
4572 
4573  // Ojo que es un campo virtual, no hay campo respectivo en la BD.
4574  this._AddCampoTRel("_NombreCliPais", "", false, false, false);
4575 
4576  this._AddCampoTRel("_CliIbanCtaBancaria", "Cli_iban", false, true, true);
4577  this._AddCampoTRel("_MandatoOrigen","Mandatorig", false, true, true);
4578  this._AddCampoTRel("_MandatoContador", "Mandcont", false, true, true);
4579  this._AddCampoTRel("_FechaCreac", "Fechacreac", false, true, true);
4580  this._AddCampoTRel("_EmpNif", "Emprcif", false, true, true);
4581  this._AddCampoTRel("_EmpNombre", "Emprnom", false, true, true);
4582  this._AddCampoTRel("_EmpNombre2", "Emprnom2", false, true, true);
4583  this._AddCampoTRel("_EmpDireccion", "Emprdirec", false, true, true);
4584  this._AddCampoTRel("_EmpCodpos", "Emprcodpos", false, true, true);
4585  this._AddCampoTRel("_EmpPoblacion", "Emprpob", false, true, true);
4586  this._AddCampoTRel("_EmpProvincia", "Emprprov", false, true, true);
4587  this._AddCampoTRel("_EmpPais", "Emprpais", false, true, true);
4588 
4589  this._AddCampoTRel("_TRelEmpresasMandato", "", false, false, false, "ManteTRel de empresas por mandato");
4590 
4591  this._AddCampoTRel("_MandatoEntradaLibre", "Mndcodlibr", false, true, true);
4592 
4593  if (DB.SQLExisteCampo(this._DataBase, this._Tabla, "Guid_Id"))
4594  this._AddCampoTRel("_Guid_Id", "Guid_Id", ewCampoTRel.Visible.No, ewCampoTRel.Updatable.Si, ewCampoTRel.Editable.No);
4595 
4596  return;
4597  }
4598 
4599 
4604  private void mandatos_ManteGrid__DataSource_Row_New_Event(int tnInsertLinea)
4605  {
4606  // Me aseguro tener todos los campos con los valores por defecto.
4607  //
4608  this._CurrentItem._Mandato = "";
4609  this._CurrentItem._Banc_Cli = 0;
4610  this._CurrentItem._Defecto = false;
4611  this._CurrentItem._FechaFin = null;
4612  this._CurrentItem._TipoPago = 0;
4613  this._CurrentItem._TipoMandato = 0;
4614  this._CurrentItem._FechaCarta = null;
4615  this._CurrentItem._Carta = "";
4616  this._CurrentItem._FechaFirma = null;
4617  this._CurrentItem._PoblacionFirma = "";
4618 
4619  this._CurrentItem._PersPago = "";
4620  this._CurrentItem._Concepto = "";
4621  this._CurrentItem._NombreConcepto = "";
4622 
4623  this._CurrentItem._NumEfectos = 0;
4624  this._CurrentItem._NumEfectosPro = 0;
4625  this._CurrentItem._Procesado = false;
4626  this._CurrentItem._Plantilla = "";
4627  this._CurrentItem._NombrePlantilla = "";
4628  this._CurrentItem._NombreConcepto = "";
4629 
4630  this._CurrentItem._CliNombre = "";
4631  this._CurrentItem._CliDireccion = "";
4632  this._CurrentItem._CliCodPos = "";
4633  this._CurrentItem._CliPoblacion = "";
4634  this._CurrentItem._CliProvincia = "";
4635  this._CurrentItem._CliPais = "";
4636  this._CurrentItem._NombreCliPais = "";
4637  this._CurrentItem._CliNif = "";
4638 
4639 
4640  this._CurrentItem._CliIbanCtaBancaria = "";
4641  this._CurrentItem._CliBicCtaBancaria = "";
4642 
4643  this._CurrentItem._MandatoOrigen = "";
4644  this._CurrentItem._MandatoContador = 0;
4645 
4646  this._CurrentItem._FechaCreac = DateTime.Today;
4647  this._CurrentItem._EmpNombre = "";
4648  this._CurrentItem._EmpNombre2 = "";
4649  this._CurrentItem._EmpNif = "";
4650  this._CurrentItem._EmpDireccion = "";
4651  this._CurrentItem._EmpCodPos = "";
4652  this._CurrentItem._EmpPoblacion = "";
4653  this._CurrentItem._EmpProvincia = "";
4654  this._CurrentItem._EmpPais = "";
4655  this._CurrentItem._NombreEmpPais = "";
4656 
4657  //this._RegistroNuevoMandato(MandatosFormasCreacion.NuevoMandato,)
4658 
4659  return;
4660  }
4661 
4662 
4663  #endregion MÉTODOS PRIVADOS
4664 
4665 
4666  #region MÉTODOS PÚBLICOS
4667 
4668 
4674  {
4675  string lcElementoComboCuentaBancaria = "", lcBanco = "";
4676  this._dicCuentasBanc_Cli.Clear();
4677 
4678  // Guardo en el diccionario interno '_dicCuentasBanc_Cli' la definición string y el código integer de cada una de las cuentas bancarias
4679  // del cliente.
4680  //
4681 
4682  foreach (Cliente.DatosBancarios.DatoBancario loDatoBancario in this._oCliente._TRelDatosBancarios._Items)
4683  {
4684  if (!string.IsNullOrWhiteSpace(loDatoBancario._CuentaIban))
4685  {
4686  // Del nombre del banco mostraré 10 dígitos para que haya espacio para visualizar la cuenta bancaria sin que quede recortada en la
4687  // columna de la grid.
4688  //
4689  lcBanco = loDatoBancario._Banco.Trim();
4690  if (lcBanco.Length > 10)
4691  lcBanco = lcBanco.Substring(0, 10);
4692 
4693  lcElementoComboCuentaBancaria = lcBanco + " " + loDatoBancario._Iban + " " +
4694  loDatoBancario._CuentaIban.Substring(0, 4) + " " +
4695  loDatoBancario._CuentaIban.Substring(4, 4) + " " +
4696  loDatoBancario._CuentaIban.Substring(8, 4) + " " +
4697  loDatoBancario._CuentaIban.Substring(12, 4) + " " +
4698  loDatoBancario._CuentaIban.Substring(16, 4) + " " +
4699  loDatoBancario._CuentaIban.Substring(20).Trim();
4700 
4701  this._dicCuentasBanc_Cli.Add(lcElementoComboCuentaBancaria, loDatoBancario._Linia);
4702  }
4703  }
4704 
4705  // Doy valor a la propiedad de negocio del ManteTRel de mandatos por cliente en la que se indica los posibles valores a mostrar en la columna
4706  // de tipo combo Cuenta Bancaria.
4707  //
4708  List<object> lstListaBanc_Cli = new List<object>();
4709  foreach (string item in this._dicCuentasBanc_Cli.Keys)
4710  lstListaBanc_Cli.Add(item);
4711 
4712  this._ListDefCampos["_Banc_CliVisual"]._ComboValues = lstListaBanc_Cli;
4713 
4714 
4715  return;
4716  }
4717 
4718 
4725  public bool _DatosCorrectos(out string tcMensajeError)
4726  {
4727  tcMensajeError = "";
4728 
4729  // Verificar que no haya algún mandato sin cuenta bancaria asociada.
4730  //
4731  List<string> lstMandatosSinBanco = this._Items.Where(x => !string.IsNullOrWhiteSpace(x._Mandato) && x._Banc_Cli == 0).Select(x => x._Mandato).ToList<string>();
4732 
4733  if (lstMandatosSinBanco.Count > 0 )
4734  {
4735  tcMensajeError = "Detectados mandatos sin cuenta bancaria asociada:" + Environment.NewLine + Environment.NewLine;
4736  foreach (string lcMandato in lstMandatosSinBanco)
4737  tcMensajeError += lcMandato + Environment.NewLine;
4738 
4739  // Libero memoria.
4740  lstMandatosSinBanco.Clear();
4741  lstMandatosSinBanco = null;
4742 
4743  return false;
4744  }
4745 
4746  // Libero memoria.
4747  lstMandatosSinBanco.Clear();
4748  lstMandatosSinBanco = null;
4749 
4750 
4751  // Recorremos todos los mandatos en busca de alguno que tenga la cuenta bancaria declarada, pero no tenga ningún mandato definido como mandato
4752  // por defecto.
4753  //
4754  foreach (MandatoCliente loMandato in this._Items)
4755  {
4756  if (loMandato.Fila_Plena())
4757  {
4758  if (loMandato._Banc_Cli != 0 && loMandato._Defecto == false)
4759  {
4760  // Estamos situados en un mandato que tiene cuenta bancaria y no está marcado como defecto, vamos a verificar que para esta cuenta bancaria
4761  // existe al menos otro mandato marcado como defecto.
4762  //
4763  MandatoCliente loMandatoBusqueda = this._Items.Where(x => !string.IsNullOrWhiteSpace(x._Mandato) && x._Banc_Cli == loMandato._Banc_Cli && x._Defecto == true).FirstOrDefault();
4764  if (loMandatoBusqueda == null)
4765  {
4766  // No hemos encontrado otro mandato con esta cuenta bancaria y que esté marcado como defecto, avisamos.
4767  //
4768 
4769  // A partir del integer _Banc_Cli obtengo la definición de la cuenta bancaria.
4770  //
4771  string lcCuentaBancaria = this._dicCuentasBanc_Cli.FirstOrDefault(x => x.Value == loMandato._Banc_Cli).Key;
4772 
4773  if (!string.IsNullOrWhiteSpace(lcCuentaBancaria))
4774  {
4775  tcMensajeError = "La cuenta bancaria siguiente no tiene mandato por defecto definido." + Environment.NewLine + Environment.NewLine + lcCuentaBancaria;
4776  return false;
4777  }
4778  }
4779  }
4780  }
4781  }
4782 
4783  return true;
4784  }
4785 
4786 
4792  public MandatoCliente _GetRegMandato(string tcMandato)
4793  {
4794  if (this._Items.Count == 0)
4795  return null;
4796 
4797  MandatoCliente loMandato = this._Items.Where(x => x._Cliente == this._oCliente._Codigo && x._Mandato == tcMandato).FirstOrDefault();
4798 
4799  return loMandato;
4800  }
4801 
4812  public bool _RellenarRegistroNuevoMandato(MandatosFormasCreacion toFormaCreacionMandato, MandatosFormatosCodigo teFormatoCodigoMandato,
4813  InfoClienteGenerarMandatos toClienteGenerarMandato)
4814  {
4815  return rellenarRegistroNuevoMandato(toFormaCreacionMandato, teFormatoCodigoMandato, null, "", toClienteGenerarMandato);
4816  }
4817 
4818 
4829  public bool _RellenarRegistroNuevoMandato(MandatosFormasCreacion toFormaCreacionMandato, MandatosFormatosCodigo teFormatoCodigoMandato,
4830  MandatoCliente toMandatoOrigen = null, string tcMandatoLibre = "")
4831  {
4832  return rellenarRegistroNuevoMandato(toFormaCreacionMandato, teFormatoCodigoMandato, toMandatoOrigen, tcMandatoLibre, null);
4833  }
4834 
4835 
4847  private bool rellenarRegistroNuevoMandato(MandatosFormasCreacion toFormaCreacionMandato, MandatosFormatosCodigo teFormatoCodigoMandato,
4848  MandatoCliente toMandatoOrigen = null, string tcMandatoLibre = "",
4849  InfoClienteGenerarMandatos toClienteGenerarMandato = null)
4850  {
4851  bool llOk = false;
4852  string lcCodigoNuevoMandato = "";
4853  int lnContadorMandatosCLiente;
4854 
4855  try
4856  {
4857  this._bIsLoading = true;
4858 
4859 
4860  if (toFormaCreacionMandato == MandatosFormasCreacion.RevisionMandatoOrigen || toFormaCreacionMandato == MandatosFormasCreacion.DuplicadoMandatoOrigen)
4861  ((MandatosCliente.MandatoCliente)this._CurrentItem)._CopiarDatosDeMandatoOrigen(toMandatoOrigen);
4862 
4863  // Obtener nuevo código de mandato SEPA.
4864  //
4865  if (teFormatoCodigoMandato == MandatosFormatosCodigo.CodigoEstandar || teFormatoCodigoMandato == MandatosFormatosCodigo.UtilizarCodCli)
4866  lcCodigoNuevoMandato = SEPA._ObtenerCodigoNuevoMandato(this._oCliente._Codigo, this._oCliente, "", "", teFormatoCodigoMandato);
4867  else
4868  {
4869  if (teFormatoCodigoMandato == MandatosFormatosCodigo.CodigoLibre)
4870  {
4871  lcCodigoNuevoMandato = tcMandatoLibre;
4872  }
4873  else
4874  lcCodigoNuevoMandato = new string(' ', 35);
4875  }
4876 
4877 
4878  // Obtener el contador de mandato que le corresponderá al nuevo registro de mandato que estoy creando.
4879  //
4880  if (teFormatoCodigoMandato == MandatosFormatosCodigo.CodigoEstandar)
4881  {
4882  int lnAuxiliar = 19 - (this._nDigitos - 4);
4883  int lnLenMandato = lcCodigoNuevoMandato.Length;
4884 
4885  lnContadorMandatosCLiente = Convert.ToInt32(lcCodigoNuevoMandato.Substring(lnLenMandato - lnAuxiliar + 1));
4886 
4887  //CODIGO FOX lnContadorCli = INT(VAL(RIGHT(lcCodNuevoMandato, 19 - (wn_digitos - 4))))
4888  }
4889  else
4890  {
4891  lnContadorMandatosCLiente = this._ObtenerMaxContadorMandatosCliente();
4892  lnContadorMandatosCLiente++;
4893  }
4894 
4895  // Rellenar los campos del registro.
4896  //
4897 
4898  // Marco si la linea se ha creado con criterio de código libre.
4899  //
4900  this._CurrentItem._MandatoEntradaLibre = (teFormatoCodigoMandato == MandatosFormatosCodigo.CodigoLibre);
4901 
4902  this._CurrentItem._Mandato = lcCodigoNuevoMandato;
4903  this._CurrentItem._MandatoContador = lnContadorMandatosCLiente;
4904  this._CurrentItem._CliNombre = this._oCliente._Nombre;
4905  this._CurrentItem._CliDireccion = this._oCliente._Direccion;
4906  this._CurrentItem._CliCodPos = this._oCliente._CodPost;
4907  this._CurrentItem._CliPoblacion = this._oCliente._Poblacion;
4908  this._CurrentItem._CliProvincia = this._oCliente._Provincia;
4909  this._CurrentItem._CliPais = this._oCliente._Pais;
4910  this._CurrentItem._CliNif = this._oCliente._NIF;
4911 
4912  if (toFormaCreacionMandato != MandatosFormasCreacion.DuplicadoMandatoOrigen)
4913  {
4914  if (toFormaCreacionMandato != MandatosFormasCreacion.GeneracionMasivaMandatos)
4915  {
4916  // En creación manual de de nuevo mandato sin mandato origen y en revisión de mandato origen ponemos la cuenta bancaria
4917  // predeterminada del cliente
4918  //
4919  this._CurrentItem._Banc_Cli = this._oCliente._BancoPredet_Linia;
4920  this._CurrentItem._CliIbanCtaBancaria = this._oCliente._BancoPredet_Iban + this._oCliente._BancoPredet_CuentaIban;
4921  this._CurrentItem._CliBicCtaBancaria = this._oCliente._BancoPredet_Swift;
4922  }
4923  else
4924  {
4925  // En creación desde generación masiva de mandatos el banco se ofrece por defecto en pantalla pero el usuario puede
4926  // cambiarlo.
4927  //
4928  this._CurrentItem._Banc_Cli = toClienteGenerarMandato._Banc_Cli;
4929  this._CurrentItem._CliIbanCtaBancaria = toClienteGenerarMandato._Iban;
4930  this._CurrentItem._CliBicCtaBancaria = toClienteGenerarMandato._Bic;
4931  }
4932  }
4933  else
4934  {
4935  // En duplicación de mandato ponemos los datos de la cuenta bancaria que habia en el mandato original.
4936  //
4937  this._CurrentItem._Banc_Cli = toMandatoOrigen._Banc_Cli;
4938  this._CurrentItem._CliIbanCtaBancaria = toMandatoOrigen._CliIbanCtaBancaria;
4939  this._CurrentItem._CliBicCtaBancaria = toMandatoOrigen._CliBicCtaBancaria;
4940  }
4941 
4942  // Código de acreedor de la empresa que ha de imprimirse a la carta notificación de mandato SEPA.
4943  //
4944  string lcCodAcreedor = SEPA._CodAcreedorSepaEmpresa(this._cPaisEmpresa, this._cCifEmpresa);
4945  this._CurrentItem._EmpNif = lcCodAcreedor;
4946 
4947  this._CurrentItem._EmpNombre = this._cNombreEmpresa;
4948  this._CurrentItem._EmpNombre2 = this._cNombre2Empresa;
4949  this._CurrentItem._EmpDireccion = this._cDireccionEmpresa;
4950 
4951  this._CurrentItem._EmpCodPos = this._cCodPosEmpresa;
4952  this._CurrentItem._EmpPoblacion = this._cPoblacionEmpresa;
4953  this._CurrentItem._EmpProvincia = this._cProvinciaEmpresa;
4954 
4955  if (!string.IsNullOrWhiteSpace(this._cPaisEmpresa))
4956  this._CurrentItem._EmpPais = this._cPaisEmpresa;
4957  else
4958  this._CurrentItem._EmpPais = "034";
4959 
4960  switch (toFormaCreacionMandato)
4961  {
4962  case MandatosFormasCreacion.NuevoMandato:
4963  case MandatosFormasCreacion.GeneracionMasivaMandatos:
4964 
4965  // Estamos creando un nuevo mandato sin ningún mandato origen.
4966  //
4967 
4968  if (toFormaCreacionMandato != MandatosFormasCreacion.GeneracionMasivaMandatos)
4969  {
4970  // Creación desde ficha clientes, grid mandatos pulsando Insertar
4971  //
4972 
4973  this._CurrentItem._PoblacionFirma = this._oCliente._Poblacion;
4974 
4975  this._CurrentItem._TipoMandato = 1; // Por defecto SDD-CORE
4976  this._CurrentItem._TipoPago = 1; // Por defecto RECURRENTE
4977  this._CurrentItem._NumEfectos = 0;
4978  if (this._Items.Count == 1)
4979  this._CurrentItem._Defecto = true;
4980 
4981  if (teFormatoCodigoMandato == MandatosFormatosCodigo.UtilizarCodCli)
4982  this._CurrentItem._FechaFirma = new DateTime(2009, 10, 31);
4983  }
4984  else
4985  {
4986  // Creación de mandato desde proceso de generación masiva de mandatos.
4987  //
4988 
4989  this._CurrentItem._PoblacionFirma = toClienteGenerarMandato._PoblacionFirma;
4990  this._CurrentItem._TipoMandato = toClienteGenerarMandato._Tipo;
4991  this._CurrentItem._TipoPago = toClienteGenerarMandato._TipoPago;
4992  this._CurrentItem._Concepto = toClienteGenerarMandato._MandatoConcepto;
4993  this._CurrentItem._Plantilla = toClienteGenerarMandato._Plantilla;
4994  this._CurrentItem._FechaFirma = toClienteGenerarMandato._MandatoFechaFirma;
4995  this._CurrentItem._FechaFin = toClienteGenerarMandato._MandatoFechaFin;
4996  this._CurrentItem._NumEfectos = toClienteGenerarMandato._TipoPago == 1 ? 0 : 1;
4997  this._CurrentItem._PersPago = toClienteGenerarMandato._PersPago;
4998  if (this._CurrentItem._Linia == 1)
4999  {
5000  this._CurrentItem._Defecto = true;
5001  }
5002  else
5003  {
5004  // No es el primer mandato que se le genera al cliente.
5005  //
5006 
5007  // Buscamos si ya existe un mandato por defecto en este cliente para este banco.
5008  //
5009  MandatoCliente loMandato = this._Items.Where(x => x._Defecto &&
5010  x._Banc_Cli == toClienteGenerarMandato._Banc_Cli).FirstOrDefault();
5011  bool llYaExisteMandDefectoBancCli = loMandato != null;
5012  if (!llYaExisteMandDefectoBancCli)
5013  {
5014  // Si es el primer registro lo marcamos como mandato por defecto INDEPENDIENTEMENTE de si en la pantalla
5015  // MANDGEN2.SCX han marcado la columna DEFECTO como si no lo han marcado. Si solo hay un mandato, mandato
5016  // por defecto y punto.
5017  //
5018  this._CurrentItem._Defecto = true;
5019  }
5020  else
5021  {
5022  // Caso de que ya existiese un mandato por defecto entonces gestionamos solo el caso en que hayamos
5023  // marcado por defecto el mandato nuevo, y el otro de la misma cuenta bancaria tambien lo esté. En ese
5024  // caso manda el que viene de la generación masiva de mandatos y marcaremos el nuevo por defecto y
5025  // desmarcaremos el anterior.
5026  //
5027  if (toClienteGenerarMandato._Defecto)
5028  {
5029  loMandato._Defecto = false;
5030  this._CurrentItem._Defecto = true;
5031  }
5032  }
5033  }
5034  }
5035 
5036  // Si se trabaja con mandatos por empresa, anotar la empresa activa en el ManteTRel de empresas por mandato.
5037  //
5038  // Si se ha selecionado entrada de código de mandato libre, en este instante el código de mandato no está aún declarado
5039  // por lo que no ponemos las empresas de la linea de mandato original que sirvió para crear ésta.
5040  //
5041  if (this._lMandEmp && !string.IsNullOrWhiteSpace(this._CurrentItem._Mandato))
5042  {
5043  // Acabo de crear el mandato, añado el registro de la empresa en la que estoy.
5044  //
5045  EmpresasMandato loEmpresasMandato = this._CurrentItem._TRelEmpresasMandato;
5046 
5047  // Añado el registro
5048  EmpresasMandato.EmpresaMandato loNuevoRegEmpresaMandato = loEmpresasMandato._NewItem();
5049  loNuevoRegEmpresaMandato._Empresa = this._cEmpresa;
5050  }
5051 
5052  break;
5053 
5054  default:
5055  // Estamos creando un mandato con otro mandato como origen (revisión o duplicado).
5056  //
5057  this._CurrentItem._Defecto = false;
5058 
5059  this._CurrentItem._MandatoOrigen = toMandatoOrigen._Mandato;
5060 
5061  if (toFormaCreacionMandato == MandatosFormasCreacion.RevisionMandatoOrigen)
5062  {
5063  // Si es revisión vacío estas fechas, si fuera duplicación mantengo las fechas del mandato original.
5064  //
5065  this._CurrentItem._FechaFirma = null;
5066  this._CurrentItem._FechaCarta = null;
5067  }
5068  this._CurrentItem._NumEfectosPro = 0;
5069  this._CurrentItem._Procesado = false;
5070  if (teFormatoCodigoMandato == MandatosFormatosCodigo.UtilizarCodCli)
5071  {
5072  this._CurrentItem._TipoPago = 1;
5073  this._CurrentItem._FechaFirma = new DateTime(2009, 10, 31);
5074  }
5075 
5076  // Si se trabaja con mandatos por empresa, anotar la empresa activa en el ManteTRel de empresas por mandato.
5077  //
5078  // Si se ha selecionado entrada de código de mandato libre, en este instante el código de mandato no está aún declarado
5079  // por lo que no ponemos las empresas de la linea de mandato original que sirvió para crear ésta.
5080  //
5081  if (this._lMandEmp && !string.IsNullOrWhiteSpace(this._CurrentItem._Mandato))
5082  {
5083  // Acabo de crear el mandato, clono las empresas del mandato original
5084  //
5085  this._CurrentItem._TRelEmpresasMandato = toMandatoOrigen._TRelEmpresasMandato._Clonar(lcCodigoNuevoMandato);
5086  }
5087  break;
5088  }
5089 
5090  this._bIsLoading = false;
5091  }
5092  catch (Exception e)
5093  {
5094  DB.Registrar_Error(e);
5095  llOk = false;
5096  }
5097 
5098 
5099  return llOk;
5100  }
5101 
5106  {
5107  if (this._Items.Count == 0)
5108  return 0;
5109 
5110  int lnMaxContador = this._Items.Select(x => x._MandatoContador).Max();
5111 
5112  return lnMaxContador;
5113  }
5114 
5115 
5116  #endregion MÉTODOS PÚBLICOS
5117 
5118 
5122  public class Clave : IClaves
5123  {
5127  public ClaveTRel _Cliente { get; set; }
5128 
5132  public ClaveTRel _Linia { get; set; }
5133 
5137  public Clave()
5138  {
5139  _Cliente = new ClaveTRel();
5140  _Cliente._EsFiltro = true;
5141  _Cliente._EsCampoLinea = false;
5142 
5143  _Linia = new ClaveTRel();
5144  _Linia._EsFiltro = false;
5145  _Linia._EsCampoLinea = true;
5146 
5147  _Cliente._Valor = "";
5148  _Linia._Valor = 0;
5149 
5150  return;
5151  }
5152  }
5153 
5154 
5158  public class MandatoCliente : ILinTRel
5159  {
5160  #region PROPIEDADES PÚBLICAS
5161 
5162 
5166  public string _Cliente
5167  {
5168  get
5169  {
5170  return this._cCliente;
5171  }
5172  set
5173  {
5174  this._cCliente = value;
5175  }
5176  }
5177  private string _cCliente = "";
5178 
5179 
5183  public int _Linia
5184  {
5185  get
5186  {
5187  return _nLinia;
5188  }
5189  set
5190  {
5191  _nLinia = value;
5192  }
5193  }
5194  private int _nLinia = 0;
5195 
5196 
5200  public string _Mandato
5201  {
5202  get
5203  {
5204  return this._cMandato;
5205  }
5206  set
5207  {
5208  bool llCambio = (this._cMandato.Trim() != value.Trim());
5209  if (!llCambio)
5210  return;
5211 
5212  string lcMandatoAnterior = this._cMandato;
5213  string lcMandatoIntroducido = value.Trim().PadRight(35, ' ');
5214 
5215  if (loParent != null && !loParent._bIsLoading)
5216  {
5217  // Si es un mandato que se ha entrado manualmente con formato libre haremos unas cuantas verificaciones antes de continuar.
5218  //
5219  if (this._MandatoEntradaLibre)
5220  {
5221  // Verifico que el mandato introducido no tenga carácteres no válidos.
5222  //
5223  if (!SEPA._CodigoMandatoFormatoValido(ref lcMandatoIntroducido))
5224  {
5225  this._oMandatosCliente._Error_Message_LineaMandato = "El mandato introducido " + lcMandatoIntroducido.Trim() + " tiene carácteres no válidos." + Environment.NewLine + Environment.NewLine +
5226  "Se permiten carácteres alfabéticos mayúsculas, minúsculas, dígitos numéricos, espacio, y cualquier de los siguientes carácteres individuales: " +
5227  Environment.NewLine + Environment.NewLine + "/ - ? : ( ) . , ' +";
5228  return;
5229  }
5230 
5231  if (!this.validarMandatoLibre(lcMandatoIntroducido))
5232  return;
5233  }
5234  }
5235 
5236 
5237  // Actualizar valor propiedad.
5238  //
5239  this._cMandato = lcMandatoIntroducido;
5240 
5241 
5242  if (loParent != null && !loParent._bIsLoading)
5243  {
5244  // Trabajams con configuración de mandatos por empresa activado.
5245  //
5246  if (this._oMandatosCliente._lMandEmp)
5247  {
5248  // El usuario acaba de introducir el mandato libre ahora mismo.
5249  //
5250  if (this._MandatoEntradaLibre && !string.IsNullOrWhiteSpace(lcMandatoIntroducido))
5251  {
5252  // Crear registro de empresa por mandato para el nuevo mandato que se ha introducido.
5253  //
5254  this.mandatoLibreGesRegEmpresasMandato(lcMandatoAnterior, lcMandatoIntroducido);
5255  }
5256  }
5257  }
5258 
5259  }
5260  }
5261  private string _cMandato = "";
5262 
5263 
5269  protected internal string _MandatoOriginalEnLoad = "";
5270 
5271 
5275  public int _Banc_Cli
5276  {
5277  get
5278  {
5279  return _nBanc_Cli;
5280  }
5281  set
5282  {
5283  bool llCambio = (this._nBanc_Cli != value);
5284  if (!llCambio)
5285  return;
5286 
5287  if (loParent != null && !loParent._bIsLoading)
5288  {
5289  // Estos controles solo los haremos cuando el usuario está interaccionando con
5290  // el ManteTRel de Mandatos, no en tiempo de carga del mismo.
5291 
5292  // Si el mandato está procesado no permitimos modificar cuenta bancaria del mandato.
5293  //
5294  if (this.mandatoProcesado("cuenta bancaria"))
5295  return;
5296 
5297  // Si encontramos previsión de cobro remesada con este mandato no permitimos
5298  // cambiar la cuenta bancaria del mandato.
5299  //
5300  if (this.existePreviClRemesadaMandato(this._Mandato))
5301  return;
5302 
5303  if (this._Defecto)
5304  {
5305  if (!this._oMandatosCliente._lMandEmp)
5306  {
5307  MandatoCliente loMandatoCliente = this._oMandatosCliente._Items.Where(x => x._Banc_Cli == value && x._Defecto && !string.IsNullOrWhiteSpace(x._Mandato) && x._Mandato != this._Mandato).FirstOrDefault();
5308  if (loMandatoCliente != null)
5309  {
5310  this._oMandatosCliente._Error_Message_LineaMandato = "Ya existe otro nº de mandato (" + loMandatoCliente._Mandato.Trim() + ") marcado como mandato defecto, con la misma cuenta bancaria que la que acaba de seleccionar." +
5311  Environment.NewLine + Environment.NewLine + loMandatoCliente._Banc_CliVisual.Trim() + Environment.NewLine + Environment.NewLine +
5312  "Para cada cuenta bancaria solo puede existir un único mandato marcado como mandato defecto.";
5313  return;
5314  }
5315  }
5316  else
5317  {
5318  bool llOk = this._ControlMandato_Defecto_Empresas(this._Mandato, value, 2);
5319  if (!llOk)
5320  return;
5321  }
5322  }
5323 
5324 
5325  // Ponemos el IBAN, BIC de la cuenta bancaria seleccionada en el registro del mandato.
5326  //
5327  Cliente.DatosBancarios.DatoBancario loDatoBancario = this._oCliente._TRelDatosBancarios._Items.Where(x => x._Linia == value).FirstOrDefault();
5328  if (loDatoBancario != null)
5329  {
5330  this._cCliBicCtaBancaria = loDatoBancario._Swift;
5331  this._cCliIbanCtaBancaria = loDatoBancario._Iban + loDatoBancario._CuentaIban;
5332  }
5333 
5334 
5335  // Gestión para guardar el valor original de _Banc_Cli en este mandato y el flag de cambio de valor
5336  // en _Banc_Cli para así al hacer el _Save() del ManteTRel de mandatos de cliente poder hacer los cambios
5337  // en la base de datos que se tienen que encadenar como consecuencia del cambio de _Banc_Cli.
5338  //
5339  if (!this._lCambioBanc_Cli)
5340  {
5341  // Guardo el valor original, lo utilizaré en el _Save() del ManteTRel si hubo cambio para actualizar GESTOIN!C_ALBVEN y COMUNES!PREVI_CL
5342  //
5343  this._nBanc_CliOriginal = this._nBanc_Cli;
5344  this._lCambioBanc_Cli = true;
5345  }
5346  else
5347  {
5348  if (value == this._nBanc_CliOriginal)
5349  {
5350  // Si me han vuelto a cambiar el valor dejando el valor que habia originalmente, no habrá habido cmabio.
5351  //
5352  this._lCambioBanc_Cli = false;
5353  }
5354  }
5355  }
5356 
5357  this._nBanc_Cli = value;
5358  }
5359  }
5360  private int _nBanc_Cli = 0;
5361 
5362 
5370  public int _Banc_CliOriginal
5371  {
5372  get
5373  {
5374  return _nBanc_CliOriginal;
5375  }
5376  set
5377  {
5378  _nBanc_CliOriginal = value;
5379  }
5380  }
5381  private int _nBanc_CliOriginal = 0;
5382 
5383 
5388  public string _Banc_CliVisual
5389  {
5390  get
5391  {
5392  string lcCuentaBancaria = ((Cliente.MandatosCliente)this._Parent)._dicCuentasBanc_Cli.FirstOrDefault(x => x.Value == this._Banc_Cli).Key;
5393 
5394  return lcCuentaBancaria;
5395  }
5396  set
5397  {
5398  int lnBanc_Cli = 0;
5399 
5400  this._oMandatosCliente._dicCuentasBanc_Cli.TryGetValue(value, out lnBanc_Cli);
5401 
5402  this._Banc_Cli = lnBanc_Cli;
5403  }
5404  }
5405 
5406 
5411  public bool _CambioBanc_Cli
5412  {
5413  get
5414  {
5415  return this._lCambioBanc_Cli;
5416  }
5417  set
5418  {
5419  this._lCambioBanc_Cli = value;
5420  }
5421  }
5422  private bool _lCambioBanc_Cli = false;
5423 
5424 
5428  public bool _Defecto
5429  {
5430  get
5431  {
5432  return this._lDefecto;
5433  }
5434  set
5435  {
5436  if (loParent != null && !loParent._bIsLoading)
5437  {
5438  bool llCambio = (this._lDefecto != value);
5439  if (llCambio)
5440  {
5441  if (value)
5442  {
5443  if (!this._oMandatosCliente._lMandEmp)
5444  {
5445  int lnLinea = this._Linia;
5446  int lnBanc_Cli = this._Banc_Cli;
5447 
5448  // Quitar la marca de defecto de cualquier otro mandato diferente del actual, que pueda haber con la misma cuenta bancaria.
5449  //
5450  this._oMandatosCliente._Items.Where(x => x._Banc_Cli == lnBanc_Cli && x._Linia != lnLinea).ToList().ForEach(x => x._Defecto = false);
5451  }
5452  else
5453  {
5454  bool llOk = this._ControlMandato_Defecto_Empresas(this._Mandato, this._Banc_Cli, 1);
5455  if (!llOk)
5456  return;
5457  }
5458  }
5459  }
5460  }
5461 
5462  this._lDefecto = value;
5463  }
5464  }
5465  private bool _lDefecto = false;
5466 
5467 
5471  public DateTime? _FechaFin
5472  {
5473  get
5474  {
5475  return this._dFechaFin;
5476  }
5477  set
5478  {
5479  if (loParent != null && !loParent._bIsLoading)
5480  {
5481  if (value < new DateTime(1900, 1, 1)) //Bug 182269
5482  {
5483  value = null;
5484  this._dFechaFin = value;
5485  return;
5486  }
5487 
5488  bool llCambio = (this._dFechaFin != value);
5489 
5490  if (llCambio)
5491  {
5492  if (this.mandatoProcesado("fecha fin"))
5493  return;
5494  }
5495  }
5496  this._dFechaFin = value;
5497  }
5498  }
5499  private DateTime? _dFechaFin = null;
5500 
5501 
5505  public int _TipoPago
5506  {
5507  get
5508  {
5509  return this._nTipoPago;
5510  }
5511  set
5512  {
5513  if (loParent != null && !loParent._bIsLoading)
5514  {
5515  bool llCambio = (this._nTipoPago != value);
5516 
5517  if (llCambio)
5518  {
5519  if (this.mandatoProcesado("tipo de pago"))
5520  return;
5521 
5522  this._NumEfectos = (value == 1 ? 0 : 1);
5523  }
5524  }
5525  this._nTipoPago = value;
5526  }
5527  }
5528  private int _nTipoPago = 1;
5529 
5530 
5535  public string _TipoPagoVisual
5536  {
5537  get
5538  {
5539  if (Enum.IsDefined(typeof(MandatosTipoPago), this._TipoPago))
5540  return sage.ew.functions.FUNCTIONS._GetEnumDescription((MandatosTipoPago)this._TipoPago);
5541 
5542  return "";
5543  }
5544  set
5545  {
5546  if (value == null)
5547  value = "1";
5548 
5549  MandatosTipoPago loTmpTipo = sage.ew.functions.FUNCTIONS._GetEnumFromDescription<MandatosTipoPago>(value, MandatosTipoPago.Recurrente);
5550 
5551  if (loParent != null && !loParent._bIsLoading)
5552  {
5553  bool llCambio = (this._nTipoPago != (int)loTmpTipo);
5554 
5555  if (llCambio)
5556  {
5557  if (this.mandatoProcesado("tipo de pago"))
5558  return;
5559 
5560  this._nNumEfectos = loTmpTipo == MandatosTipoPago.Recurrente ? 0 : 1;
5561  }
5562  }
5563  this._nTipoPago = (int)loTmpTipo;
5564  }
5565  }
5566 
5567 
5571  public int _TipoMandato
5572  {
5573  get
5574  {
5575  return this._nTipoMandato;
5576  }
5577  set
5578  {
5579  if (loParent != null && !loParent._bIsLoading)
5580  {
5581  bool llCambio = (this._nTipoMandato != value);
5582 
5583  if (llCambio)
5584  {
5585  if (this.mandatoProcesado("tipo"))
5586  return;
5587  }
5588 
5589  }
5590  this._nTipoMandato = value;
5591  }
5592  }
5593  private int _nTipoMandato = 1;
5594 
5599  public string _TipoMandatoVisual
5600  {
5601  get
5602  {
5603  if (Enum.IsDefined(typeof(MandatosTipo), this._TipoMandato))
5604  return sage.ew.functions.FUNCTIONS._GetEnumDescription((MandatosTipo)this._TipoMandato);
5605  return "";
5606  }
5607  set
5608  {
5609  if (value == null)
5610  value = "1";
5611 
5612  MandatosTipo loTmpTipo = sage.ew.functions.FUNCTIONS._GetEnumFromDescription<MandatosTipo>(value, MandatosTipo.SDD_CORE);
5613 
5614  if (loParent != null && !loParent._bIsLoading)
5615  {
5616  bool llCambio = (this._nTipoMandato != (int)loTmpTipo);
5617 
5618  if (llCambio)
5619  {
5620  if (this.mandatoProcesado("tipo"))
5621  return;
5622  }
5623  }
5624  this._nTipoMandato = (int)loTmpTipo;
5625  }
5626  }
5627 
5628 
5632  public DateTime? _FechaCarta
5633  {
5634  get
5635  {
5636  return this._dFechaCarta;
5637  }
5638  set
5639  {
5640  if (loParent != null && !loParent._bIsLoading) // En la carga no hemos de validar nada
5641  {
5642  if (value < new DateTime(1900, 1, 1)) //Bug 182269
5643  {
5644  value = null;
5645  this._dFechaCarta = value;
5646  return;
5647  }
5648 
5649  bool llCambio = (this._dFechaCarta != value);
5650  if (llCambio)
5651  {
5652  if (this.mandatoProcesado("fecha de carta"))
5653  return;
5654 
5655  if (value != null && this._dFechaFirma != null && value > this._dFechaFirma)
5656  {
5657  bool llMandatoConCodigoCliente = (this._Mandato.Trim().Length < 35 && this._MandatoEntradaLibre == false && this._Mandato.Contains(this._oCliente._Codigo) && this._dFechaFirma == new DateTime(2009, 10, 31));
5658 
5659  // En este tipo de mandatos al generarlos se pone la fecha de firma a 31/10/09 de forma automática, es una fecha ficticia y virtual por lo que no precisa control alguno.
5660  //
5661  if (!llMandatoConCodigoCliente)
5662  {
5663  this._oMandatosCliente._Error_Message_LineaMandato = "La fecha de la carta (" + Convert.ToDateTime(value).ToShortDateString() +
5664  ") no puede ser superior a la fecha de firma de la carta (" + Convert.ToDateTime(this._dFechaFirma).ToShortDateString() +
5665  ")." + Environment.NewLine + Environment.NewLine + "Imposible modificar fecha de la carta.";
5666  return;
5667  }
5668  }
5669  }
5670  }
5671  this._dFechaCarta = value;
5672  }
5673  }
5674  private DateTime? _dFechaCarta = null;
5675 
5676 
5680  public string _Carta
5681  {
5682  get
5683  {
5684  return this._cCarta;
5685  }
5686  set
5687  {
5688  this._cCarta = value;
5689  }
5690  }
5691  private string _cCarta = "";
5692 
5693 
5697  public DateTime? _FechaFirma
5698  {
5699  get
5700  {
5701  return this._dFechaFirma;
5702  }
5703  set
5704  {
5705  if (loParent != null && !loParent._bIsLoading) // En la carga no hemos de validar nada
5706  {
5707  if (value < new DateTime(1900, 1, 1)) //Bug 182269
5708  {
5709  value = null;
5710  this._dFechaFirma = value;
5711  return;
5712  }
5713 
5714  bool llCambio = (this._dFechaFirma != value);
5715 
5716  if (llCambio)
5717  {
5718  if (this._Procesado)
5719  {
5720  this._oMandatosCliente._Error_Message_LineaMandato = "Este mandato ya está marcado como procesado." + Environment.NewLine + Environment.NewLine + "Imposible modificar fecha de firma de mandato.";
5721  return;
5722  }
5723 
5724  if (value != null && this._dFechaCarta != null && value < this._dFechaCarta) // La condición this._dFechaFirma != null es por el segundo punto del bug 158728
5725  {
5726  bool llMandatoConCodigoCliente = (this._Mandato.Trim().Length < 35 && this._MandatoEntradaLibre == false && this._Mandato.Contains(this._oCliente._Codigo) && value == new DateTime(2009, 10, 31));
5727 
5728  // En este tipo de mandatos al generarlos se pone la fecha de firma a 31/10/09 de forma automática, es una fecha ficticia y virtual por lo que no precisa control alguno.
5729  //
5730  if (!llMandatoConCodigoCliente)
5731  {
5732  this._oMandatosCliente._Error_Message_LineaMandato = "La fecha de firma de la carta (" + Convert.ToDateTime(value).ToShortDateString() +
5733  ") no puede ser inferior a la fecha de la carta (" + Convert.ToDateTime(this._dFechaCarta).ToShortDateString() +
5734  ")." + Environment.NewLine + Environment.NewLine + "Imposible modificar fecha de firma de la carta.";
5735  return;
5736  }
5737  }
5738  }
5739  }
5740  this._dFechaFirma = value;
5741  }
5742  }
5743  private DateTime? _dFechaFirma = null;
5744 
5745 
5749  public string _PoblacionFirma
5750  {
5751  get
5752  {
5753  return this._cPoblacionFirma;
5754  }
5755  set
5756  {
5757  if (loParent != null && !loParent._bIsLoading) // En la carga no hemos de validar nada
5758  {
5759  bool llCambio = (this._cPoblacionFirma.Trim() != value.Trim());
5760  if (llCambio)
5761  {
5762  if (this._Procesado)
5763  {
5764  this._oMandatosCliente._Error_Message_LineaMandato = "Este mandato ya está marcado como procesado." + Environment.NewLine + Environment.NewLine + "Imposible modificar población firma de mandato.";
5765  return;
5766  }
5767  }
5768  }
5769  this._cPoblacionFirma = value;
5770  }
5771  }
5772  private string _cPoblacionFirma = "";
5773 
5774 
5778  public string _CliBicCtaBancaria
5779  {
5780  get
5781  {
5782  return this._cCliBicCtaBancaria;
5783  }
5784  set
5785  {
5786  if (loParent != null && !loParent._bIsLoading) // En la carga no hemos de validar nada
5787  {
5788  bool llCambio = (this._cCliBicCtaBancaria.Trim() != value.Trim());
5789  if (llCambio)
5790  {
5791  Cliente.DatosBancarios.DatoBancario loCuentaBancaria = this._oCliente._TRelDatosBancarios._Items.Where(x => x._Linia == this._Banc_Cli).FirstOrDefault();
5792  if (loCuentaBancaria != null)
5793  {
5794  if (!string.IsNullOrWhiteSpace(loCuentaBancaria._Swift) && value.Trim() != loCuentaBancaria._Swift.Trim())
5795  {
5796  if (string.IsNullOrWhiteSpace(value.Trim()))
5797  {
5798  this._oMandatosCliente._Warning_Message_LineaMandato = "!Atención! Ha eliminado el código BIC del mendato cuando en la cuenta bancaria de la ficha del cliente está declarado como '" + loCuentaBancaria._Swift.Trim()+"'.";
5799  }
5800  else
5801  {
5802  this._oMandatosCliente._Warning_Message_LineaMandato = "!Atención! El código BIC que ha introducido '" + value.Trim() + "', es diferente del declarado en la cuenta bancaria en la ficha del cliente, '" + loCuentaBancaria._Swift.Trim()+"'.";
5803  }
5804  }
5805  }
5806  }
5807  }
5808  this._cCliBicCtaBancaria = value;
5809  }
5810  }
5811  private string _cCliBicCtaBancaria = "";
5812 
5813 
5817  public string _PersPago
5818  {
5819  get
5820  {
5821  return this._cPersPago;
5822  }
5823  set
5824  {
5825  if (loParent != null && !loParent._bIsLoading) // En la carga no hemos de validar nada
5826  {
5827  bool llCambio = (this._cPersPago.Trim() != value.Trim());
5828  if (llCambio)
5829  {
5830  if (loParent != null && !loParent._bIsLoading) // En la carga no hemos de validar nada
5831  {
5832  if (this.mandatoProcesado("persona de pago"))
5833  return;
5834  }
5835  }
5836  }
5837  this._cPersPago = value;
5838  }
5839  }
5840  private string _cPersPago = "";
5841 
5842 
5846  public string _Concepto
5847  {
5848  get { return _cConcepto; }
5849  set
5850  {
5851  string lcAntNombreConcepto = this._cNombreConcepto;
5852 
5853  if (loParent != null)
5854  {
5855  if (!string.IsNullOrWhiteSpace(value))
5856  value = value.Trim().PadLeft(2, '0');
5857 
5858  if (value != _cConcepto)
5859  {
5860  if (loParent.CamposTRel_Validar_Valor("_Concepto", value, this))
5861  {
5862  value = _cConcepto;
5863  }
5864  }
5865  }
5866 
5867  if (loParent != null && !loParent._bIsLoading) // En la carga no hemos de validar nada
5868  {
5869  if (_cConcepto.Trim() != value.Trim())
5870  {
5871  if (this.mandatoProcesado("concepto"))
5872  {
5873  this._cNombreConcepto = lcAntNombreConcepto;
5874  return;
5875  }
5876  }
5877  }
5878  _cConcepto = value;
5879  }
5880  }
5881  private string _cConcepto = "";
5882 
5883 
5887  public string _NombreConcepto
5888  {
5889  get
5890  {
5891  return this._cNombreConcepto;
5892  }
5893  set
5894  {
5895  this._cNombreConcepto = value;
5896  }
5897  }
5898  private string _cNombreConcepto = "";
5899 
5900 
5904  public int _NumEfectos
5905  {
5906  get
5907  {
5908  return this._nNumEfectos;
5909  }
5910  set
5911  {
5912  if (loParent != null && !loParent._bIsLoading) // En la carga no hemos de validar nada
5913  {
5914  bool llCambio = (this._nNumEfectos != value);
5915  if (llCambio)
5916  {
5917  if (this._TipoPago == Convert.ToInt32(MandatosTipoPago.Único))
5918  {
5919  this._oMandatosCliente._Error_Message_LineaMandato = "Este mandato es de tipo 'ÚNICO'." + Environment.NewLine + Environment.NewLine +
5920  "Imposible modificar nº de efectos." + Environment.NewLine + Environment.NewLine +
5921  "Cambie el tipo de mandato a 'RECURRENTE' si fuera necesario.";
5922  return;
5923  }
5924 
5925  if (this._Procesado)
5926  {
5927  this._oMandatosCliente._Error_Message_LineaMandato = "Este mandato ya está marcado como procesado." + Environment.NewLine + Environment.NewLine +
5928  "Imposible modificar nº de efectos." + Environment.NewLine + Environment.NewLine +
5929  "Desmarque la columna 'Procesado' si fuera necesario.";
5930  return;
5931  }
5932  }
5933  }
5934  this._nNumEfectos = value;
5935 
5936  }
5937  }
5938  private int _nNumEfectos = 0;
5939 
5940 
5944  public int _NumEfectosPro
5945  {
5946  get
5947  {
5948  return this._nNumEfectosPro;
5949  }
5950  set
5951  {
5952  if (loParent != null && !loParent._bIsLoading) // En la carga no hemos de validar nada
5953  {
5954  bool llCambio = (this._nNumEfectosPro != value);
5955  if (llCambio)
5956  {
5957  if (this._Procesado)
5958  {
5959  this._oMandatosCliente._Error_Message_LineaMandato = "Este mandato ya está marcado como procesado." + Environment.NewLine + Environment.NewLine +
5960  "Imposible modificar nº de efectos procesados." + Environment.NewLine + Environment.NewLine +
5961  "Desmarque la columna 'Procesado' si fuera necesario.";
5962  return;
5963  }
5964  }
5965  }
5966  this._nNumEfectosPro = value;
5967  }
5968  }
5969  private int _nNumEfectosPro = 0;
5970 
5971 
5975  public bool _Procesado
5976  {
5977  get
5978  {
5979  return this._lProcesado;
5980  }
5981  set
5982  {
5983  if (loParent != null && !loParent._bIsLoading)
5984  {
5985  if (value != _lProcesado)
5986  {
5987  if (!this._lCambioProcesado)
5988  {
5989  // Guardo el valor original, lo utilizaré en el _Save() del ManteTRel si hubo cambio y el valor definitivo es true,
5990  // para actualizar GESTION!C_ALBVEN, COMUNES!PREVI_CL, COMUNES!CUOTAS.
5991  //
5992  this._lProcesadoOriginal = this._lProcesado;
5993  this._lCambioProcesado = true;
5994  }
5995  else
5996  {
5997  if (value == this._lProcesadoOriginal)
5998  {
5999  // Si me han vuelto a cambiar el valor dejando el valor que habia originalmente, no habrá habido cmabio.
6000  //
6001  this._lCambioProcesado = false;
6002  }
6003  }
6004  }
6005  }
6006  this._lProcesado = value;
6007  }
6008  }
6009  private bool _lProcesado = false;
6010 
6011 
6019  public bool _ProcesadoOriginal
6020  {
6021  get
6022  {
6023  return _lProcesadoOriginal;
6024  }
6025  set
6026  {
6027  _lProcesadoOriginal = value;
6028  }
6029  }
6030  private bool _lProcesadoOriginal = false;
6031 
6032 
6037  public bool _CambioProcesado
6038  {
6039  get
6040  {
6041  return this._lCambioProcesado;
6042  }
6043  set
6044  {
6045  this._lCambioProcesado = value;
6046  }
6047  }
6048  private bool _lCambioProcesado = false;
6049 
6050 
6054  public string _Plantilla
6055  {
6056  get { return _cPlantilla; }
6057  set
6058  {
6059  if (loParent != null) // PE-99815 en la carga no hemos de validar nada
6060  {
6061  if (!string.IsNullOrWhiteSpace(value))
6062  value = value.Trim().PadLeft(6, '0');
6063 
6064  if (value != _cPlantilla)
6065  {
6066  if (loParent.CamposTRel_Validar_Valor("_Plantilla", value, this))
6067  value = _cPlantilla;
6068  }
6069  }
6070 
6071  if (_cPlantilla != value)
6072  {
6073  _cPlantilla = value;
6074  }
6075 
6076  }
6077  }
6078  private string _cPlantilla = "";
6079 
6080 
6084  public string _NombrePlantilla
6085  {
6086  get
6087  {
6088  return this._cNombrePlantilla;
6089  }
6090  set
6091  {
6092  this._cNombrePlantilla = value;
6093  }
6094  }
6095  private string _cNombrePlantilla = "";
6096 
6097 
6101  public string _CliNombre
6102  {
6103  get
6104  {
6105  return this._cCliNombre;
6106  }
6107  set
6108  {
6109  this._cCliNombre = value;
6110  }
6111  }
6112  private string _cCliNombre = "";
6113 
6114 
6118  public string _CliNif
6119  {
6120  get
6121  {
6122  return this._cCliNif;
6123  }
6124  set
6125  {
6126  this._cCliNif = value;
6127  }
6128  }
6129  private string _cCliNif = "";
6130 
6131 
6135  public string _CliDireccion
6136  {
6137  get
6138  {
6139  return this._cCliDireccion;
6140  }
6141  set
6142  {
6143  this._cCliDireccion = value;
6144  }
6145  }
6146  private string _cCliDireccion = "";
6147 
6148 
6152  public string _CliCodPos
6153  {
6154  get
6155  {
6156  return this._cCliCodPos;
6157  }
6158  set
6159  {
6160  if (loParent != null && !loParent._bIsLoading) // PE-99815 en la carga no hemos de validar nada
6161  {
6162  if (value != _cCliCodPos)
6163  {
6164  if (loParent.CamposTRel_Validar_Valor("_CliCodPos", value, this))
6165  value = _cCliCodPos;
6166  }
6167  }
6168 
6169  if (_cCliCodPos != value)
6170  {
6171  _cCliCodPos = value;
6172  }
6173  }
6174  }
6175  private string _cCliCodPos = "";
6176 
6177 
6181  public string _CliPoblacion
6182  {
6183  get
6184  {
6185  return this._cCliPoblacion;
6186  }
6187  set
6188  {
6189  this._cCliPoblacion = value;
6190  }
6191  }
6192  private string _cCliPoblacion = "";
6193 
6194 
6198  public string _CliProvincia
6199  {
6200  get
6201  {
6202  return this._cCliProvincia;
6203  }
6204  set
6205  {
6206  this._cCliProvincia = value;
6207  }
6208  }
6209  private string _cCliProvincia = "";
6210 
6211 
6215  public string _CliPais
6216  {
6217  get { return _cCliPais; }
6218  set
6219  {
6220  if (loParent != null) // PE-99815 en la carga no hemos de validar nada
6221  {
6222  if (value != _cCliPais)
6223  {
6224  if (loParent.CamposTRel_Validar_Valor("_CliPais", value, this))
6225  value = _cCliPais;
6226  }
6227  }
6228 
6229  if (_cCliPais != value)
6230  {
6231  _cCliPais = value;
6232  }
6233 
6234  }
6235  }
6236  private string _cCliPais = "";
6237 
6238 
6242  public string _NombreCliPais
6243  {
6244  get
6245  {
6246  return this._cNombreCliPais;
6247  }
6248  set
6249  {
6250  this._cNombreCliPais = value;
6251  }
6252  }
6253  private string _cNombreCliPais = "";
6254 
6255 
6259  public string _CliIbanCtaBancaria
6260  {
6261  get
6262  {
6263  return this._cCliIbanCtaBancaria;
6264  }
6265  set
6266  {
6267  this._cCliIbanCtaBancaria = value;
6268  }
6269  }
6270  private string _cCliIbanCtaBancaria = "";
6271 
6272 
6276  public string _MandatoOrigen
6277  {
6278  get
6279  {
6280  return this._cMandatoOrigen;
6281  }
6282  set
6283  {
6284  this._cMandatoOrigen = value;
6285  }
6286  }
6287  private string _cMandatoOrigen = "";
6288 
6289 
6293  public int _MandatoContador
6294  {
6295  get
6296  {
6297  return this._nMandatoContador;
6298  }
6299  set
6300  {
6301  this._nMandatoContador = value;
6302  }
6303  }
6304  private int _nMandatoContador = 0;
6305 
6306 
6310  public DateTime? _FechaCreac
6311  {
6312  get
6313  {
6314  return this._dFechaCreac;
6315  }
6316  set
6317  {
6318  this._dFechaCreac = value;
6319  }
6320  }
6321  private DateTime? _dFechaCreac = null;
6322 
6323 
6327  public string _EmpNif
6328  {
6329  get
6330  {
6331  return this._cEmpNif;
6332  }
6333  set
6334  {
6335  this._cEmpNif = value;
6336  }
6337  }
6338  private string _cEmpNif = "";
6339 
6340 
6344  public string _EmpNombre
6345  {
6346  get
6347  {
6348  return this._cEmpNombre;
6349  }
6350  set
6351  {
6352  this._cEmpNombre = value;
6353  }
6354  }
6355  private string _cEmpNombre = "";
6356 
6357 
6361  public string _EmpNombre2
6362  {
6363  get
6364  {
6365  return this._cEmpNombre2;
6366  }
6367  set
6368  {
6369  this._cEmpNombre2 = value;
6370  }
6371  }
6372  private string _cEmpNombre2 = "";
6373 
6374 
6378  public string _EmpDireccion
6379  {
6380  get
6381  {
6382  return this._cEmpDireccion;
6383  }
6384  set
6385  {
6386  this._cEmpDireccion = value;
6387  }
6388  }
6389  private string _cEmpDireccion = "";
6390 
6391 
6395  public string _EmpCodPos
6396  {
6397  get
6398  {
6399  return this._cEmpCodPos;
6400  }
6401  set
6402  {
6403  if (loParent != null && !loParent._bIsLoading) // PE-99815 en la carga no hemos de validar nada
6404  {
6405  if (value != _cEmpCodPos)
6406  {
6407  if (loParent.CamposTRel_Validar_Valor("_EmpCodPos", value, this))
6408  value = _cEmpCodPos;
6409  }
6410  }
6411 
6412  if (_cEmpCodPos != value)
6413  {
6414  _cEmpCodPos = value;
6415  }
6416  }
6417  }
6418  private string _cEmpCodPos = "";
6419 
6420 
6424  public string _EmpPoblacion
6425  {
6426  get
6427  {
6428  return this._cEmpPoblacion;
6429  }
6430  set
6431  {
6432  this._cEmpPoblacion = value;
6433  }
6434  }
6435  private string _cEmpPoblacion = "";
6436 
6437 
6441  public string _EmpProvincia
6442  {
6443  get
6444  {
6445  return this._cEmpProvincia;
6446  }
6447  set
6448  {
6449  this._cEmpProvincia = value;
6450  }
6451  }
6452  private string _cEmpProvincia = "";
6453 
6454 
6458  public string _EmpPais
6459  {
6460  get { return _cEmpPais; }
6461  set
6462  {
6463  if (loParent != null) // PE-99815 en la carga no hemos de validar nada
6464  {
6465  if (value != _cEmpPais)
6466  {
6467  if (loParent.CamposTRel_Validar_Valor("_EmpPais", value, this))
6468  value = _cEmpPais;
6469  }
6470  }
6471 
6472  if (_cEmpPais != value)
6473  {
6474  _cEmpPais = value;
6475  }
6476 
6477  }
6478  }
6479  private string _cEmpPais = "";
6480 
6481 
6485  public string _NombreEmpPais
6486  {
6487  get
6488  {
6489  return this._cNombreEmpPais;
6490  }
6491  set
6492  {
6493  this._cNombreEmpPais = value;
6494  }
6495  }
6496  private string _cNombreEmpPais = "";
6497 
6498 
6502  public EmpresasMandato _TRelEmpresasMandato
6503  {
6504  get
6505  {
6506  if (_oEmpresasMandato == null)
6507  {
6508  _oEmpresasMandato = new EmpresasMandato(this._Mandato);
6509  _oEmpresasMandato._Load();
6510  }
6511 
6512  return _oEmpresasMandato;
6513  }
6514  set
6515  {
6516  this._oEmpresasMandato = value;
6517  }
6518  }
6519  internal EmpresasMandato _oEmpresasMandato = null;
6520 
6521 
6526  public bool _MandatoEntradaLibre
6527  {
6528  get
6529  {
6530  return this._lMandatoEntradaLibre;
6531  }
6532  set
6533  {
6534  this._lMandatoEntradaLibre = value;
6535  }
6536  }
6537  private bool _lMandatoEntradaLibre = false;
6538 
6542  public string _Guid_Id
6543  {
6544  get
6545  {
6546  if (string.IsNullOrWhiteSpace(_cGuid_Id))
6547  {
6548  _cGuid_Id = Guid.NewGuid().ToString().ToUpper();
6549  }
6550  return _cGuid_Id;
6551  }
6552  set { _cGuid_Id = value; }
6553  }
6554  private string _cGuid_Id = "";
6555 
6559  public object _Parent
6560  {
6561  get
6562  {
6563  return loParent;
6564  }
6565  set
6566  {
6567  loParent = (MandatosCliente)value;
6568  }
6569  }
6570  private MandatosCliente loParent;
6571 
6572 
6573  #endregion PROPIEDADES PÚBLICAS
6574 
6575 
6576  #region PROPIEDADES PRIVADAS
6577 
6578 
6582  private MandatosCliente _oMandatosCliente
6583  {
6584  get
6585  {
6586  return (MandatosCliente)loParent;
6587  }
6588  }
6589 
6590 
6594  private Cliente _oCliente
6595  {
6596  get
6597  {
6598  return this._oMandatosCliente._oCliente;
6599  }
6600  }
6601 
6602 
6603  #endregion PROPIEDADES PRIVADAS
6604 
6605 
6606  #region CONSTRUCTOR
6607 
6608 
6613  {
6614 
6615  }
6616 
6617 
6618  #endregion CONSTRUCTOR
6619 
6620 
6621  #region MÉTODOS PÚBLICOS
6622 
6623 
6628  public bool Fila_Plena()
6629  {
6630  bool lbFilaPlena;
6631 
6632  lbFilaPlena = !string.IsNullOrWhiteSpace(_Mandato);
6633 
6634  return lbFilaPlena;
6635  }
6636 
6637 
6642  public void _CopiarDatosDeMandatoOrigen(MandatoCliente toMandatoOrigen)
6643  {
6644  // Si el mandato se crea a partir de otro, pongo en el registro del mandatos todos los datos
6645  // del mandato origen.
6646  object loValueProperty = null;
6647 
6648  PropertyInfo[] loProps = toMandatoOrigen.GetType().GetProperties();
6649  foreach (PropertyInfo loProp in loProps)
6650  {
6651  // Leo la propiedad del mandato origen.
6652  //
6653  loValueProperty = loProp.GetValue(toMandatoOrigen, null);
6654 
6655  // Copia todas las propiedades excepto el ManteTRel de empresas por mandato, esta propiedad la copiaré cuando haya obtenido el
6656  // mandato que va en el nuevo registro.
6657  // Tampoco copia la propiedad _Linia por que provocaria repetición de la misma.
6658  //
6659  if (loProp.Name != "_TRelEmpresasMandato" && loProp.Name != "_Linia")
6660  {
6661  // Pongo la propiedad en el registro.
6662  //
6663  loProp.SetValue(this, loValueProperty, null);
6664  }
6665  }
6666 
6667  return;
6668  }
6669 
6670 
6675  public bool _EsMandatoPorEmpresa()
6676  {
6677  if (string.IsNullOrWhiteSpace(this._Mandato))
6678  return false;
6679 
6680  bool llMandatoActivoPorEmpresas = (this._TRelEmpresasMandato._Items.Count > 0);
6681 
6682  return llMandatoActivoPorEmpresas;
6683  }
6684 
6685 
6698  public bool _ControlMandato_Defecto_Empresas(string tcMandato, int tnBan_Cli, int tnDesde)
6699  {
6700  bool llOk = true;
6701  bool llSinEmpresasEnMandatoActual = false, llSinEmpresasEnOtrosMand = false;
6702 
6703 
6704  // No permitiremos:
6705  //
6706  // 1) Dos registros con diferente mandato, identica cuenta bancaria sin empresas declarada en ninguno de los dos casos
6707  // 2) Dos registro con diferente mandato, identica cuenta bancaria y que tengan los dos registros en mandemp con identica empresa
6708  //
6709  // Si permitiremos:
6710  // 1) Dos registros con diferente mandato, identica cuenta bancaria, el primer registro sin empresa, y el segundo registro con varias empresas
6711 
6712 
6713 
6714 
6715 
6716  // Buscamos otros mandatos diferentes al actual, pero con identica cuenta bancaria al actual y que esten marcados defecto, si no encontramos
6717  // ninguno que cumpla estas características podemos abandonar sin hacer ningún control más.
6718  //
6719  List<MandatoCliente> lstMandatosMismaCuentaBancaria = this._oMandatosCliente._Items.Where(x => x._Banc_Cli == tnBan_Cli &&
6720  !string.IsNullOrWhiteSpace(x._Mandato) && x._Mandato != tcMandato &&
6721  x._Defecto).ToList();
6722  if (lstMandatosMismaCuentaBancaria.Count == 0)
6723  {
6724  lstMandatosMismaCuentaBancaria = null;
6725  return true;
6726  }
6727 
6728 
6729  // Empresas en el mandato actual.
6730  //
6731  List<EmpresasMandato.EmpresaMandato> lstEmpreMandActual = this._TRelEmpresasMandato._Items.Where(x => !string.IsNullOrWhiteSpace(x._Empresa)).ToList();
6732  llSinEmpresasEnMandatoActual = (lstEmpreMandActual.Count == 0);
6733 
6734 
6735 
6736 
6737 
6738  // Mandatos del cliente diferente al mandato activo que estan marcados como defecto y con empresas asignadas.
6739  //
6740  List<EmpresasMandato.EmpresaMandato> lstOtrosMandConEmpresa = new List<EmpresasMandato.EmpresaMandato>();
6741  foreach (MandatoCliente loMandato in this._oMandatosCliente._Items)
6742  {
6743  if (!string.IsNullOrWhiteSpace(loMandato._Mandato) && loMandato._Mandato != tcMandato && loMandato._Defecto)
6744  {
6745  lstOtrosMandConEmpresa.AddRange(loMandato._TRelEmpresasMandato._Items.Where(x => !string.IsNullOrWhiteSpace(x._Empresa)).ToList<EmpresasMandato.EmpresaMandato>());
6746  }
6747  }
6748 
6749 
6750 
6751  var lstOtrosMandemp = from m1 in lstMandatosMismaCuentaBancaria.AsEnumerable()
6752  join m2 in lstOtrosMandConEmpresa.AsEnumerable()
6753  on m1._Mandato equals m2._Mandato
6754  select new
6755  {
6756  _Mandato = m1._Mandato,
6757  _Empresa = m2._Empresa
6758  };
6759  llSinEmpresasEnOtrosMand = (lstOtrosMandemp.Count() == 0);
6760 
6761  if (llSinEmpresasEnOtrosMand && llSinEmpresasEnMandatoActual)
6762  {
6763  // Ni el mandato actual ni los otros mandatos detectados marcados como defecto con misma cuenta bancaria que el actual tienen empresas.
6764  // declaradas en MANDEMP.
6765 
6766  // Aqui como los dos mandatos no tienen empresa no hay problema, desmarco el anterior y marco el nuevo.
6767 
6768  switch (tnDesde)
6769  {
6770  case 1:
6771  this._oMandatosCliente._Error_Message_LineaMandato = "Ya existe otro mandato (" + lstMandatosMismaCuentaBancaria[0]._Mandato.Trim() + ") con identica cuenta bancaria marcado como defecto sin empresas asociadas."+Environment.NewLine+Environment.NewLine+"No se permite marcar este mandato como mandato por defecto.";
6772  break;
6773 
6774  case 2:
6775  this._oMandatosCliente._Error_Message_LineaMandato = "Ya existe otro nº de mandato (" + lstMandatosMismaCuentaBancaria[0]._Mandato.Trim() + ") marcado como mandato defecto, con la misma cuenta bancaria que la que acaba de seleccionar.";
6776  break;
6777 
6778  case 3:
6779  this._oMandatosCliente._Error_Message_LineaMandato = "Ya existe otro nº de mandato (" + lstMandatosMismaCuentaBancaria[0]._Mandato.Trim() + ") marcado como mandato defecto, con la misma cuenta bancaria que la del mandato en que está situado." + Environment.NewLine + Environment.NewLine + "Se eliminará la marca 'Defecto' del mandato seleccionado";
6780  break;
6781  }
6782 
6783  llOk = false;
6784  }
6785  else
6786  {
6787  if (llSinEmpresasEnOtrosMand == false && llSinEmpresasEnMandatoActual == false)
6788  {
6789  // Tanto el mandato actual como alguno de los otros mandatos detectados marcdos como defecto con misma cuenta bancaria que el actual tienen una o mas empresas declaradas en MANDEMP.
6790  //
6791  // Miramos si hay alguna coincidencia de empresas
6792  //
6793  var lstCoincidencias = from m1 in lstEmpreMandActual.AsEnumerable()
6794  join m2 in lstOtrosMandemp.AsEnumerable()
6795  on m1._Empresa equals m2._Empresa
6796  select new
6797  {
6798  _Mandato = m2._Mandato,
6799  _Empresa = m2._Empresa
6800  };
6801 
6802  if (lstCoincidencias.Count() > 0)
6803  {
6804  switch (tnDesde)
6805  {
6806  case 1:
6807  this._oMandatosCliente._Error_Message_LineaMandato = "Ya existe otro mandato (" + lstCoincidencias.First()._Mandato.Trim() + ") con identica cuenta bancaria marcado como " +
6808  "defecto con misma empresa asociada." + Environment.NewLine + Environment.NewLine + "No se permite marcar este mandato como mandato por defecto.";
6809  // Aqui no hago lo de desmarcar el anterior y marcar el nuevo por que los dos tienen empresas asociadas y podria ser por ejemplo que en cada uno hubiese dos empresas
6810  // siendo comun a los una sola, y la otra no. Si le quitamos el 'defecto' del primer registro implicitamente tambien lo estaremos quitando para la empresa no comun
6811  // lo cual hacerlo de forma automática es peligroso. Mejor que el usuario gestione el problema y si es necesario eliminar la empresa comun mandato para que pueda seguir
6812