PatronesLineaAsientosController.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Data;
6 
7 using sage.ew.interficies;
8 using sage.ew.db;
9 using sage.ew.global;
10 using sage.ew.functions;
11 using sage.ew.ewbase;
12 
13 namespace sage.ew.contabilidad
14 {
19  {
20  #region PROPIEDADES PRIVADAS
21 
25  private Dictionary<int, IPatronEntradaLineaAsiento> _Patrones = new Dictionary<int, IPatronEntradaLineaAsiento>();
29  private string _lcUsuario = Convert.ToString(EW_GLOBAL._GetVariable("wc_usuario"));
30 
31  #endregion PROPIEDADES
32 
33  #region EVENTOS
34 
41  public delegate void _RefreshAccionAsiento_Handler(eAccionAsientos teAccion, IAsientosLinea toLineaOrigen, Mensaje toMensajeAviso);
42 
46  public event _RefreshAccionAsiento_Handler __RefreshAccionAsiento;
47 
48  #endregion
49 
50  #region CONSTRUCTORES
51 
56  {
57  if (!string.IsNullOrWhiteSpace(_lcUsuario) && _lcUsuario.Length > 15)
58  _lcUsuario = _lcUsuario.Substring(0, 15);
59 
60  ConsultarPatrones();
61  }
62 
63  #endregion
64 
65  #region METODOS PUBLICOS
66 
74  public bool _Validar(IAsientos toAsiento, IAsientosLinea toLineaAsiento, eAccionAsientos teOrigenPatron)
75  {
76  if (!toAsiento._PropuestaAutomatica)
77  return false;
78 
79  bool llOk = false;
80  Dictionary<int, IPatronEntradaLineaAsiento> dicPatrones;
81  dicPatrones = _Patrones.Where(p=>!p.Value._PatronEnEjecucion && !p.Value._EsPatronModificacion).ToDictionary(p => p.Key, p => p.Value);
82  foreach (KeyValuePair<int, IPatronEntradaLineaAsiento> loPatron in dicPatrones)
83  {
84  if(ValidarPatron(loPatron, toAsiento, toLineaAsiento, teOrigenPatron))
85  {
86  llOk = true;
87  break;
88  }
89  }
90  return llOk;
91  }
92 
97  public List<IPatronEntradaLineaAsiento> _PatronesActivos()
98  {
99  List<IPatronEntradaLineaAsiento> lstPatronActivo = new List<IPatronEntradaLineaAsiento>();
100  if(_Patrones.Count>0)
101  lstPatronActivo = _Patrones.Where(p => p.Value._PatronEnEjecucion).Select(p => p.Value).ToList();
102  return lstPatronActivo;
103  }
104 
115  public bool _EjecutarPatron(eTipoPatron teTipoPatron, IAsientos toAsiento, IAsientosLinea toLineaAsiento, eAccionAsientos teOrigenPatron, decimal tnOldDebe = 0.0M, decimal tnOldHaber = 0.0M)
116  {
117  if (!toAsiento._PropuestaAutomatica)
118  return false;
119 
120  Dictionary<int, IPatronEntradaLineaAsiento> dicPatron;
121  dicPatron = _Patrones.Where(p => !p.Value._PatronEnEjecucion && p.Value.GetType().ToString().Contains(teTipoPatron.ToString())).ToDictionary(p => p.Key, p => p.Value);
122 
123  return (dicPatron != null && dicPatron.Count > 0 && ValidarPatron(dicPatron.First(), toAsiento, toLineaAsiento, teOrigenPatron, tnOldDebe, tnOldHaber));
124  }
125 
126  #endregion
127 
128  #region METODOS PRIVADOS
129 
140  private bool ValidarPatron(KeyValuePair<int, IPatronEntradaLineaAsiento> tdicPatron, IAsientos toAsiento, IAsientosLinea toLineaAsiento, eAccionAsientos teOrigenAccion, decimal tnOldDebe = 0.0M, decimal tnOldHaber = 0.0M)
141  {
142  bool llOk = false;
143  if (tdicPatron.Value._Validar(toAsiento, toLineaAsiento, tnOldDebe, tnOldHaber))
144  {
145  llOk = true;
146  IncrementarPesoPatron(tdicPatron.Key);
147  if (teOrigenAccion != tdicPatron.Value._Accion && __RefreshAccionAsiento!=null)
148  __RefreshAccionAsiento(tdicPatron.Value._Accion, toLineaAsiento, ((PatronEntradaLineaAsientoBase)tdicPatron.Value)._Mensaje);
149  }
150  return llOk;
151  }
152 
157  private void IncrementarPesoPatron(int tnId)
158  {
159  string lcSql = "Update " + DB.SQLDatabase("COMUNES", "USRASIPATR") +
160  " Set PESO = PESO + 1 " +
161  " Where idpatron = " + DB.SQLString(tnId) + " and usuario = " + DB.SQLString(_lcUsuario) + " ";
162  if(DB.SQLExec(lcSql,out int lnRegUpdate) && lnRegUpdate==0)
163  {
164  lcSql = "Insert into " + DB.SQLDatabase("COMUNES", "USRASIPATR") +
165  "(USUARIO, IDPATRON, PESO) " +
166  "Values(" + DB.SQLString(_lcUsuario) + ", " + DB.SQLString(tnId) + ", 1)";
167  DB.SQLExec(lcSql);
168  }
169  }
170 
174  private void ConsultarPatrones()
175  {
176 
177  DataTable ldtAsiPatron = new DataTable();
178  string lcSql = "Select p.id, p.nombre, p.libreria, " + DB.SQLNvl("u.peso", DB.SQLString("")) + " as peso " +
179  "From " + DB.SQLDatabase("COMUNES", "ASIPATRON") + " p " +
180  "Left Join " + DB.SQLDatabase("COMUNES", "USRASIPATR") + " u On p.id = u.idpatron and u.usuario = " + DB.SQLString(_lcUsuario) + " " +
181  "Where libreria != '' " +
182  "Order by peso DESC ";
183 
184  if(DB.SQLExec(lcSql, ref ldtAsiPatron) && ldtAsiPatron.Rows.Count>0)
185  ldtAsiPatron.AsEnumerable().ToList().ForEach(r => CargarPatron(Convert.ToString(r["libreria"]).Trim(), Convert.ToInt32(r["id"])));
186 
187  ldtAsiPatron.Clear();
188  ldtAsiPatron = null;
189  }
190 
196  private void CargarPatron(string tcClase, int tnId)
197  {
198  if (!string.IsNullOrEmpty(tcClase))
199  {
200  Type elementType = FUNCTIONS._GetType(tcClase, tcBestChanceOn: "sage.ew.contabilidad"); //Recuperem el tipus de la clase
201 
202  if (elementType != null)
203  {
204  IPatronEntradaLineaAsiento oPatron = (sage.ew.interficies.IPatronEntradaLineaAsiento)Activator.CreateInstance(elementType);
205  if (!_Patrones.ContainsKey(tnId))
206  _Patrones.Add(tnId,oPatron);
207  }
208  }
209  }
210 
211  #endregion
212  }
213 }
Clase para mensajes
Definition: Mensaje.cs:13
Interficie Asientos
Definition: IAsientos.cs:17
eAccionAsientos
Enumerado del tipo de acciones en formulario de asientos
_RefreshAccionAsiento_Handler __RefreshAccionAsiento
Refrescamos formulario asientos
bool _EjecutarPatron(eTipoPatron teTipoPatron, IAsientos toAsiento, IAsientosLinea toLineaAsiento, eAccionAsientos teOrigenPatron, decimal tnOldDebe=0.0M, decimal tnOldHaber=0.0M)
Ejecutamos un patron en concreto si se encuentra en el diccionario, directamente puedo ejecutar cualq...
eTipoPatron
Enumerado los patrones asientos
bool _PropuestaAutomatica
Propuesta automática de impuestos
Definition: IAsientos.cs:199
bool _Validar(IAsientos toAsiento, IAsientosLinea toLineaAsiento, eAccionAsientos teOrigenPatron)
Validamos con la lista de patrones que tenemos
Interficie Patrones entrada linea asiento
interficie asiento linia
List< IPatronEntradaLineaAsiento > _PatronesActivos()
Lista de patrones activos