CentrosAdministrativosFactura.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using sage.ew.ewbase;
5 using sage.ew.db;
6 using System.Data;
7 using System.ComponentModel;
8 using sage.ew.global;
9 using System.Windows.Forms;
10 using sage.ew.botones;
12 using sage.ew.interficies;
13 using sage.ew.contabilidad;
14 using sage.ew.functions;
15 using sage.ew.docsven;
16 using System.Reflection;
17 using System.Web.Script.Serialization;
18 
19 namespace sage.ew.cliente
20 {
24  public class CentrosAdministrativosFactura : CentrosAdministrativosBase<CentroAdministrativoLineaFactura, CentroAdministrativoClaveFactura>
25  {
26  #region PROPIEDADES PRIVADAS
27 
31  protected internal ewDocVentaFRA _oFactura = null;
32  private int _lnItems = 0;
33  private bool _lExistenRegistros = false;
34 
35  #endregion
36 
37  #region PROPIEDADES PUBLICAS
38 
42  public bool _ExistenRegistros
43  {
44  get
45  {
46  return _lExistenRegistros;
47  }
48  }
49 
53  public bool _CargarRegistrosCliente { get; set; } = true;
54 
55  #endregion
56 
57  #region CONSTRUCTORES
58 
63  {
64 
65  }
66 
72  {
73  _oFactura = toFactura;
74 
75  _Claves._Empresa._Valor = toFactura._Empresa;
76  _Claves._Ejercicio._Valor = toFactura._Cabecera._Ejercicio.Trim();
77  _Claves._Factura._Valor = toFactura._Cabecera._Factura;
78  _Claves._Cliente._Valor = toFactura._Cabecera._Cliente;
79  }
80 
81  #endregion
82 
83  #region METODOS PROTECTED
84 
88  protected override void _Inicializar()
89  {
90  _DataBase = "COMUNES";
91  _Tabla = "CCAAFAC";
92  _Condicion = "";
93  _Titulo_Browser = "Buscar centros administrativos";
94  }
95 
99  protected override void _CrearEstructura()
100  {
101  base._CrearEstructura();
102 
103  // Campo Ejercicio
104  _AddCampoTRel("_Ejercicio", "Ejercicio", false, true, false);
105 
106  //Campo factura
107  _AddCampoTRel("_Factura", "Factura", false, true, false);
108 
109  //Campo XML
110  _AddCampoTRel("_Xml", "Xml", false, true, false);
111  }
112 
113  #endregion
114 
115  #region METODOS PUBLICOS
116 
120  public override void _Load()
121  {
122  base._Load();
123 
124  if (_oFactura != null )
125  {
126  _lExistenRegistros = (_Items.Count != 0);
127 
128  if (!_lExistenRegistros && _CargarRegistrosCliente) //si no hay registros cargamos los registros del cliente
129  {
130  _oFactura._Cabecera._oCliente._TRelCentrosAdmin._Load();
131  var lstCentros = _oFactura._Cabecera._oCliente._TRelCentrosAdmin._Items.GroupBy(c => c._Rol).Select(c => c.FirstOrDefault());
132  if (lstCentros != null && lstCentros.Count() > 0)
133  lstCentros.ToList().ForEach(centro => _Items.Add(new CentroAdministrativoLineaFactura(this, centro)));
134  lstCentros = null;
135  }
136  }
137 
138  _lnItems = _Items.Where(c=>c.Fila_Plena()).Count();
139  }
140 
141 
147  public bool _Save(bool tlFacturaElectronica = false)
148  {
149  bool llSave = true;
150  if (_HayCambios())
151  {
152  llSave = base._Save();
153  if (llSave)
154  {
155  if(tlFacturaElectronica)
156  FacturaElectronica();
157 
158  _lnItems = _Items.Where(c => c.Fila_Plena()).Count();
159  _lExistenRegistros = (_lnItems!=0);
160  }
161  }
162 
163  return llSave;
164  }
165 
166 
172  {
173  CentrosAdministrativosFactura loNewCentrosAdminFactura = new CentrosAdministrativosFactura(this._oFactura);
174 
175  foreach (CentroAdministrativoLineaFactura loCentroOrigen in this._Items)
176  {
178  loCentroDestino._Parent = loNewCentrosAdminFactura;
179 
180  this.copiarCamposCentro(loCentroOrigen, loCentroDestino);
181 
182  loNewCentrosAdminFactura._Items.Add(loCentroDestino);
183  }
184 
185  return loNewCentrosAdminFactura;
186  }
187 
188 
194  public void _CopiarRegistrosDesde(CentrosAdministrativosFactura toCentrosAdminOrigen)
195  {
196  foreach (CentroAdministrativoLineaFactura loCentroOrigen in toCentrosAdminOrigen._Items)
197  {
199  loCentroDestino._Parent = this;
200 
201  this.copiarCamposCentro(loCentroOrigen, loCentroDestino);
202 
203  this._Items.Add(loCentroDestino);
204  }
205 
206  return;
207  }
208 
209  #endregion
210 
211  #region METODOS PRIVADOS
212 
217  private bool _HayCambios()
218  {
219  bool llHayCambios = true;
220 
221  if (_lnItems == _Items.Count)
222  {
223  foreach (CentroAdministrativoLineaFactura lin in _Items)
224  {
225  llHayCambios = lin._HayCambios();
226  if (llHayCambios)
227  break;
228  }
229  }
230 
231  return llHayCambios;
232  }
233 
237  private void FacturaElectronica()
238  {
239  if (_oFactura._ExisteFacturaElectronica())
240  {
241  DialogResult loDlgResult = FUNCTIONS._MessageBox("Se han realizado cambios en los centros asociados a la factura " + Environment.NewLine + Environment.NewLine +
242  " ¿Desea generar de nuevo la factura electrónica?", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, DialogResult.No);
243 
244  if (loDlgResult == DialogResult.Yes) _oFactura._FirmarFacturaAutomatico();
245 
246  }
247  }
248 
255  private void copiarCamposCentro(CentroAdministrativoLineaFactura toCentroOrigen, CentroAdministrativoLineaFactura toCentroDestino)
256  {
257  toCentroDestino._Empresa = toCentroOrigen._Empresa;
258  toCentroDestino._Ejercicio = toCentroOrigen._Ejercicio;
259  toCentroDestino._Factura = toCentroOrigen._Factura;
260  toCentroDestino._Cliente = toCentroOrigen._Cliente;
261  toCentroDestino._Rol = toCentroOrigen._Rol;
262  toCentroDestino._Codcentro = toCentroOrigen._Codcentro;
263 
264  toCentroDestino._Apellido1 = toCentroOrigen._Apellido1;
265  toCentroDestino._Apellido2 = toCentroOrigen._Apellido2;
266  toCentroDestino._CodPost = toCentroOrigen._CodPost;
267  toCentroDestino._Contacto = toCentroOrigen._Contacto;
268  toCentroDestino._Descripcion = toCentroOrigen._Descripcion;
269  toCentroDestino._Direccion = toCentroOrigen._Direccion;
270  toCentroDestino._Email = toCentroOrigen._Email;
271  toCentroDestino._Fax = toCentroOrigen._Fax;
272  toCentroDestino._Pais = toCentroOrigen._Pais;
273  toCentroDestino._Poblacion = toCentroOrigen._Poblacion;
274  toCentroDestino._Provincia = toCentroOrigen._Provincia;
275  toCentroDestino._Responsa = toCentroOrigen._Responsa;
276  toCentroDestino._Telefono = toCentroOrigen._Telefono;
277  toCentroDestino._Url = toCentroOrigen._Url;
278  toCentroDestino._EnvCli = toCentroOrigen._EnvCli;
279 
280  toCentroDestino._Xml = toCentroOrigen._Xml;
281 
282  return;
283  }
284 
290  public bool _HayCambios(List<CentroAdministrativoLineaFactura> loLinCentros)
291  {
292  JavaScriptSerializer loJS;
293  CentroAdministrativoLineaFactura loLinCentroOrigen;
294 
295  try
296  {
297  if (_Items.Count == loLinCentros.Count)
298  {
299  foreach (CentroAdministrativoLineaFactura loLinCentroDestino in loLinCentros)
300  {
301  loLinCentroOrigen = _Items.Where(f => f._Rol == loLinCentroDestino._Rol).FirstOrDefault();
302 
303  if (loLinCentroOrigen is CentroAdministrativoLineaFactura)
304  {
305  loJS = new JavaScriptSerializer();
306  if (loJS.Serialize(loLinCentroOrigen) != loJS.Serialize(loLinCentroDestino)) return true;
307  }
308  else
309  {
310  return true;
311  }
312  }
313 
314  return false;
315  }
316  }
317  catch
318  {
319 
320  }
321  finally
322  {
323  loJS = null;
324  }
325 
326  return true;
327  }
328 
329  #endregion
330 
331  }
332 
337  {
341  public ClaveTRel _Ejercicio { get; set; }
342 
346  public ClaveTRel _Factura { get; set; }
347 
351  public ClaveTRel _Cliente { get; set; }
352 
357  {
358  _Ejercicio = new ClaveTRel
359  {
360  _EsFiltro = true,
361  _Valor = ""
362  };
363 
364  _Factura = new ClaveTRel
365  {
366  _EsFiltro = true,
367  _Valor = ""
368  };
369 
370  //no debe actuar como clave, nos podemos encontrar con una factura donde el cliente factura no tiene centros y se ha guardado los centros del albarán (actualmente no puede pasar, no está implementada esta funcionalidad, pero antes si)
371  _Cliente = new ClaveTRel
372  {
373  _EsFiltro = false,
374  _Valor = ""
375  };
376  }
377  }
378 
383  {
384  #region PROPIEDADES PRIVADAS
385 
386  private string _cEjercicio = string.Empty;
387  private string _cFactura = string.Empty;
388  private string _cNombreRol = null;
389  private string _cISOPais = null;
390  private string _cXml = string.Empty;
391 
395  private Dictionary<string, object> _dicCopia = null;
396 
397  #endregion
398 
399  #region PROPIEDADES PUBLICAS
400 
404  public string _Ejercicio
405  {
406  get { return _cEjercicio; }
407  set
408  {
409  if (value != _cEjercicio)
410  {
411  _cEjercicio = value;
412  if (_Parent != null)
413  ((CentrosAdministrativosFactura)_Parent)._Exportar_Null();
414  }
415  }
416  }
417 
421  public string _Factura
422  {
423  get { return _cFactura; }
424  set
425  {
426  if (value != _cFactura)
427  {
428  _cFactura = value;
429  if (_Parent != null)
430  ((CentrosAdministrativosFactura)_Parent)._Exportar_Null();
431  }
432  }
433  }
434 
438  public override string _Rol
439  {
440  get
441  {
442  return base._Rol;
443  }
444  set
445  {
446  if (!ValidarRol((base._Rol != value), value))
447  return;
448 
449  base._Rol = value;
450  }
451  }
452 
456  public string _NombreRol
457  {
458  get
459  {
460  if(_cNombreRol==null && !string.IsNullOrWhiteSpace(_Rol))
461  _cNombreRol= Convert.ToString(DB.SQLValor("ROLES", "CODIGO", _Rol, "NOMBRE2", "COMUNES"));
462  return _cNombreRol;
463  }
464  }
465 
469  public string _ISOPais
470  {
471  get
472  {
473  if (_cISOPais == null && !string.IsNullOrWhiteSpace(_Pais))
474  _cISOPais = Convert.ToString(DB.SQLValor("PAISES", "CODIGO", _Pais, "ISO2", "COMUNES"));
475  return _cISOPais;
476  }
477  }
478 
482  public string _Xml
483  {
484  get { return _cXml; }
485  set
486  {
487  if (value != _cXml)
488  {
489  _cXml = value;
490  if (_Parent != null)
491  ((CentrosAdministrativosFactura)_Parent)._Exportar_Null();
492  }
493  }
494  }
495 
496  #endregion
497 
498  #region CONSTRUCTORES
499 
504  {
505  }
506 
513  {
514  _Parent = toCentro;
515  _Clonar(toCentroLinea);
516 
517  if (toCentro._oFactura != null)
518  {
519  _Empresa = toCentro._oFactura._Empresa;
520  _Ejercicio = toCentro._oFactura._Cabecera._Ejercicio.Trim();
521  _Factura = toCentro._oFactura._Cabecera._Factura;
522  _Cliente = toCentro._oFactura._Cabecera._Cliente;
523  }
524  }
525 
530  public override void _Load(bool tlForzado = false)
531  {
532  base._Load(tlForzado);
533 
534  _dicCopia = DiccionarioLinea();
535  }
536 
537  #endregion
538 
539  #region METODOS PRIVADOS
540 
547  private bool ValidarRol(bool tlModif, string tcRol)
548  {
549  bool llOk = true;
550 
551  if (!((CentrosAdministrativosFactura)_Parent)._bIsLoading)
552  {
553  if (tlModif && _Parent != null)
554  {
555  var loListRoles = ((CentrosAdministrativosFactura)_Parent)._Items.Where(c => c._Rol == tcRol);
556  if (loListRoles != null && loListRoles.Count() > 0)
557  {
558  ((CentrosAdministrativosFactura)_Parent)._Show_Error_Message("El Rol ya está incluido en la factura.");
559  llOk = false;
560  }
561  loListRoles = null;
562  }
563  }
564 
565  return llOk;
566  }
567 
568  private Dictionary<string, object> DiccionarioLinea()
569  {
570  //Lista de propiedades q descartamos
571  List<string> lstName = new List<string> { "_Parent", "_ComboRol" };
572 
573  Dictionary<string, object> lodicLin = this.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public).Where(prop => !string.IsNullOrWhiteSpace(prop.Name) && prop.Name.Substring(0, 1) == "_" && !lstName.Contains(prop.Name)).ToDictionary(prop => prop.Name, prop => prop.GetValue(this, null));
574 
575  return lodicLin;
576  }
577 
582  protected internal bool _HayCambios()
583  {
584  bool llHayCambios = true;
585 
586  Dictionary<string, object> ldicTemp = DiccionarioLinea();
587 
588  if (_dicCopia != null) //si es null no existe
589  llHayCambios = !_dicCopia.OrderBy(k => k.Key).SequenceEqual(ldicTemp.OrderBy(k => k.Key));
590 
591  _dicCopia = null;
592  _dicCopia = ldicTemp;
593 
594  return llHayCambios;
595  }
596 
597  #endregion
598  }
599 }
string _Empresa
Codi d&#39;emrpesa
Definition: DocsVen.cs:2327
Definición de los objetos campo para las tablas relacionadas
string _FirmarFacturaAutomatico()
Generar una factura electronica con el asistente forzando la creación automática
void _CopiarRegistrosDesde(CentrosAdministrativosFactura toCentrosAdminOrigen)
Copiar todos los registros de centros administrativos de un objeto CentrosAdministrativosFactura exte...
Classe documento Factura de venta
Definition: DocsVentaFra.cs:61
CentrosAdministrativosFactura(ewDocVentaFRA toFactura)
Constructor
bool _ExisteFacturaElectronica()
només volem saber si existeix la factura electronica, no ens interessa saber la ruta del fitxer ...
Definir la estructura del centro administrativo
Clase base de negocio para los centros administrativos
_TipoDocCab _Cabecera
Cabecera
Definition: DocsVen.cs:2626
Valores clave de los centros administrativos del cliente
override void _Inicializar()
Inicializamos tabla y valores de los centros administrativos del cliente
bool _Save(bool tlFacturaElectronica=false)
Save
bool _HayCambios(List< CentroAdministrativoLineaFactura > loLinCentros)
Indica si hay diferencias
CentroAdministrativoLineaFactura(CentrosAdministrativosFactura toCentro, CentroAdministrativoLineaBase toCentroLinea)
override void _CrearEstructura()
Añadimos campos especificos
CentrosAdministrativosFactura _Duplicar()
Crear un nuevo objeto de tipo CentrosAdministrativosFactura a partir de otro.