DisenoBalances_TablaBalSigno.cs
1 using sage.ew.db;
2 using System;
3 using System.Collections.Generic;
4 using System.Data;
5 using System.Linq;
6 using System.Text;
7 
8 namespace sage.ew.contabilidad
9 {
14  {
15  #region Propiedades
16 
20  public string _Fitxer { get; set; } = string.Empty;
21 
25  public string _Pb { get; set; } = string.Empty;
26 
30  public IEnumerable<DisenoBalances_Signo> _Signo
31  {
32  get
33  {
34  if (_SignoAnuales == null)
35  {
36  _SignoAnuales = Load();
37  }
38  return _SignoAnuales;
39  }
40  set
41  {
42  _SignoAnuales = value;
43  }
44  }
45  private IEnumerable<DisenoBalances_Signo> _SignoAnuales = null;
46 
47 
48  #endregion Propiedades
49 
50  #region Constructores
51 
55  private DisenoBalances_TablaBalSigno() { }
56 
60  public DisenoBalances_TablaBalSigno(string fitxer, string pb)
61  {
62  _Fitxer = fitxer;
63  _Pb = pb;
64  }
65 
66  #endregion Constructores
67 
72  public IEnumerable<DisenoBalances_Signo> Load()
73  {
74  string lcSql = string.Empty;
75  DataTable resultados = new DataTable();
76  List<DisenoBalances_Signo> listaAnualesItems = new List<DisenoBalances_Signo>();
77 
78  lcSql += " SELECT A.*, B.DEFINICIO FROM " + DB.SQLDatabase("GESTION", "BALSIGNO") + " A ";
79  lcSql += " INNER JOIN " + DB.SQLDatabase("GESTION", "ANUALES") + " B ON A.FICHERO = B.FITXER AND A.PB = B.PB AND A.CLAVECOL = B.CLAU ";
80  lcSql += " WHERE A.FICHERO = " + DB.SQLString(_Fitxer);
81  lcSql += " AND A.PB = " + DB.SQLString(_Pb);
82 
83  if (DB.SQLExec(lcSql, ref resultados) && resultados.Rows.Count > 0)
84  {
85  var rows = resultados.AsEnumerable().Cast<DataRow>().ToList();
86  rows.ForEach(r => listaAnualesItems.Add(new DisenoBalances_Signo(this, r)));
87  }
88 
89  return listaAnualesItems;
90  }
91 
96  public bool _Save()
97  {
98  bool llOk = true;
99 
100  //Borrar lo que pudiera haber en la tabla
101  _Delete();
102 
103  if (_Signo.Count() > 0)
104  {
105  StringBuilder sbItems = new StringBuilder();
106  foreach (DisenoBalances_Signo item in _Signo)
107  {
108  //Obtengo el query para hacer el insert
109  sbItems.AppendLine(item.GetInsertQuery());
110  }
111 
112  llOk = DB.SQLExec(sbItems.ToString());
113  }
114 
115  return llOk;
116  }
117 
122  public bool _Delete()
123  {
124  string lcSql = string.Empty;
125 
126  lcSql += " DELETE FROM " + DB.SQLDatabase("GESTION", "BALSIGNO");
127  lcSql += " WHERE FICHERO = " + DB.SQLString(_Fitxer);
128  lcSql += " AND PB = " + DB.SQLString(_Pb);
129 
130  return DB.SQLExec(lcSql);
131  }
132 
138  internal bool Duplicar(string nuevoCodigo)
139  {
140  bool llOk = true;
141 
142  StringBuilder sbItems = new StringBuilder();
143  foreach (DisenoBalances_Signo item in _Signo)
144  {
145  //Obtengo el query para hacer el insert
146  sbItems.AppendLine(item.GetDuplicarQuery(CodigoReemplazo: nuevoCodigo));
147  }
148  llOk = DB.SQLExec(sbItems.ToString());
149 
150 
151  return llOk;
152  }
153 
154  internal DisenoBalances_Signo SignoCrear(string tcClau, string tcColumna)
155  {
156  string lcDefColumna = Convert.ToString(DB.SQLValor("ANUALES", new String[] { "FITXER", "PB", "CLAU" }, new String[] { _Fitxer, _Pb, tcColumna }, "DEFINICIO"));
157 
158  DisenoBalances_Signo nuevoItem = new DisenoBalances_Signo(this)
159  {
160  _Clau = tcClau,
161  _Columna = tcColumna,
162  _DefColumna = lcDefColumna,
163  _Valor = string.Empty
164  };
165 
166 
167  List<DisenoBalances_Signo> lista = _Signo.ToList();
168  lista.Add(nuevoItem);
169  _Signo = lista;
170 
171  return nuevoItem;
172  }
173 
179  private string ObtenerNuevoCodigoDeNodo(string tcValorInicial = "AA")
180  {
181  string nuevoCodigo = string.Empty;
182 
183  //Asigno el código de partida
184  nuevoCodigo = tcValorInicial.ToUpper();
185 
186  int intentos = 0;
187  while (true)
188  {
189  //TODO => mejorar a función para códigos únicamente alfabéticos
190  nuevoCodigo = functions.FUNCTIONS._SumarCarRecursivo(nuevoCodigo);
191 
192  if (_SignoAnuales.All(i => i._Clau.CompareTo(nuevoCodigo) != 0)) //Si nadie usa esa clave acabo
193  break;
194 
195  if (intentos > 1000) //mil intentos... para mi que no lo va a conseguir
196  {
197  nuevoCodigo = string.Empty;
198  break;
199  }
200  }
201 
202  return nuevoCodigo;
203  }
204  }
205 }
Registro unitario de la tabla BALSIGNO
DisenoBalances_TablaBalSigno(string fitxer, string pb)
Constructor privado
Consulta de una declaración existente
bool _Delete()
Borra los registros de ANUALES para el FITXER y PB actual
IEnumerable< DisenoBalances_Signo > Load()
Obtiene los items de anuales
Clase para gestionar conjuntos de registros de la tabla BALSIGNO
string GetInsertQuery()
Obtiene un query para realizar una intrucción insert de los datos actuales
string GetDuplicarQuery(string CodigoReemplazo)
Obtiene un query para realizar una intrucción insert de los datos actuales con otro código de fichero...
bool _Save()
Graba la colección de registros de Anuales