2 using System.Collections.Generic;
10 using System.ComponentModel;
14 using System.Text.RegularExpressions;
16 namespace sage.ew.docsven
26 #region INotifyPropertyChanged 37 private void NotifyPropertyChanged(String info)
39 var handler = PropertyChanged;
42 handler(
this,
new PropertyChangedEventArgs(
info));
46 #endregion INotifyPropertyChanged 48 #region PROPIEDADES PRIVADAS 49 private DataTable _dtEmpresas =
new DataTable();
57 private DataTable ldtEmpModelos;
59 private string _cEmpresa = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_empresa"));
63 #region PROPIEDADES PUBLICAS 68 public readonly
string _Modelo340 =
"340";
73 public DataTable _dtEmpModelos
75 get {
return ldtEmpModelos; }
76 set { ldtEmpModelos = value; }
82 public bool _Fact_Rect
86 if (_lisCampos.ContainsKey(
"FACT_RECT"))
87 return Convert.ToBoolean(_lisCampos[
"FACT_RECT"]._NewVal);
93 if (_lisCampos.ContainsKey(
"FACT_RECT"))
95 string lcMensaje =
"";
96 if (Convert.ToBoolean(_lisCampos[
"FACT_RECT"]._NewVal) && !value && _SerieRectificativaConfiguradaDefecto(this._Codigo, ref lcMensaje))
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");
104 if (Convert.ToBoolean(_lisCampos[
"FACT_RECT"]._NewVal) && !value &&
106 existenFacturasConSerie())
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");
113 _lisCampos[
"FACT_RECT"]._NewVal = value;
124 public override string _Codigo
134 value = value.TrimStart();
136 base._Codigo = value;
139 _ObtenerEmpresasModelo();
146 public bool _Opera_AJ
150 if (_lisCampos.ContainsKey(
"OPERA_AJ"))
151 return Convert.ToBoolean(_lisCampos[
"OPERA_AJ"]._NewVal);
157 if (_lisCampos.ContainsKey(
"OPERA_AJ"))
158 _lisCampos[
"OPERA_AJ"]._NewVal = value;
164 #endregion PROPIEDADES 176 this._Clave =
"Codigo";
177 this._DataBase =
"Comunes";
178 this._Tabla =
"letras";
179 this._TituloMantenimiento =
"Series de documentos";
181 this._Pantalla =
"LETRAS";
184 this._Codigo =
string.Empty;
194 this._Clave =
"Codigo";
195 this._DataBase =
"Comunes";
196 this._Tabla =
"letras";
197 this._TituloMantenimiento =
"Series de documentos";
199 this._Pantalla =
"LETRAS";
202 this._Codigo = tcLetra;
209 #region METODOS PUBLICOS 218 return _Fact_Rect || _dtEmpModelos.AsEnumerable().Any(f => Convert.ToBoolean(f[
"sel"]) && Convert.ToString(f[
"codigo"]) == tcEmpresa);
227 bool llExisten =
false;
228 string lcSql =
string.Empty;
230 List<string> loTablasTPV =
new List<string>()
232 "CAJAS",
"D_ALBVEN",
"C_ALBVEN",
"TIKETS",
"VALES",
"TAUL_ALB",
"COB_REST",
"OP_TARJETA",
"D_NOTA",
"OP_EMV" 235 List<string> loTablasGestion =
new List<string>()
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" 242 llExisten = _Existen_Registros(
"TPV", loTablasTPV,
"letra") || _Existen_Registros(
"GESTION", loTablasGestion,
"letra");
247 loTablasTPV =
new List<string>()
252 loTablasGestion =
new List<string>()
257 llExisten = _Existen_Registros(
"TPV", loTablasTPV,
"letrarect") || _Existen_Registros(
"GESTION", loTablasGestion,
"letrarect");
260 llExisten = !llExisten && ExisteSerieOtrosDocumentos();
267 lcSql =
"DELETE FROM " + DB.SQLDatabase(
"SERIES") +
" WHERE serie = '" + _Codigo +
"'";
270 lcSql =
"DELETE FROM " + DB.SQLDatabase(
"GESTION",
"MODRECTI") +
" WHERE modelo = " + DB.SQLString(_Modelo340) +
" and letra = " + DB.SQLString(_Codigo);
282 _Error_Message =
"Este código de Letra está en uso en otras tablas. No se puede borrar la letra.";
294 _ObtenerEmpresasModelo();
301 public override void _New(
string tcCodigo =
"")
304 if (!contabilidad.CONTABILIDAD._ComprobarFormatoFacturaVenta(
"",
this._Codigo,
"",
true,
true))
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.";
320 string lcSql =
string.Empty;
321 DataTable ldtTemp =
new DataTable();
322 DataTable ldtExiste =
new DataTable();
324 string[] laEjercicios = null;
325 List<string> lstEjerciciosAdd =
new List<string>();
328 string lcCodigo = DB.SQLValor(this._Tabla, this._Clave, this._Codigo,
"CODIGO", this._DataBase).ToString();
334 if (
string.IsNullOrWhiteSpace(lcCodigo))
337 DataTable ldtEjers =
new DataTable();
338 string lcSQL =
"Select * From " + DB.SQLDatabase(
"COMUNES",
"EJERCICI") +
" Order By [any] Asc ";
339 DB.SQLExec(lcSQL, ref ldtEjers);
341 if (ldtEjers != null && ldtEjers.Rows.Count > 0)
343 int lnEjerDesde = Convert.ToInt16(ldtEjers.Rows[0][
"any"]);
344 int lnEjerHasta = Convert.ToInt16(ldtEjers.Rows[ldtEjers.Rows.Count - 1][
"any"]);
346 laEjercicios =
new string[(lnEjerHasta - lnEjerDesde) + 1];
349 for (
int lnEjer = lnEjerDesde; lnEjer <= lnEjerHasta; lnEjer++)
351 laEjercicios.SetValue(lnEjer.ToString().Trim(), i);
356 lcSql =
"SELECT serie FROM [multiples_ejercicios].dbo.series WHERE serie = " + DB.SQLString(_Codigo) +
" ";
358 foreach (
string lcEjercicio
in laEjercicios)
360 llOk = DB.SQLExecEjer(lcSql, ref ldtExiste,
new List<string> { lcEjercicio }.ToArray());
362 if (llOk && ldtExiste != null && ldtExiste.Rows.Count == 0)
363 lstEjerciciosAdd.Add(lcEjercicio);
367 lcSql =
"SELECT codigo FROM " + DB.SQLDatabase(
"EMPRESA");
368 DB.SQLExec(lcSql, ref ldtTemp);
370 foreach (DataRow row
in ldtTemp.Rows)
372 for (
int lnI = 1; lnI <= 8; lnI++)
374 lcSql =
"INSERT INTO " + DB.SQLDatabase(
"",
"SERIES") +
"(empresa, serie, tipodoc, contador) " +
375 "VALUES ('" + row[
"codigo"] +
"', '" + _Codigo +
"', " + lnI.ToString() +
", 0)";
377 if (lstEjerciciosAdd.Count > 0)
378 llOk = DB.SQLExecEjer(lcSql, lstEjerciciosAdd.ToArray());
383 this._Error_Message = DB.Error_Message;
401 string lcSql =
string.Empty;
402 DataTable ldtMod =
new DataTable();
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);
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()
417 empresa = emp.Field<
string>(
"empresa"),
418 nombre = emp.Field<
string>(
"nombre"),
419 sel = (ed == null ? false :
true),
424 foreach (var mod
in lstModelos)
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);
446 bool llRetorno = serieRectificativaConfiguradaDefecto(ref tcMensaje, tcLetra);
461 string lcMensaje =
"";
463 return serieRectificativaConfiguradaDefecto(ref lcMensaje, tcLetra);
472 private bool serieRectificativaConfiguradaDefecto(ref
string tcMensaje,
string tcLetra=
"")
474 if (
string.IsNullOrWhiteSpace(tcLetra))
477 if (
string.IsNullOrWhiteSpace(tcLetra))
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)
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)
491 tcMensaje += Convert.ToString(loRow[
"codigo"])+
", ";
493 tcMensaje = tcMensaje.Substring(0, tcMensaje.Length - 2);
495 FUNCTIONS._DisposeDatatable(ldtEmpresas);
499 FUNCTIONS._DisposeDatatable(ldtEmpresas);
504 if (EW_GLOBAL._ModuloActivo(
"TPV"))
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)
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)
515 tcMensaje += Convert.ToString(loRow[
"codigo"]) +
", ";
517 tcMensaje = tcMensaje.Substring(0, tcMensaje.Length - 2);
519 FUNCTIONS._DisposeDatatable(ldtCajas);
522 FUNCTIONS._DisposeDatatable(ldtCajas);
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)
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;
537 foreach (DataRow loRow
in ldtClientes.Rows)
539 tcMensaje += Convert.ToString(loRow[
"codigo"]) +
", ";
544 tcMensaje = tcMensaje.Substring(0, tcMensaje.Length - 2);
546 FUNCTIONS._DisposeDatatable(ldtClientes);
550 FUNCTIONS._DisposeDatatable(ldtClientes);
557 if (EW_GLOBAL._ModuloActivo(
"FACTUCERT"))
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)
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)
569 tcMensaje += Convert.ToString(loRow[
"cliente"]) +
", ";
571 tcMensaje = tcMensaje.Substring(0, tcMensaje.Length - 2);
573 FUNCTIONS._DisposeDatatable(ldtClientesAddonFactucert);
576 FUNCTIONS._DisposeDatatable(ldtClientesAddonFactucert);
582 #endregion METODOS PUBLICOS 585 #region METODOS PRIVADOS 592 private bool existenFacturasConSerie()
595 bool llExisten =
false;
597 if (
string.IsNullOrWhiteSpace(lcSerie))
600 if (Convert.ToBoolean(global.EW_GLOBAL._GetVariable(
"wl_serfact")) ==
true)
603 DataTable c_factuven =
new DataTable();
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);
610 if (DB.SQLExec(lcSql, ref c_factuven))
611 llExisten = (c_factuven.Rows.Count > 0);
624 string lcSerie = _Codigo;
625 bool llExisten =
false;
627 if (
string.IsNullOrWhiteSpace(lcSerie))
630 if (Convert.ToBoolean(global.EW_GLOBAL._GetVariable(
"wl_serfact")) ==
true)
632 DataTable ldtAuxExisFac =
new DataTable();
633 StringBuilder lcSql =
new StringBuilder();
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 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 647 llExisten = (DB.SQLExec(lcSql.ToString(), ref ldtAuxExisFac) && ldtAuxExisFac.Rows.Count > 0);
649 FUNCTIONS._DisposeDatatable(ref ldtAuxExisFac);
659 private void SaveSeriesModelo()
663 StringBuilder loSql =
new StringBuilder();
664 DataTable loDt = CargarDatos();
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))
669 List<DataRow> loList = (from loRow in _dtEmpModelos.AsEnumerable()
670 where Convert.ToBoolean(loRow[
"sel"])
671 select loRow).ToList();
673 if (loList.Count > 0)
675 foreach (DataRow loRow
in loList)
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);
681 if (!DB.SQLExec(loSql.ToString())) this._Error_Message = DB.Error_Message;
687 this._Error_Message = DB.Error_Message;
691 private Int32 ObtenerLinea(ref DataTable td, String tcCodigoEmpresa)
694 List<Int32> loList = (from loRow in td.AsEnumerable()
695 where Convert.ToString(loRow[
"empresa"]) == tcCodigoEmpresa
696 select Convert.ToInt32(loRow[
"linea"])).ToList();
698 return loList.Count() > 0 ? loList.Max() + 1 : 0;
704 private DataTable CargarDatos()
706 string lcSql =
string.Empty;
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);
722 private int ObtenerLinea(
string tcEmpresa, ref DataTable tdtTempLetra)
724 string lcSql =
string.Empty;
727 if (tdtTempLetra != null && tdtTempLetra.Rows.Count > 0)
729 DataRow ldRow = tdtTempLetra.Select(
"empresa ='" + tcEmpresa +
"'").FirstOrDefault();
731 lnLinea = Convert.ToInt32(ldRow[
"linea"]) + 1;
744 private bool ExisteSerie(
string tcEmpresa,
string tcLetra, ref DataTable tdtTempLetra)
746 bool llExiste =
false;
748 if (tdtTempLetra != null && tdtTempLetra.Rows.Count > 0)
749 llExiste = tdtTempLetra.Select(
"empresa ='" + tcEmpresa +
"' and letra ='"+ tcLetra+
"'").Count() > 0;
758 private void CrearTable()
760 if (_dtEmpModelos == null)
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));
768 _dtEmpModelos.Clear();
775 private void _ObtenerEmpresas()
777 string lcSql =
string.Empty;
779 if (_dtEmpresas != null && _dtEmpresas.Rows.Count > 0)
782 _dtEmpresas =
new DataTable();
783 lcSql =
"SELECT codigo as empresa, nombre FROM " + DB.SQLDatabase(
"EMPRESA")+
" order by codigo";
784 DB.SQLExec(lcSql, ref _dtEmpresas);
791 private bool ExisteSerieOtrosDocumentos()
793 bool llExiste =
false;
794 DataTable ldtAuxExisConta =
new DataTable();
795 StringBuilder lcSql =
new StringBuilder();
798 Select numero as factura, 'c_factuven ' as tipo 799 From {DB.SQLDatabase("c_factuven
")} 800 where Left(numero, 2) = {DB.SQLString(_Codigo)} 802 Select numfra as factura, 'ivareper' as tipo 803 From {DB.SQLDatabase("ivareper
")} 804 Where Left(numfra,2) = {DB.SQLString(_Codigo)} and comunitari = 0 806 Select factura, 'iva_exen' as tipo 807 From {DB.SQLDatabase("iva_exen
")} 808 Where Left(factura,2) = {DB.SQLString(_Codigo)} and tipo = 2 810 Select numfra as factura, 'retsopor' as tipo 811 From {DB.SQLDatabase("retsopor
")} 812 Where Left(numfra,2) = {DB.SQLString(_Codigo)} 814 Select factura, 'previ_cl' as tipo 815 From {DB.SQLDatabase("comunes
", "previ_cl
")} 816 Where Left(factura,2) = {DB.SQLString(_Codigo)} 819 llExiste = (DB.SQLExec(lcSql.ToString(), ref ldtAuxExisConta) && ldtAuxExisConta.Rows.Count > 0);
821 FUNCTIONS._DisposeDatatable(ref ldtAuxExisConta);
Clase de negocio base para mantenimientos
bool _ExistenFacturasOperacionREBU()
Revisa si existen facturas realizadas con la serie actual con tipo de operacion REBU ...
bool _SerieRectificativaConfiguradaDefecto(string tcLetra="")
Método para saber si una serie rectificativa se ha configurado por defecto en el mante de alguna empr...
override void _Load()
Load
PE-82381 Clase utilizada para consultar los datos de Letras
override void _New(string tcCodigo="")
New
PropertyChangedEventHandler PropertyChanged
Evento de propiedad cambiada
_EstadosMantenimiento
Declaro un enum para los estados del mantenimiento.
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...
Letras(string tcLetra)
Constructor con letra (PE-104369)
bool _EsRectificativa(string tcEmpresa)
Indica si la serie es rectificativa
override bool _Delete()
Borra la letra cargada
override bool _Save()
Override _Save
bool _ObtenerEmpresasModelo()
Método para obtener las empresas del modelo