clsLetras.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Windows.Forms;
6 
7 using sage.ew.db;
8 using sage.ew.ewbase;
9 using System.Data;
10 using System.ComponentModel;
11 using sage.ew.global;
12 using sage.ew.tpv;
13 using sage.ew.functions;
14 using System.Text.RegularExpressions;
15 
16 namespace sage.ew.docsven
17 {
22  public class Letras : ewMante, INotifyPropertyChanged
23  {
24  // Cumplimiento de interficie
25  //
26  #region INotifyPropertyChanged
27 
31  public event PropertyChangedEventHandler PropertyChanged;
32 
37  private void NotifyPropertyChanged(String info)
38  {
39  var handler = PropertyChanged; //ThreadSafe
40  if (handler != null)
41  {
42  handler(this, new PropertyChangedEventArgs(info));
43  }
44  }
45 
46  #endregion INotifyPropertyChanged
47 
48  #region PROPIEDADES PRIVADAS
49  private DataTable _dtEmpresas = new DataTable();
53 
57  private DataTable ldtEmpModelos;
58 
59  private string _cEmpresa = Convert.ToString(EW_GLOBAL._GetVariable("wc_empresa"));
60 
61  #endregion
62 
63  #region PROPIEDADES PUBLICAS
64 
68  public readonly string _Modelo340 = "340";
69 
73  public DataTable _dtEmpModelos
74  {
75  get { return ldtEmpModelos; }
76  set { ldtEmpModelos = value; }
77  }
78 
82  public bool _Fact_Rect
83  {
84  get
85  {
86  if (_lisCampos.ContainsKey("FACT_RECT"))
87  return Convert.ToBoolean(_lisCampos["FACT_RECT"]._NewVal);
88  else
89  return false;
90  }
91  set
92  {
93  if (_lisCampos.ContainsKey("FACT_RECT"))
94  {
95  string lcMensaje = "";
96  if (Convert.ToBoolean(_lisCampos["FACT_RECT"]._NewVal) && !value && _SerieRectificativaConfiguradaDefecto(this._Codigo, ref lcMensaje))
97  {
98  _Error_Message = "No es posible desmarcar la opción 'Serie para facturas rectificativas', " +
99  "puesto que esta serie ya ha sido configurada por defecto "+ lcMensaje;
100  NotifyPropertyChanged("_Fact_Rect");
101  return;
102  }
103 
104  if (Convert.ToBoolean(_lisCampos["FACT_RECT"]._NewVal) && !value &&
105  this._Estado == _EstadosMantenimiento.EditandoRegistro &&
106  existenFacturasConSerie())
107  {
108  _Error_Message = "No es posible desmarcar la opción 'Serie para facturas rectificativas', puesto que esta serie ya se ha utilizado en alguna factura.";
109  NotifyPropertyChanged("_Fact_Rect");
110  return;
111  }
112 
113  _lisCampos["FACT_RECT"]._NewVal = value;
114  }
115 
116  _Exportar_Null();
117  }
118  }
119 
120  //PE-102341
124  public override string _Codigo
125  {
126  get
127  {
128  return base._Codigo;
129  }
130  set
131  {
132  //PE-102341 No permitimos espacios por la derecha.
133  if (value != null)
134  value = value.TrimStart();
135 
136  base._Codigo = value;
137 
138  // Cargar la información de empresas de modelo
139  _ObtenerEmpresasModelo();
140  }
141  }
142 
146  public bool _Opera_AJ
147  {
148  get
149  {
150  if (_lisCampos.ContainsKey("OPERA_AJ"))
151  return Convert.ToBoolean(_lisCampos["OPERA_AJ"]._NewVal);
152  else
153  return false;
154  }
155  set
156  {
157  if (_lisCampos.ContainsKey("OPERA_AJ"))
158  _lisCampos["OPERA_AJ"]._NewVal = value;
159 
160  _Exportar_Null();
161  }
162  }
163 
164  #endregion PROPIEDADES
165 
166 
167  #region CONSTRUCTORS
168 
172  public Letras()
173  {
174  // Asignamos las propiedades para Letras
175  this._lTodos = true;
176  this._Clave = "Codigo";
177  this._DataBase = "Comunes";
178  this._Tabla = "letras";
179  this._TituloMantenimiento = "Series de documentos"; // PE-91891. Cambiar el título
180 
181  this._Pantalla = "LETRAS";
182  this._FormManteBaseType = typeof(sage.ew.formul.Forms.frmLetras); // PE-104369
183 
184  this._Codigo = string.Empty; // PE-104369
185  }
186 
190  public Letras(string tcLetra)
191  {
192  // Asignamos las propiedades para Letras
193  this._lTodos = true;
194  this._Clave = "Codigo";
195  this._DataBase = "Comunes";
196  this._Tabla = "letras";
197  this._TituloMantenimiento = "Series de documentos";
198 
199  this._Pantalla = "LETRAS";
200  this._FormManteBaseType = typeof(sage.ew.formul.Forms.frmLetras);
201 
202  this._Codigo = tcLetra;
203  this._Load();
204  }
205 
206  #endregion
207 
208 
209  #region METODOS PUBLICOS
210 
216  public bool _EsRectificativa(string tcEmpresa)
217  {
218  return _Fact_Rect || _dtEmpModelos.AsEnumerable().Any(f => Convert.ToBoolean(f["sel"]) && Convert.ToString(f["codigo"]) == tcEmpresa);
219  }
220 
225  public override bool _Delete()
226  {
227  bool llExisten = false;
228  string lcSql = string.Empty;
229 
230  List<string> loTablasTPV = new List<string>()
231  {
232  "CAJAS", "D_ALBVEN", "C_ALBVEN", "TIKETS", "VALES", "TAUL_ALB", "COB_REST", "OP_TARJETA", "D_NOTA", "OP_EMV"
233  };
234 
235  List<string> loTablasGestion = new List<string>()
236  {
237  "C_PEDIVE", "D_PEDIVE", "C_ALBVEN", "ALB_FPAG", "C_ALBDEP", "D_ALBDEP", "D_ALBVEN", "EMPRESA", "ENVIOETI", "C_PRESUV", "D_PRESUV",
238  "C_PACKLI", "D_PACKLI", "PORTES", "ENTREGAS", "STOCK_ES", "VENSER", "ALBV_ADI", "PEDV_ADI", "DEPV_ADI", "PRES_ADI", "MULTICA2", "CONTADO", "DEPSER",
239  "ALB_FPA2", "ENTRE_CL", "LOTES", "CUO_ALB", "CONTROL", "ENTRE_PV", "C_CERTIF", "D_CERTIF", "ENTRE_PR", "MODRECTI"
240  };
241 
242  llExisten = _Existen_Registros("TPV", loTablasTPV, "letra") || _Existen_Registros("GESTION", loTablasGestion, "letra");
243 
244  if (!llExisten)
245  {
246  // Comprobar en rectificativas
247  loTablasTPV = new List<string>()
248  {
249  "CAJAS"
250  };
251 
252  loTablasGestion = new List<string>()
253  {
254  "EMPRESA"
255  };
256 
257  llExisten = _Existen_Registros("TPV", loTablasTPV, "letrarect") || _Existen_Registros("GESTION", loTablasGestion, "letrarect");
258  }
259 
260  llExisten = !llExisten && ExisteSerieOtrosDocumentos();
261 
262  if (!llExisten)
263  {
264  if (base._Delete())
265  {
266  //a parte de borrar los registros de la tabla letras, también tenemos que borrar los registros de contador para esta serie en la tabla series
267  lcSql = "DELETE FROM " + DB.SQLDatabase("SERIES") + " WHERE serie = '" + _Codigo + "'";
268  DB.SQLExec(lcSql);
269 
270  lcSql = "DELETE FROM " + DB.SQLDatabase("GESTION", "MODRECTI") + " WHERE modelo = " + DB.SQLString(_Modelo340) + " and letra = " + DB.SQLString(_Codigo);
271  DB.SQLExec(lcSql);
272 
273  return true;
274  }
275  else
276  {
277  return false;
278  }
279  }
280  else
281  {
282  _Error_Message = "Este código de Letra está en uso en otras tablas. No se puede borrar la letra.";
283  return !llExisten;
284  }
285  }
286 
290  public override void _Load()
291  {
292  base._Load();
293 
294  _ObtenerEmpresasModelo();
295  }
296 
301  public override void _New(string tcCodigo = "")
302  {
303  // Antes de seguir comprobar que el código de serie no tenga ningún caracter que no sea una MAYÚSCULA ni NÚMERO
304  if (!contabilidad.CONTABILIDAD._ComprobarFormatoFacturaVenta("", this._Codigo, "", true, true))
305  {
306  _Error_Message = "No se permite crear una serie de documento con los caracteres introducidos, solo se permite letras en mayúsculas y/o números.";
307  this.CancelarForm();
308  return;
309  }
310 
311  base._New(tcCodigo);
312  }
313 
318  public override bool _Save()
319  {
320  string lcSql = string.Empty;
321  DataTable ldtTemp = new DataTable();
322  DataTable ldtExiste = new DataTable(); // Bug 107683
323  bool llOk = false;
324  string[] laEjercicios = null;
325  List<string> lstEjerciciosAdd = new List<string>(); // Bug 107683
326 
327  // PARTE 92415. Antes de guardar el registro validamos si existe para posteriormente poder añadir los contadores
328  string lcCodigo = DB.SQLValor(this._Tabla, this._Clave, this._Codigo, "CODIGO", this._DataBase).ToString();
329 
330  llOk = base._Save();
331 
332  if (llOk)
333  {
334  if (string.IsNullOrWhiteSpace(lcCodigo))
335  {
336  // PE-104126. Obtener lista con todos los ejercicios
337  DataTable ldtEjers = new DataTable();
338  string lcSQL = "Select * From " + DB.SQLDatabase("COMUNES", "EJERCICI") + " Order By [any] Asc ";
339  DB.SQLExec(lcSQL, ref ldtEjers);
340 
341  if (ldtEjers != null && ldtEjers.Rows.Count > 0)
342  {
343  int lnEjerDesde = Convert.ToInt16(ldtEjers.Rows[0]["any"]);
344  int lnEjerHasta = Convert.ToInt16(ldtEjers.Rows[ldtEjers.Rows.Count - 1]["any"]);
345 
346  laEjercicios = new string[(lnEjerHasta - lnEjerDesde) + 1];
347 
348  int i = 0;
349  for (int lnEjer = lnEjerDesde; lnEjer <= lnEjerHasta; lnEjer++)
350  {
351  laEjercicios.SetValue(lnEjer.ToString().Trim(), i);
352  i++;
353  }
354  }
355 
356  lcSql = "SELECT serie FROM [multiples_ejercicios].dbo.series WHERE serie = " + DB.SQLString(_Codigo) + " "; // Bug 107683. Montamos la consulta para controlar si existe la serie en los diferentes ejercicios
357 
358  foreach (string lcEjercicio in laEjercicios)
359  {
360  llOk = DB.SQLExecEjer(lcSql, ref ldtExiste, new List<string> { lcEjercicio }.ToArray());
361 
362  if (llOk && ldtExiste != null && ldtExiste.Rows.Count == 0)
363  lstEjerciciosAdd.Add(lcEjercicio);
364  } // FBug 107683
365 
366  //si es un nuevo registro, también hay que guardar en la tabla SERIES el contador a 0 para cada empresa de eurowin y tipodoc de 1 a 8
367  lcSql = "SELECT codigo FROM " + DB.SQLDatabase("EMPRESA");
368  DB.SQLExec(lcSql, ref ldtTemp);
369 
370  foreach (DataRow row in ldtTemp.Rows)
371  {
372  for (int lnI = 1; lnI <= 8; lnI++) //PE-94002: faltaban los tipos 7 y 8
373  {
374  lcSql = "INSERT INTO " + DB.SQLDatabase("", "SERIES") + "(empresa, serie, tipodoc, contador) " +
375  "VALUES ('" + row["codigo"] + "', '" + _Codigo + "', " + lnI.ToString() + ", 0)";
376 
377  if (lstEjerciciosAdd.Count > 0) // Bug 107683 - //if (laEjercicios != null && laEjercicios.Length > 0) // PE-104126. Ejecutar insert en todos los ejercicios disponibles
378  llOk = DB.SQLExecEjer(lcSql, lstEjerciciosAdd.ToArray()); // Actualización de los ejercicios donde no tengamos la serie en la tabla de contadores
379 
380  if (!llOk)
381  {
382  // Recollir l'error
383  this._Error_Message = DB.Error_Message;
384  }
385  }
386  }
387  }
388  SaveSeriesModelo();
389  }
390 
391  return llOk;
392  }
393 
399  {
400 
401  string lcSql = string.Empty;
402  DataTable ldtMod = new DataTable();
403 
404  // Obtener las empresas del grupo
405  _ObtenerEmpresas();
406 
407  string lcLetra = !String.IsNullOrWhiteSpace(_Codigo) ? _Codigo : "!x!";
408  lcSql = "SELECT empresa FROM " + DB.SQLDatabase("MODRECTI") + " where modelo = "+ DB.SQLString(_Modelo340) +" and letra = " + DB.SQLString(lcLetra);
409  DB.SQLExec(lcSql, ref ldtMod);
410 
411  var lstModelos = (from emp in _dtEmpresas.AsEnumerable()
412  join mod in ldtMod.AsEnumerable()
413  on emp.Field<string>("empresa").Trim().ToUpper() equals mod.Field<string>("empresa").Trim().ToUpper() into empDept
414  from ed in empDept.DefaultIfEmpty()
415  select new
416  {
417  empresa = emp.Field<string>("empresa"),
418  nombre = emp.Field<string>("nombre"),
419  sel = (ed == null ? false : true),
420  });
421 
422  CrearTable();
423 
424  foreach (var mod in lstModelos)
425  {
426  DataRow loRow = _dtEmpModelos.NewRow();
427  loRow["sel"] = mod.sel;
428  loRow["codigo"] = mod.empresa;
429  loRow["nombre"] = mod.nombre;
430  _dtEmpModelos.Rows.Add(loRow);
431  }
432 
433  return true;
434  }
435 
442  public bool _SerieRectificativaConfiguradaDefecto(string tcLetra, ref string tcMensaje)
443  {
444  tcMensaje = "";
445 
446  bool llRetorno = serieRectificativaConfiguradaDefecto(ref tcMensaje, tcLetra);
447 
448  return llRetorno;
449  }
450 
459  public bool _SerieRectificativaConfiguradaDefecto(string tcLetra = "")
460  {
461  string lcMensaje = "";
462 
463  return serieRectificativaConfiguradaDefecto(ref lcMensaje, tcLetra);
464  }
465 
472  private bool serieRectificativaConfiguradaDefecto(ref string tcMensaje, string tcLetra="")
473  {
474  if (string.IsNullOrWhiteSpace(tcLetra))
475  tcLetra = _Codigo;
476 
477  if (string.IsNullOrWhiteSpace(tcLetra))
478  return false;
479 
480  // Mirar si la serie está declarada como rectificativa en alguna empresa.
481  //
482  DataTable ldtEmpresas = new DataTable();
483  DB.SQLExec("select codigo from " + DB.SQLDatabase("gestion", "empresa") +
484  " where tipo='Normal' and letrarect = " + DB.SQLString(tcLetra) + " and letrarect!=''", ref ldtEmpresas);
485  if (ldtEmpresas.Rows.Count > 0)
486  {
487  tcMensaje = "en alguna empresa."+Environment.NewLine+Environment.NewLine +
488  "Empresas en las que está declarada la serie rectificativa defecto '"+tcLetra+"': " + Environment.NewLine + Environment.NewLine ;
489  foreach (DataRow loRow in ldtEmpresas.Rows)
490  {
491  tcMensaje += Convert.ToString(loRow["codigo"])+", ";
492  }
493  tcMensaje = tcMensaje.Substring(0, tcMensaje.Length - 2);
494 
495  FUNCTIONS._DisposeDatatable(ldtEmpresas);
496 
497  return true;
498  }
499  FUNCTIONS._DisposeDatatable(ldtEmpresas);
500 
501 
502  // Mirar si la serie está declarada como rectificativa en alguna caja de TPV.
503  //
504  if (EW_GLOBAL._ModuloActivo("TPV"))
505  {
506  DataTable ldtCajas = new DataTable();
507  DB.SQLExec("select codigo from " + DB.SQLDatabase("tpv", "cajas") +
508  " where letrarect = " + DB.SQLString(tcLetra)+" and letrarect!=''", ref ldtCajas);
509  if (ldtCajas.Rows.Count > 0)
510  {
511  tcMensaje = "en alguna caja TPV." + Environment.NewLine + Environment.NewLine +
512  "Cajas TPV en las que está declarada la serie rectificativa defecto '" + tcLetra + "': " + Environment.NewLine + Environment.NewLine;
513  foreach (DataRow loRow in ldtCajas.Rows)
514  {
515  tcMensaje += Convert.ToString(loRow["codigo"]) + ", ";
516  }
517  tcMensaje = tcMensaje.Substring(0, tcMensaje.Length - 2);
518 
519  FUNCTIONS._DisposeDatatable(ldtCajas);
520  return true;
521  }
522  FUNCTIONS._DisposeDatatable(ldtCajas);
523  }
524 
525 
526  // Mirar si la serie está declarada como rectificativa en algún cliente.
527  //
528  //
529  DataTable ldtClientes = new DataTable();
530  DB.SQLExec("select codigo from " + DB.SQLDatabase("gestion", "clientes") +
531  " where letdefrect = " + DB.SQLString(tcLetra) + " and letdefrect!=''", ref ldtClientes);
532  if (ldtClientes.Rows.Count > 0)
533  {
534  tcMensaje = "en algún cliente." + Environment.NewLine + Environment.NewLine +
535  "Clientes en los que está declarada la serie rectificativa defecto '" + tcLetra + "': " + Environment.NewLine + Environment.NewLine;
536  int lnContador = 0;
537  foreach (DataRow loRow in ldtClientes.Rows)
538  {
539  tcMensaje += Convert.ToString(loRow["codigo"]) + ", ";
540  lnContador++;
541  if (lnContador > 45)
542  break;
543  }
544  tcMensaje = tcMensaje.Substring(0, tcMensaje.Length - 2);
545 
546  FUNCTIONS._DisposeDatatable(ldtClientes);
547  return true;
548  }
549 
550  FUNCTIONS._DisposeDatatable(ldtClientes);
551 
552 
553  // Si tenemos el addon de facturación certificada instalado.
554  //
555  // Mirar si la serie está declarada como rectificativa en algun cliente en el apartado addons
556  //
557  if (EW_GLOBAL._ModuloActivo("FACTUCERT"))
558  {
559  DataTable ldtClientesAddonFactucert = new DataTable();
560  DB.SQLExec("select cliente from " + DB.SQLDatabase("factucert", "fcclientes") +
561  " where letdefrenc = " + DB.SQLString(tcLetra) + " and letdefrenc!=''", ref ldtClientesAddonFactucert);
562  if (ldtClientesAddonFactucert.Rows.Count > 0)
563  {
564  tcMensaje = "en algún cliente en el apartado Addons - Facturación certificada." + Environment.NewLine + Environment.NewLine +
565  "Clientes en los que está declarada la serie rectificativa no certificable '" + tcLetra + "' en el apartado " +
566  "Addons - Facturación certificada:" + Environment.NewLine + Environment.NewLine;
567  foreach (DataRow loRow in ldtClientesAddonFactucert.Rows)
568  {
569  tcMensaje += Convert.ToString(loRow["cliente"]) + ", ";
570  }
571  tcMensaje = tcMensaje.Substring(0, tcMensaje.Length - 2);
572 
573  FUNCTIONS._DisposeDatatable(ldtClientesAddonFactucert);
574  return true;
575  }
576  FUNCTIONS._DisposeDatatable(ldtClientesAddonFactucert);
577  }
578 
579  return false;
580  }
581 
582  #endregion METODOS PUBLICOS
583 
584 
585  #region METODOS PRIVADOS
586 
587 
592  private bool existenFacturasConSerie()
593  {
594  string lcSerie = this._Codigo;
595  bool llExisten = false;
596 
597  if (string.IsNullOrWhiteSpace(lcSerie))
598  return false;
599 
600  if (Convert.ToBoolean(global.EW_GLOBAL._GetVariable("wl_serfact")) == true)
601  {
602  // Mirar en facturas de venta
603  DataTable c_factuven = new DataTable();
604 
605  string lcSql = "Select EMPRESA, NUMERO " +
606  "From " + DB.SQLDatabase("C_FACTUVEN") + " " +
607  "Where EMPRESA = " + DB.SQLString(global.EW_GLOBAL._GetVariable("wc_empresa")) + " " +
608  "And Left(NUMERO, 2) = " + DB.SQLString(lcSerie);
609 
610  if (DB.SQLExec(lcSql, ref c_factuven))
611  llExisten = (c_factuven.Rows.Count > 0);
612  }
613 
614  return llExisten;
615 
616  }
617 
623  {
624  string lcSerie = _Codigo;
625  bool llExisten = false;
626 
627  if (string.IsNullOrWhiteSpace(lcSerie))
628  return false;
629 
630  if (Convert.ToBoolean(global.EW_GLOBAL._GetVariable("wl_serfact")) == true)
631  {
632  DataTable ldtAuxExisFac = new DataTable();
633  StringBuilder lcSql = new StringBuilder();
634 
635  lcSql.Append($@"
636  Select reper.numfra as factura, reper.asi, 'ivareper' as tipo
637  From {DB.SQLDatabase("ivareper")} reper
638  Inner Join {DB.SQLDatabase("asientos")} asientos On reper.asi = asientos.asi and asientos.operacion = 38
639  Where reper.empresa = {DB.SQLString(_cEmpresa)} and Left(reper.numfra, 2) = {DB.SQLString(lcSerie)} and reper.comunitari = 0
640  Union all
641  Select exen.factura, exen.asi, 'iva_exen' as tipo
642  From {DB.SQLDatabase("iva_exen")} exen
643  Inner Join {DB.SQLDatabase("asientos")} asientos On exen.asi = asientos.asi and asientos.operacion = 38
644  Where exen.empresa = {DB.SQLString(_cEmpresa)} and Left(exen.factura, 2) = {DB.SQLString(lcSerie)} and exen.tipo = 2
645  ");
646 
647  llExisten = (DB.SQLExec(lcSql.ToString(), ref ldtAuxExisFac) && ldtAuxExisFac.Rows.Count > 0);
648 
649  FUNCTIONS._DisposeDatatable(ref ldtAuxExisFac);
650  }
651 
652  return llExisten;
653 
654  }
655 
659  private void SaveSeriesModelo()
660  {
661  Int32 lnLinea = 0;
662  String lcSql = "";
663  StringBuilder loSql = new StringBuilder();
664  DataTable loDt = CargarDatos();
665 
666  lcSql = String.Format("DELETE FROM {0} WHERE modelo = {1} and letra = {2}", DB.SQLDatabase("GESTION", "MODRECTI"), DB.SQLString(_Modelo340), DB.SQLString(this._Codigo));
667  if (DB.SQLExec(lcSql))
668  {
669  List<DataRow> loList = (from loRow in _dtEmpModelos.AsEnumerable()
670  where Convert.ToBoolean(loRow["sel"])
671  select loRow).ToList();
672 
673  if (loList.Count > 0)
674  {
675  foreach (DataRow loRow in loList)
676  {
677  lnLinea = ObtenerLinea(ref loDt, Convert.ToString(loRow["codigo"]));
678  loSql.AppendFormat("INSERT INTO {0} (empresa, modelo, letra, linea) VALUES ({1}, {2}, {3}, {4} );", DB.SQLDatabase("GESTION", "MODRECTI"), DB.SQLString(loRow["codigo"]), DB.SQLString(_Modelo340), DB.SQLString(this._Codigo), lnLinea);
679  }
680 
681  if (!DB.SQLExec(loSql.ToString())) this._Error_Message = DB.Error_Message;
682  }
683 
684  }
685  else
686  {
687  this._Error_Message = DB.Error_Message;
688  }
689  }
690 
691  private Int32 ObtenerLinea(ref DataTable td, String tcCodigoEmpresa)
692  {
693 
694  List<Int32> loList = (from loRow in td.AsEnumerable()
695  where Convert.ToString(loRow["empresa"]) == tcCodigoEmpresa
696  select Convert.ToInt32(loRow["linea"])).ToList();
697 
698  return loList.Count() > 0 ? loList.Max() + 1 : 0;
699  }
700 
704  private DataTable CargarDatos()
705  {
706  string lcSql = string.Empty;
707 
708  DataTable tdtTempLetra = new DataTable();
709  lcSql = "SELECT empresa, letra, linea FROM " + DB.SQLDatabase("GESTION", "MODRECTI") +
710  " where modelo = " + DB.SQLString(_Modelo340) + "";
711  DB.SQLExec(lcSql, ref tdtTempLetra);
712 
713  return tdtTempLetra;
714  }
715 
722  private int ObtenerLinea(string tcEmpresa, ref DataTable tdtTempLetra)
723  {
724  string lcSql = string.Empty;
725  int lnLinea = 0;
726 
727  if (tdtTempLetra != null && tdtTempLetra.Rows.Count > 0)
728  {
729  DataRow ldRow = tdtTempLetra.Select("empresa ='" + tcEmpresa + "'").FirstOrDefault();
730  if (ldRow != null)
731  lnLinea = Convert.ToInt32(ldRow["linea"]) + 1;
732  }
733 
734  return lnLinea;
735  }
736 
744  private bool ExisteSerie(string tcEmpresa, string tcLetra, ref DataTable tdtTempLetra)
745  {
746  bool llExiste = false;
747 
748  if (tdtTempLetra != null && tdtTempLetra.Rows.Count > 0)
749  llExiste = tdtTempLetra.Select("empresa ='" + tcEmpresa + "' and letra ='"+ tcLetra+"'").Count() > 0;
750 
751  return llExiste;
752  }
753 
754 
758  private void CrearTable()
759  {
760  if (_dtEmpModelos == null)
761  {
762  _dtEmpModelos = new DataTable();
763  _dtEmpModelos.Columns.Add("sel", typeof(bool));
764  _dtEmpModelos.Columns.Add("codigo", typeof(string));
765  _dtEmpModelos.Columns.Add("nombre", typeof(string));
766  }
767 
768  _dtEmpModelos.Clear();
769 
770  }
771 
775  private void _ObtenerEmpresas()
776  {
777  string lcSql = string.Empty;
778 
779  if (_dtEmpresas != null && _dtEmpresas.Rows.Count > 0)
780  return;
781 
782  _dtEmpresas = new DataTable();
783  lcSql = "SELECT codigo as empresa, nombre FROM " + DB.SQLDatabase("EMPRESA")+" order by codigo";
784  DB.SQLExec(lcSql, ref _dtEmpresas);
785  }
786 
791  private bool ExisteSerieOtrosDocumentos()
792  {
793  bool llExiste = false;
794  DataTable ldtAuxExisConta = new DataTable();
795  StringBuilder lcSql = new StringBuilder();
796 
797  lcSql.Append($@"
798  Select numero as factura, 'c_factuven ' as tipo
799  From {DB.SQLDatabase("c_factuven")}
800  where Left(numero, 2) = {DB.SQLString(_Codigo)}
801  Union all
802  Select numfra as factura, 'ivareper' as tipo
803  From {DB.SQLDatabase("ivareper")}
804  Where Left(numfra,2) = {DB.SQLString(_Codigo)} and comunitari = 0
805  Union all
806  Select factura, 'iva_exen' as tipo
807  From {DB.SQLDatabase("iva_exen")}
808  Where Left(factura,2) = {DB.SQLString(_Codigo)} and tipo = 2
809  Union all
810  Select numfra as factura, 'retsopor' as tipo
811  From {DB.SQLDatabase("retsopor")}
812  Where Left(numfra,2) = {DB.SQLString(_Codigo)}
813  Union all
814  Select factura, 'previ_cl' as tipo
815  From {DB.SQLDatabase("comunes", "previ_cl")}
816  Where Left(factura,2) = {DB.SQLString(_Codigo)}
817  ");
818 
819  llExiste = (DB.SQLExec(lcSql.ToString(), ref ldtAuxExisConta) && ldtAuxExisConta.Rows.Count > 0);
820 
821  FUNCTIONS._DisposeDatatable(ref ldtAuxExisConta);
822 
823  return llExiste;
824  }
825  }
826 
827  #endregion
828 }
Clase de negocio base para mantenimientos
Definition: clsEwBase.cs:1643
bool _ExistenFacturasOperacionREBU()
Revisa si existen facturas realizadas con la serie actual con tipo de operacion REBU ...
Definition: clsLetras.cs:622
bool _SerieRectificativaConfiguradaDefecto(string tcLetra="")
Método para saber si una serie rectificativa se ha configurado por defecto en el mante de alguna empr...
Definition: clsLetras.cs:459
Formulario frmLetras
Definition: frmLetras.cs:19
override void _Load()
Load
Definition: clsLetras.cs:290
Letras()
Constructor
Definition: clsLetras.cs:172
PE-82381 Clase utilizada para consultar los datos de Letras
Definition: clsLetras.cs:22
override void _New(string tcCodigo="")
New
Definition: clsLetras.cs:301
PropertyChangedEventHandler PropertyChanged
Evento de propiedad cambiada
Definition: clsLetras.cs:31
_EstadosMantenimiento
Declaro un enum para los estados del mantenimiento.
Definition: clsEwBase.cs:1671
bool _SerieRectificativaConfiguradaDefecto(string tcLetra, ref string tcMensaje)
Método para saber si una serie rectificativa se ha configurado por defecto en el mante de alguna empr...
Definition: clsLetras.cs:442
Letras(string tcLetra)
Constructor con letra (PE-104369)
Definition: clsLetras.cs:190
bool _EsRectificativa(string tcEmpresa)
Indica si la serie es rectificativa
Definition: clsLetras.cs:216
override bool _Delete()
Borra la letra cargada
Definition: clsLetras.cs:225
override bool _Save()
Override _Save
Definition: clsLetras.cs:318
bool _ObtenerEmpresasModelo()
Método para obtener las empresas del modelo
Definition: clsLetras.cs:398