DiferenciasCambioCobros.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 
6 using sage.ew.listados.Clases;
7 using sage.ew.db;
8 using sage.ew.global;
9 using System.Data;
10 using sage.ew.functions;
11 using sage.ew.ewbase;
12 using sage.ew.docscompra;
13 using sage.ew.cliente;
14 using sage.ew.enumerations;
15 
16 
17 namespace sage.ew.contabilidad
18 {
23  {
28 
34  {
35  _lUsarDivisa = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_divisaventa"));
36  _cDivisaEmpresa = EW_GLOBAL._GetVariable("wc_moneda").ToString();
37  _cNombreControlCombo = "cmbFechaClienteBanco";
38  _cClienteProveedor = "cliente"; //Cliente o proveedor => para aprovechar código de la base
39  }
40 
44  public override String _ReportFile
45  {
46  get
47  {
48  return "diferenciascambiocobro.report";
49  }
50  }
51 
55  public override List<string> _ReportColumns
56  {
57  get
58  {
59  List<String> reportColumns = new List<string>();
60 
61  _dicDefEntidades = new Dictionary<string, ew.interficies.IDefEntidad>();
62  _dicDefEntidades.Add("factura", new DefEntidad() { _DB = "COMUNES", _Tabla = "PREVI_CL", _Campo = "LTRIM(FACTURA)", _Relacion = "", _Empresa = true });
63  _dicDefEntidades.Add("cliente", new DefEntidad() { _DB = "GESTION", _Tabla = "CLIENTES", _Campo = "CODIGO", _Relacion = "", _Empresa = false });
64  _dicDefEntidades.Add("f_pago", new DefEntidad() { _DB = "GESTION", _Tabla = "FPAG", _Campo = "CODIGO", _Relacion = "", _Empresa = false });
65  _dicDefEntidades.Add("empresa", new DefEntidad() { _DB = "GESTION", _Tabla = "EMPRESA", _Campo = "CODIGO", _Relacion = "", _Empresa = false });
66 
67  reportColumns.Add("factura");
68  reportColumns.Add("siiframod");
69  reportColumns.Add("referencia");
70  reportColumns.Add("emision");
71  reportColumns.Add("vencim");
72  reportColumns.Add("divisa");
73  reportColumns.Add("importe");
74  reportColumns.Add("divisa_importe");
75  reportColumns.Add("cambio");
76  reportColumns.Add("cotiza");
77  reportColumns.Add("diferencia");
78  reportColumns.Add("codigo");
79  reportColumns.Add("cliente"); //Variante cobros
80  reportColumns.Add("pagare"); //Variante cobros
81 
82  if (_TipoDiferenciaCambio == TipoDiferenciaCambio.Pagos)
83  {
84  _dicDefEntidades.Add("banco", new DefEntidad() { _DB = "GESTION", _Tabla = "CUENTAS", _Campo = "CODIGO", _Relacion = "", _Empresa = false });
85 
86  reportColumns.Add("banco");
87  reportColumns.Add("nombanc");
88  }
89 
90  reportColumns.Add("f_pago"); //Variante cobros
91  reportColumns.Add("nomfpag");
92 
93  return reportColumns;
94  }
95  }
96 
101  public override DataTable _DataTable()
102  {
103  _InicializarVariables();
104 
105  string lcSql = obtenerQueryObtencionDatos();
106 
107  //Ejecutamos el Query
108  if (DB.SQLExec(lcSql, ref _dtResult) && _dtResult.Rows.Count > 0)
109  {
110  //Redondeo la diferencia a moneda => No se ha integrado en el SQL pq no puedo garantizar que redodee igual
111  _RedondearImporteDeLasDiferencias();
112 
113  //Ens guardem les dades sense totalitzar per operar mes tard
114  this._ResultadosSinTotalizar = _dtResult.Copy();
115 
116  agruparResultadosConTotales();
117  }
118 
119  return _dtResult;
120  }
121 
126  private string obtenerQueryObtencionDatos()
127  {
128  string lcSql = string.Empty;
129 
130  //Encapsulo como se calcula el campo ya que se llama en varios puntos del query (datos y where)
131  string lcCampoCotiza = queryCalculoCampoCotiza(tcAliasTablaClienteProveedor: "CLIENTES");
132  string lcCampoDiferencia = queryCalculoCampoDiferencia(tcAliasTablaClienteProveedor: "CLIENTES");
133 
134 
135  lcSql = " SELECT p.empresa, p.vencim, p.cliente, RTRIM(CLIENTES.nombre) as nombrecliente, " +
136  "p.banco, RTRIM(c.nombre) as nombanc, " +
137  "p.f_pago, f.nombre as nomfpag, p.importe, p.factura as factura, p.emision as fecha, " +
138  "p.orden, p.pagare, p.divisa, p.importediv AS divisa_importe, p.cambio, p.pendiente, p.impagado, " +
139  Divisa._ObtenerSqlDivisa("MONEDA", "simbolo") + ", p.emision, p.periodo,p.siiframod, p.referencia";
140 
141  //Obtención de cambio pactado (sino tiene => cotización por fecha y si tampoco existe el cambio de la propia previsión "
142  lcSql += ",CLIENTES.IDIOMA as divisacliente, CLIENTES.CAMBIO as cambiocliente, CLIENTES.FEC_CAM as fechacambiocliente, " +
143  lcCampoCotiza + " AS cotiza, " +
144  lcCampoDiferencia + " AS diferencia ";
145 
146  lcSql += "FROM " + DB.SQLDatabase("comunes", "previ_cl") + " p " +
147  " LEFT OUTER JOIN " + DB.SQLDatabase("gestion", "clientes") + " CLIENTES ON p.cliente = CLIENTES.codigo " +
148  " LEFT OUTER JOIN " + DB.SQLDatabase("gestion", "fpag") + " f ON p.f_pago=f.codigo " +
149  " LEFT OUTER JOIN " + DB.SQLDatabase("gestion", "cuentas") + " c ON p.banco=c.codigo " +
150  " LEFT OUTER JOIN " + DB.SQLDatabase("gestion", "moneda") + " MONEDA ON p.divisa= MONEDA.codigo ";
151 
152  //Query de obtención de máximas cotizaciones por fecha
153  lcSql += " LEFT OUTER JOIN (" + obtenerQueryCotizacionMaximaPorFecha() + ") AS LASTCOTIZA ON LASTCOTIZA.CODIGO = p.DIVISA ";
154 
155 
156  lcSql += "WHERE " + EW_GLOBAL._Consolida("p.Empresa") + " AND p.importe != 0 AND p.banco ='' ";
157 
158  if (!_lVerDiferenciasCambioCero) //Añado filtro por el campo diferencia
159  {
160  lcSql += "AND " + lcCampoDiferencia + " <> 0 ";
161  }
162 
163  //Origen de la diferencia de cambio
164  if(_eOrigen == TipoOrigenDiferenciaCambio.Impagado)
165  lcSql += "AND p.impago = 'S' ";
166  else
167  if (_eOrigen == TipoOrigenDiferenciaCambio.Normal)
168  lcSql += "AND p.impago <> 'S' ";
169 
170  //Añado criterios de filtrado
171  lcSql += obtenerCriteriosFiltradoSql();
172 
173  //Añado ORDER BY
174  lcSql += obtenerClausulaOrderBy();
175  return lcSql; ;
176  }
177 
181  protected override void _InicializarVariables()
182  {
183  base._InicializarVariables();
184 
185  //Si viene del cierre la fecha viene asignada por el parametro y se fuerzan los filtros
186  if (_FechaProceso is DateTime && _Cuentas is List<string> && _Cuentas.Count > 0)
187  {
188  _Filtros.Add("ClienteLista", _Cuentas);
189  }
190 
191  if (_Opciones.ContainsKey("nFechaClienteBanco")) _nSubtotalesPor = _Opcion_Entero("nFechaClienteBanco"); //Específic
192  if (_Opciones.ContainsKey("nNormalImpagadoTod")) _eOrigen = (TipoOrigenDiferenciaCambio)_Opcion_Entero("nNormalImpagadoTod");
193  }
194 
199  private string obtenerCriteriosFiltradoSql()
200  {
201  string lcFiltro = "";
202 
203  lcFiltro += _Filtro_Fecha(_Filtros, _Tipo_Filtro_Fecha.Fecha, "p", (_nTipoFecha == 0 ? "vencim" : "emision"));
204  lcFiltro += _Filtro_String(_Filtros, _Tipo_Filtro_String.Cliente, "p", "cliente"); //Filtro específico cobros
205  //lcFiltro += _Filtro_String(_Filtros, _Tipo_Filtro_String.Banco, "p", "banco");
206  lcFiltro += _Filtro_String(_Filtros, _Tipo_Filtro_String.FPago, "p", "f_pago"); //Nombre campo distinto PREVIS vs PREVI_CL
207  lcFiltro += _DivisaConfig.ObtenerFiltroDivisa("divisa", "p");
208 
209  return lcFiltro;
210  }
211  }
212 }
override DataTable _DataTable()
Método de obtención de los datos específico para el listado
TipoOrigenDiferenciaCambio
Origen de la diferencia de cambio
Definition: generales.cs:101
override void _InicializarVariables()
Inicializa las variables de listado
Listado de Diferencias de cambio en previsiones de pago
Actualización de pagarés de cobro.
Listado de Diferencias de cambio en previsiones de pago
Entidad de relación (Columnas adicionales en listados)
Definition: DefEntidad.cs:14
static string _ObtenerSqlDivisa(string tcAliasCodigo, string tcAliasResultado)
Task 108426: Retornar un string aplicable para obtener el valor del texto de la divisa que actualment...
Definition: Divisa.cs:1530
Clase de negocio para la DIVISA (Moneda)
Definition: Divisa.cs:76
TipoDiferenciaCambio
Tipos de diferencia de cambio
Definition: generales.cs:120