2 using System.Collections.Generic;
11 namespace sage.ew.listados
23 protected bool TrabajaConEjercicioPartido = Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_parti"));
28 protected string _cTituloListado =
string.Empty;
33 protected string _cOpcFechas =
string.Empty;
38 protected string _cOpcSumaDe =
string.Empty;
43 protected bool _lAcumulandoImporte =
false;
48 protected bool _lfacturas =
false;
54 protected string _cTituloAgrupacion =
string.Empty;
58 protected string _cColumnasPivot =
string.Empty;
62 protected string _cInPivot =
string.Empty;
66 protected string _cAgrupacion =
string.Empty;
71 protected string _cColumnaDetalle =
string.Empty;
75 protected string _cColumnaDetalleNull =
string.Empty;
79 protected string _cCodigoParaLeftJoin =
string.Empty;
83 protected string _cTablaNombre =
string.Empty;
87 protected string _cCampoGroupBy =
string.Empty;
158 protected Dictionary<string, string> FiltrosParaEjercicios
160 get {
return dicFiltrosParaEjercicios; }
161 set { dicFiltrosParaEjercicios = value; }
163 private Dictionary<string, string> dicFiltrosParaEjercicios =
new Dictionary<string, string>();
168 public bool _Mostrar_Beneficio_TPC
170 get {
return _lMostrar_Beneficio_TPC; }
171 set { _lMostrar_Beneficio_TPC = value; }
173 private bool _lMostrar_Beneficio_TPC =
false;
175 #region Constructores 193 tipoDeComparativa = teTipoComparativo;
206 tipoDeComparativa = teTipoComparativo;
211 #endregion Constructores 213 #region Métodos abstractos 218 protected abstract void InitComparativa();
220 #endregion Métodos abstractos 228 int lnAgrupacion = _Opcion_Entero(
"ndiasemanamestrime");
229 switch (lnAgrupacion)
267 _lAcumulandoImporte =
false;
270 int lnUnidades = _Opcion_Entero(
"nunidadesimporte");
274 _cOpcSumaDe =
"unidades";
278 _lAcumulandoImporte =
true;
280 if (_DivisaConfig._DivisaEspecifica)
281 _cOpcSumaDe =
"importediv";
283 _cOpcSumaDe =
"importe";
285 if (esUnaComparativaDeVentas() && _AplicarIVAIncluido)
287 if (_DivisaConfig._DivisaEspecifica)
288 _cOpcSumaDe =
"impdiviva";
290 _cOpcSumaDe =
"importeiva";
295 _cOpcSumaDe =
"cajas";
298 _cOpcSumaDe =
"peso";
316 private bool esUnaComparativaDeVentas()
318 return tipoDeComparativa == eTipoComparativa.Ventas;
335 int lnTipoFecha = -1;
336 lnTipoFecha = _Opcion_Entero(
"nalbaranesfacturas");
340 _cOpcFechas =
"fecha_fac";
345 _cOpcFechas =
"fecha";
359 if (tdtResultados.Rows.Count == 0)
361 foreach (
string lcEjer
in _Ejercicios)
363 DataRow ldrEmptyRow = tdtResultados.NewRow();
364 if (tdtResultados.Columns.Contains(
"EJERCICIO"))
365 ldrEmptyRow[
"EJERCICIO"] = lcEjer;
368 try { ldrEmptyRow[0] = lcEjer; }
369 catch (Exception loEx) { DB.Registrar_Error(loEx); }
371 tdtResultados.Rows.Add(ldrEmptyRow);
382 return "[EJERCICIO], ";
400 switch (_eOpcAgruparPor)
404 _cTituloAgrupacion =
" dia ";
405 _cColumnasPivot = ObtenerColumnasBaseParaPivot();
406 _cInPivot = _cTituloAgrupacion +
" IN ( ";
409 for (
int lnMes = 1; lnMes <= 12; lnMes++)
411 int lnNumeroDiasMes = 0;
412 int lnIndexColumna = 0;
415 string lcNombreMes = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(lnMes);
427 lnNumeroDiasMes = 31;
430 lnNumeroDiasMes = 29;
436 lnNumeroDiasMes = 30;
442 for (
int lnIndex = 1; lnIndex <= lnNumeroDiasMes; lnIndex++)
444 lnIndexColumna = lnMes * 100 + lnIndex;
445 _cColumnasPivot +=
"[" + lnIndexColumna.ToString() +
"] AS '" + lcNombreMes +
", " + lnIndex.ToString() +
"'";
446 _cInPivot +=
"[" + lnIndexColumna.ToString() +
"]";
447 if (lnMes == 12 && lnIndex == 31)
449 _cColumnasPivot +=
" ";
454 _cColumnasPivot +=
", ";
459 _cAgrupacion = _cColumnaDetalle +
"DATEPART(m, " + tcAliasDatos + _cOpcFechas +
") * 100 + DATEPART ( d , " + tcAliasDatos + _cOpcFechas +
") as " + _cTituloAgrupacion;
466 var numMaxSemanas = 52;
468 foreach (var ejercicio
in _Ejercicios)
470 var semanas = ObtenerNumeroSemanasEjercicio(ejercicio);
471 if (semanas > numMaxSemanas)
472 numMaxSemanas = semanas;
475 _cTituloAgrupacion =
" semana ";
476 _cColumnasPivot = ObtenerColumnasBaseParaPivot();
477 _cInPivot = _cTituloAgrupacion +
" IN ( ";
478 for (
int lnIndex = 1; lnIndex <= numMaxSemanas; lnIndex++)
480 _cColumnasPivot +=
"[" + lnIndex.ToString() +
"] AS 'Semana " + lnIndex.ToString() +
"'";
481 _cInPivot +=
"[" + lnIndex.ToString() +
"]";
482 if (lnIndex == numMaxSemanas)
484 _cColumnasPivot +=
" ";
489 _cColumnasPivot +=
", ";
493 _cAgrupacion = ObtenerColumnasDetalleAdicional() +
"DATEPART ( wk , " + tcAliasDatos + _cOpcFechas +
") as " + _cTituloAgrupacion;
498 _cTituloAgrupacion =
" trimestre ";
499 _cColumnasPivot = ObtenerColumnasBaseParaPivot() +
"[1] AS T1, [2] AS T2, [3] AS T3, [4] AS T4 ";
500 _cInPivot = _cTituloAgrupacion +
" IN ( [1] , [2], [3], [4]) ";
501 _cAgrupacion = ObtenerColumnasDetalleAdicional() +
" DATEPART ( qq ," + tcAliasDatos + _cOpcFechas +
") as " + _cTituloAgrupacion;
505 _cTituloAgrupacion =
" semestre ";
506 _cColumnasPivot = ObtenerColumnasBaseParaPivot() +
"[1] AS SEM1, [2] AS SEM2 ";
507 _cInPivot = _cTituloAgrupacion +
" IN ( [1] , [2]) ";
508 _cAgrupacion = ObtenerColumnasDetalleAdicional() +
" FLOOR ((MONTH(" + tcAliasDatos + _cOpcFechas +
") - 1) / 6) + 1 as " + _cTituloAgrupacion;
512 _cTituloAgrupacion =
" año ";
513 _cColumnasPivot = ObtenerColumnasBaseParaPivot() +
"[1] AS AÑO ";
514 _cInPivot = _cTituloAgrupacion +
" IN ( [1] ) ";
515 _cAgrupacion = ObtenerColumnasDetalleAdicional() +
" '1' as " + _cTituloAgrupacion;
519 _cTituloAgrupacion =
" saldo ";
520 _cColumnasPivot = ObtenerColumnasBaseParaPivot() +
"[1] AS SALDO ";
521 _cInPivot = _cTituloAgrupacion +
" IN ( [1] ) ";
522 _cAgrupacion = ObtenerColumnasDetalleAdicional() +
" '1' as " + _cTituloAgrupacion;
527 _cTituloAgrupacion =
" meses ";
528 _cColumnasPivot = ObtenerColumnasBaseParaPivot() +
"[1] AS Enero, [2] AS Febrero, [3] AS Marzo, [4] AS Abril, [5] AS Mayo, [6] AS Junio, [7] AS Julio, " +
529 "[8] AS Agosto, [9] AS Septiembre , [10] AS Octubre, [11] AS Noviembre, [12] AS Diciembre ";
530 _cInPivot = _cTituloAgrupacion +
" IN ( [1] , [2], [3], [4], [5] , [6], [7], [8],[9] , [10], [11], [12]) ";
531 _cAgrupacion = ObtenerColumnasDetalleAdicional() +
" MONTH(" + tcAliasDatos + _cOpcFechas +
") as " + _cTituloAgrupacion;
543 DateTime fecha =
new DateTime(Convert.ToInt32(ejercicio), 12, 31);
544 CultureInfo cultura = CultureInfo.InvariantCulture;
545 Calendar calendario = cultura.Calendar;
546 int cantidadSemanas = calendario.GetWeekOfYear(fecha, cultura.DateTimeFormat.CalendarWeekRule, cultura.DateTimeFormat.FirstDayOfWeek);
547 return cantidadSemanas;
550 #region Métodos override 555 public override List<string> _ReportColumns
559 List<string> ldReportColumns =
new List<string>();
561 foreach (DataColumn loCol
in _Resultados.Columns)
563 if (loCol.ColumnName.ToLower() !=
"bold")
564 ldReportColumns.Add(loCol.ColumnName);
566 return ldReportColumns;
575 base._SetColumnMasks();
577 string lcColumnName =
string.Empty;
578 List<string> llTPC =
new List<string> {
"%" };
580 foreach (DataColumn ldc
in _Resultados.Columns)
582 lcColumnName = ldc.ColumnName.ToLower().Trim();
583 string lcMascara =
"";
586 if (llTPC.Any(s => lcColumnName.Contains(s)))
588 lcMascara = _Mascara_TPC;
593 string lcTipoCampo = ldc.DataType.Name.ToString();
595 if ((lcTipoCampo ==
"Int32") || (lcTipoCampo ==
"Double") || (lcTipoCampo ==
"Decimal"))
600 lcMascara = _Mascara_Unidades;
606 lcMascara = _Mascara_Importe;
611 case "(ASIENTO.DEBE - ASIENTO.HABER)":
612 lcMascara = _DivisaConfig._DivisaMascaraImporte;
616 lcMascara = _Mascara_Cajas;
620 lcMascara = _Mascara_Peso;
627 if (!ldc.ExtendedProperties.ContainsKey(
"Mascara"))
628 ldc.ExtendedProperties.Add(
"Mascara", lcMascara);
639 base._ConvertVisualFiltersOptionsToObjects(toFiltrosVisuals, toOpcionesVisuals);
642 if (toFiltrosVisuals.Keys.Contains(
"txtEjercicioDesdeHasta"))
649 if (!loControlFiltro._Todos)
652 if (loControlFiltro.
_Lista != null && loControlFiltro.
_Lista.Count > 0)
654 _Ejercicios =
new string[loControlFiltro.
_Lista.Count];
655 _Ejercicios = loControlFiltro.
_Lista.ToArray<
string>();
659 if (loControlFiltro._Desde == loControlFiltro._Hasta) _Ejercicios =
new string[1] { loControlFiltro._Desde };
662 bool llRowArray =
false;
663 DataRow[] loRowArray =
new DataRow[0];
665 bool llDesde = !
string.IsNullOrWhiteSpace(loControlFiltro._Desde);
666 bool llHasta = !
string.IsNullOrWhiteSpace(loControlFiltro._Hasta);
669 if (llDesde && llHasta)
672 loRowArray = loControlFiltro.
_oFiltroDesde.
_DataTable.Select(
"ano>='" + loControlFiltro._Desde +
"' AND ano<='" + loControlFiltro._Hasta +
"'");
677 if (llDesde && !llHasta)
683 if (!llDesde && llHasta)
692 _Ejercicios =
new string[loRowArray.Count()];
694 foreach (DataRow loRow
in loRowArray)
696 _Ejercicios[lnIndex] = loRow[0].ToString().TrimEnd();
710 _Ejercicios[lnIndex] = loRow[0].ToString().TrimEnd();
722 protected override void _SetDefaultConfig(Dictionary<string, object> _Filtros, Dictionary<string, object> _Opciones)
724 base._SetDefaultConfig(_Filtros, _Opciones);
741 public override void _Navigate(
string tcKeyNavigate, DataRow trRowList, Dictionary<string, object> tdicParams)
744 functions.Clases.CambioEjercicio loEjer =
new functions.Clases.CambioEjercicio();
745 loEjer._Cambiar(tcKeyNavigate);
748 botones.Clases.btListados loBotonListados =
new botones.Clases.btListados();
751 loBotonListados._NombreListado = ObtenerCodigoListadoDeNavegacion();
753 loBotonListados._ShowDialog =
true;
756 loBotonListados._NavegacionDirecta = _NavegacionDirecta;
759 if (tdicParams != null && tdicParams.ContainsKey(
"NavigateFromFiltros"))
762 Dictionary<string, object> ldicFiltrosToButton =
new Dictionary<string, object>(tdicParams[
"NavigateFromFiltros"] as Dictionary<string, object>);
766 if (ldicFiltrosToButton.ContainsKey(
"txtFechaDesdeHasta")) ldicFiltrosToButton.Remove(
"txtFechaDesdeHasta");
769 if (trRowList != null &&
770 !String.IsNullOrEmpty(tcKeyNavigate))
776 DateTime ldFechaIni = DateTime.Today;
777 DateTime ldFechaFin = DateTime.Today;
778 CalcularFechas(tcKeyNavigate, trRowList, out ldFechaIni, out ldFechaFin);
779 loFiltroFecha._Desde = ldFechaIni.ToString(EW_GLOBAL._CustomFormatDate);
780 loFiltroFecha._Hasta = ldFechaFin.ToString(EW_GLOBAL._CustomFormatDate);
782 ldicFiltrosToButton.Add(
"txtFechaDesdeHasta", loFiltroFecha);
786 var lisFiltros = ldicFiltrosToButton.Where(loEle => loEle.Value is
txtFiltroBase).ToList();
788 foreach (var loFiltro
in lisFiltros)
796 if (tdicParams != null && tdicParams.ContainsKey(
"NavigateFromOpciones"))
799 Dictionary<string, object> ldicTmpOpcsToButton =
new Dictionary<string, object>(tdicParams[
"NavigateFromOpciones"] as Dictionary<string, object>);
801 if (ldicTmpOpcsToButton.ContainsKey(
"txtSelIva"))
802 ldicFiltrosToButton.Add(
"txtSelIva", ldicTmpOpcsToButton[
"txtSelIva"]);
804 if (ldicTmpOpcsToButton.ContainsKey(
"cmbdivisa"))
805 ldicFiltrosToButton.Add(
"cmbdivisa", ldicTmpOpcsToButton[
"cmbdivisa"]);
809 loBotonListados._DefaultValues = ldicFiltrosToButton;
812 loBotonListados.PerformClick();
814 loEjer._Restablecer();
817 #endregion Métodos override 819 #region Métodos auxiliares 829 DateTime ld1Enero =
new DateTime(tnYear, 1, 1);
830 int daysOffset = DayOfWeek.Thursday - ld1Enero.DayOfWeek;
832 DateTime ldPrimerJueves = ld1Enero.AddDays(daysOffset);
833 var loCalendario = CultureInfo.CurrentCulture.Calendar;
834 int lnFirstWeek = loCalendario.GetWeekOfYear(ldPrimerJueves, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
836 var lnWeekNum = tnWeekOfYear;
837 if (lnFirstWeek <= 1)
841 var result = ldPrimerJueves.AddDays(lnWeekNum * 7);
842 return result.AddDays(-3);
853 DateTime jan1 =
new DateTime(year, 1, 1);
855 var diaDeLaSemana = jan1.DayOfWeek == DayOfWeek.Sunday ? 7 : (int)jan1.DayOfWeek;
856 int daysOffset = (
int)DayOfWeek.Monday - diaDeLaSemana;
857 DateTime firstMonday = jan1.AddDays(daysOffset);
865 result = firstMonday.AddDays(weekNum * 7);
878 protected void CalcularFechas(
string tcEjercicio, DataRow trRow, out DateTime tdFechaIni, out DateTime tdFechaFin)
880 int lnEjercico = Convert.ToInt32(tcEjercicio);
882 Calendar loCalendar = CultureInfo.CurrentCulture.Calendar;
883 string lcFechaRow = Convert.ToString(trRow.Field<
string>(_cTituloListado));
885 switch (_eOpcAgruparPor)
892 string[] lcDataPart = lcFechaRow.Split(
',');
893 if (lcDataPart.Count() > 1)
895 lnMes = DateTime.ParseExact(lcDataPart[0],
"MMMM", CultureInfo.CurrentCulture).Month;
896 int lnDia = Convert.ToInt32(lcDataPart[1].Trim());
897 tdFechaIni = tdFechaFin =
new DateTime(lnEjercico, lnMes, lnDia);
901 tdFechaIni =
new DateTime(lnEjercico, 1, 1);
902 tdFechaFin =
new DateTime(lnEjercico, 12, 31);
907 tdFechaIni =
new DateTime(lnEjercico, 1, 1);
908 tdFechaFin =
new DateTime(lnEjercico, 12, 31);
918 if (lcFechaRow.StartsWith(
"Semana"))
924 int lnNumSemana = Convert.ToInt32(lcFechaRow.Replace(
"Semana ",
"").Trim());
926 tdFechaIni = FirstDateOfWeek(lnEjercico, lnNumSemana);
927 tdFechaFin = FirstDateOfWeek(lnEjercico, lnNumSemana + 1).AddDays(-1);
931 tdFechaIni =
new DateTime(lnEjercico, 1, 1);
932 tdFechaFin =
new DateTime(lnEjercico, 12, 31);
945 lnMes = DateTime.ParseExact(lcFechaRow,
"MMMM", CultureInfo.CurrentCulture).Month;
946 tdFechaIni =
new DateTime(lnEjercico, lnMes, 1);
947 tdFechaFin =
new DateTime(lnEjercico, lnMes, loCalendar.GetDaysInMonth(lnEjercico, lnMes));
951 tdFechaIni =
new DateTime(lnEjercico, 1, 1);
952 tdFechaFin =
new DateTime(lnEjercico, 12, 31);
965 tdFechaIni =
new DateTime(lnEjercico, 1, 1);
966 tdFechaFin =
new DateTime(lnEjercico, 3, loCalendar.GetDaysInMonth(lnEjercico, 3));
969 tdFechaIni =
new DateTime(lnEjercico, 4, 1);
970 tdFechaFin =
new DateTime(lnEjercico, 6, loCalendar.GetDaysInMonth(lnEjercico, 6));
973 tdFechaIni =
new DateTime(lnEjercico, 7, 1);
974 tdFechaFin =
new DateTime(lnEjercico, 9, loCalendar.GetDaysInMonth(lnEjercico, 9));
977 tdFechaIni =
new DateTime(lnEjercico, 10, 1);
978 tdFechaFin =
new DateTime(lnEjercico, 12, loCalendar.GetDaysInMonth(lnEjercico, 12));
981 tdFechaIni =
new DateTime(lnEjercico, 1, 1);
982 tdFechaFin =
new DateTime(lnEjercico, 12, 31);
995 tdFechaIni =
new DateTime(lnEjercico, 1, 1);
996 tdFechaFin =
new DateTime(lnEjercico, 6, loCalendar.GetDaysInMonth(lnEjercico, 6));
999 tdFechaIni =
new DateTime(lnEjercico, 7, 1);
1000 tdFechaFin =
new DateTime(lnEjercico, 12, loCalendar.GetDaysInMonth(lnEjercico, 12));
1004 tdFechaIni =
new DateTime(lnEjercico, 1, 1);
1005 tdFechaFin =
new DateTime(lnEjercico, 12, 31);
1015 tdFechaIni =
new DateTime(lnEjercico, 1, 1);
1016 tdFechaFin =
new DateTime(lnEjercico, 12, 31);
1022 tdFechaIni =
new DateTime(lnEjercico, 1, 1);
1023 tdFechaFin =
new DateTime(lnEjercico, 12, 31);
1040 bool llFechaDesde =
false;
1041 bool llFechaHasta =
false;
1042 bool llFechaUnica =
false;
1043 DateTime? ldFechaDesde = null;
1044 DateTime? ldFechaHasta = null;
1045 DateTime? ldFechaUnica = null;
1046 string lcAlias =
string.Empty;
1047 object loParametro = null;
1051 tcAlias = tcAlias.Trim();
1052 tcCampo = tcCampo.Trim();
1055 if (
string.IsNullOrWhiteSpace(tcAlias))
1061 lcAlias = tcAlias +
".";
1066 Dictionary<string, string> FiltroFechasPorEjercicio =
new Dictionary<string, string>();
1069 if (taEjecicios == null || taEjecicios.Count() == 0)
1070 return FiltroFechasPorEjercicio;
1072 foreach (var ejercio
in taEjecicios)
1074 FiltroFechasPorEjercicio.Add(ejercio,
"");
1076 bool ejercicioUnico = taEjecicios.
Count() == 1;
1079 toFiltros.TryGetValue((teFiltro +
"Lista"), out loParametro);
1080 if (loParametro != null)
1082 List<string> loLista;
1083 if (loParametro is
string)
1084 loLista =
new List<String>(loParametro.ToString().Split(
','));
1086 loLista = (List<string>)loParametro;
1089 List<DateTime> listaFechas =
new List<DateTime>();
1090 loLista.ForEach(loEle => listaFechas.Add(Convert.ToDateTime(loEle)));
1092 DateTime periodoIni = Convert.ToDateTime(EW_GLOBAL._GetVariable(
"wd_periodoini"));
1093 DateTime periodoFin = Convert.ToDateTime(EW_GLOBAL._GetVariable(
"wd_periodofin"));
1094 int ejercicioActual = Convert.ToInt32(EW_GLOBAL._GetVariable(
"wc_any").ToString());
1096 int diaPeriodoIni = periodoIni.Day;
1097 int mesPeriodoIni = periodoIni.Month;
1098 int anyPeriodoIni = periodoIni.Year;
1099 int correccionIni = ejercicioActual - anyPeriodoIni;
1101 int diaPeriodoFin = periodoFin.Day;
1102 int mesPeriodoFin = periodoFin.Month;
1103 int anyPeriodoFin = periodoFin.Year;
1104 int correccionFin = ejercicioActual - anyPeriodoFin;
1106 foreach (var ejercicio
in taEjecicios)
1108 string lcFiltroFecha =
string.Empty;
1111 DateTime fechaIni =
new DateTime(Convert.ToInt32(ejercicio) - correccionIni, mesPeriodoIni, diaPeriodoIni);
1112 DateTime fechaFin =
new DateTime(Convert.ToInt32(ejercicio) - correccionFin, mesPeriodoFin, diaPeriodoFin);
1115 var fechasEnRango = listaFechas.Where(d => d.CompareTo(fechaIni) >= 0 && d.CompareTo(fechaFin) <= 0).ToList();
1117 fechasEnRango = listaFechas;
1119 if (fechasEnRango.Any())
1121 lcFiltroFecha = lcAlias + tcCampo +
" IN (";
1124 foreach (DateTime fechaEnRango
in fechasEnRango)
1127 lcFiltroFecha += DB.SQLString(fechaEnRango);
1129 if (fechasEnRango.Count == lnInd)
1130 lcFiltroFecha +=
")";
1132 lcFiltroFecha +=
",";
1137 lcFiltroFecha =
" 1=2 ";
1139 FiltroFechasPorEjercicio[ejercicio] = lcFiltroFecha;
1146 toFiltros.TryGetValue(teFiltro +
"Desde", out loParametro);
1147 if (loParametro != null)
1149 ldFechaDesde = Convert.ToDateTime(loParametro);
1150 llFechaDesde =
true;
1155 toFiltros.TryGetValue(teFiltro +
"Hasta", out loParametro);
1156 if (loParametro != null)
1158 ldFechaHasta = Convert.ToDateTime(loParametro);
1160 llFechaHasta =
true;
1164 toFiltros.TryGetValue((teFiltro +
"Unico"), out loParametro);
1165 if (loParametro != null && !
string.IsNullOrWhiteSpace(loParametro.ToString()))
1167 ldFechaUnica = Convert.ToDateTime(loParametro);
1169 llFechaUnica =
true;
1174 if (llFechaDesde && llFechaHasta && ldFechaDesde == ldFechaHasta)
1176 ldFechaUnica = ldFechaDesde;
1177 llFechaUnica =
true;
1184 if (ldFechaDesde == null)
1186 ldFechaDesde = Convert.ToDateTime(EW_GLOBAL._GetVariable(
"wd_periodoini"));
1187 llFechaDesde =
true;
1189 if (ldFechaHasta == null)
1191 ldFechaHasta = Convert.ToDateTime(EW_GLOBAL._GetVariable(
"wd_periodofin"));
1192 llFechaHasta =
true;
1194 llFechaUnica =
false;
1202 foreach (var ejercicio
in taEjecicios)
1204 var periodo = periodosInstalacion.GetPeriodo(ejercicio);
1205 if (periodo != null)
1207 if (periodo.PerteneceAlPeriodo(ldFechaUnica.Value))
1208 FiltroFechasPorEjercicio[ejercicio] = lcAlias + tcCampo +
" = " + DB.SQLString(ldFechaUnica);
1210 FiltroFechasPorEjercicio[ejercicio] =
" 1=2 ";
1216 if (llFechaDesde || llFechaHasta)
1218 foreach (var ejercicio
in taEjecicios)
1220 string lcFiltroFecha =
string.Empty;
1221 PeriodoItem current = periodosInstalacion.GetPeriodo(ejercicio);
1225 lcFiltroFecha += lcAlias + tcCampo +
" >= " + DB.SQLString(ldFechaDesde);
1227 lcFiltroFecha += lcAlias + tcCampo +
" >= " + DB.SQLString(current.
PeriodoIni);
1232 lcFiltroFecha +=
" AND ";
1235 lcFiltroFecha += lcAlias + tcCampo +
" <= " + DB.SQLString(ldFechaHasta);
1237 lcFiltroFecha += lcAlias + tcCampo +
" <= " + DB.SQLString(current.
PeriodoFin);
1239 FiltroFechasPorEjercicio[ejercicio] = lcFiltroFecha;
1246 FiltroFechasPorEjercicio[taEjecicios[0]] =
"";
1250 foreach (var ejercicio
in taEjecicios)
1252 var periodo = periodosInstalacion.GetPeriodo(ejercicio);
1253 if (periodo != null)
1255 FiltroFechasPorEjercicio[ejercicio] = periodo.
ToFilterString(lcAlias, tcCampo);
1264 foreach (var ejercicio
in taEjecicios)
1266 FiltroFechasPorEjercicio[ejercicio] = FiltroFechaPorEjercicio_AddOperator(teOperador, FiltroFechasPorEjercicio[ejercicio]);
1270 return FiltroFechasPorEjercicio;
1279 private string FiltroFechaPorEjercicio_AddOperator(_Operador_Condicional teOperador,
string lcFiltroFecha)
1281 if (!
string.IsNullOrWhiteSpace(lcFiltroFecha))
1285 case _Operador_Condicional.And:
1286 lcFiltroFecha =
" And " + lcFiltroFecha;
1289 case _Operador_Condicional.Or:
1290 lcFiltroFecha =
" Or " + lcFiltroFecha;
1293 case _Operador_Condicional.None:
1300 return lcFiltroFecha;
1329 if (TrabajaConEjercicioPartido)
1331 DateTime periodoIni = Convert.ToDateTime(EW_GLOBAL._GetVariable(
"wd_periodoini"));
1333 switch (_eOpcAgruparPor)
1338 DateTime expectedIni =
new DateTime(year: periodoIni.Year, month: 1, day: 1);
1341 TimeSpan diferencia = periodoIni - expectedIni;
1342 if (diferencia.Days >= 60)
1343 diferencia = diferencia = periodoIni - expectedIni.AddDays(-1);
1345 for (
int i = 1; i <= diferencia.Days; i++)
1348 tdtDatos.Columns[1].SetOrdinal(tdtDatos.Columns.Count - 1);
1356 int primerMes = periodoIni.Month;
1357 for (
int i = 1; i < primerMes; i++)
1360 tdtDatos.Columns[1].SetOrdinal(tdtDatos.Columns.Count - 1);
1378 #endregion Métodos auxiliares ComparativosMensuales(eTipoComparativa teTipoComparativo)
Constructor base
virtual string ObtenerColumnasBaseParaPivot()
Método virtual que obtiene las columnas que sirven de base para realizar el PIVOT ...
Plantilla para la creación de controles de tipo Filtro
Clase abstracta de base para comparativos mensuales
virtual string ObtenerColumnasDetalleAdicional()
Por si se requieren columnas adicionales
virtual void DeterminarTipoAgrupacion()
Método virtual para determinar el tipo de agrupación de los datos
override void _SetColumnMasks()
Override del método de mascaras. Los títulos cambian con los años por lo que se mira por tipo de dato...
Control para filtros de fechas
DataTable _DataTable
Objeto DataTable dónde podremos indicar un orígen de datos (DataTable) para el combo o grid ...
Clase para el filtradod de ejercicios
ConfiguradorFiltroVisual _ToConfiguradorFiltroVisual()
Genera un configurador visual a partir de los valores del control
override List< string > _Lista
Override de Lista de valores seleccionados para realizar operaciones adicionales
eTipoComparativa
Tipo de comparativa mensual
string ToFilterString(string tcAlias, string tcCampo)
Genera una cadena para filtros
_Tipo_Filtro_Fecha
Enumeración de los posibles filtros fecha a realizar
override void _ConvertVisualFiltersOptionsToObjects(Dictionary< string, object > toFiltrosVisuals=null, Dictionary< string, object > toOpcionesVisuals=null)
Override del método de conversión para recuperar los ejercicios
bool PerteneceAlPeriodo(DateTime tdFecha)
Método que determina si una fecha pertenece al período
virtual void DeterminarOpcionDeSuma()
Determina el tipo de opción de suma
virtual string ObtenerCodigoListadoDeNavegacion()
Obtiene los códigos de listados de navegación
new ewtxtcodlabel _oFiltroDesde
txtcodlabel de filtro para obtener el valor Mínimo
DateTime PeriodoIni
Fecha de inicio de período
_Operador_Condicional
Enumeración de los posbiles operadores a utilizar en el inicio de los filtros (PE-81807) ...
void ReordenarColumnasEjercicioPartido(ref DataTable tdtDatos)
Método de reordenación de columnas en base al trabajo con ejercicio partido
static Periodos Instancia
Instancia SINGLETON para períodos
override void _Navigate(string tcKeyNavigate, DataRow trRowList, Dictionary< string, object > tdicParams)
Override del _Navigate
virtual void DeterminarOpcionDeFecha()
Determina el tipo de opción de fecha deseado
Clase SINGLETON para la gestión de períodos
DateTime PeriodoFin
Fecha de fin de período
void CalcularFechas(string tcEjercicio, DataRow trRow, out DateTime tdFechaIni, out DateTime tdFechaFin)
Método auxiliar para reconvertir el Row en un rango de fechas
override void _SetEjercicios()
Override del _SetEjercicios pq estropea el funcionamiento multiejercicio del listado ...
static DateTime FirstDateOfWeekISO8601(int tnYear, int tnWeekOfYear)
Función auxiliar de la normativa ISO 8601 para obtener la fecha del primer día de una semana ...
override void _SetDefaultConfig(Dictionary< string, object > _Filtros, Dictionary< string, object > _Opciones)
Override del método para establecer la configuración (no visual) por defecto
int Count()
Obtiene el número de períodos
_eAgruparPor
Agrupacciones temporales
DateTime FirstDateOfWeek(int year, int weekNum)
Función auxiliar para obtener la fecha del primer día de una semana (sin norma especial => 01/01/xxxx...
bool usarEscalaDeTiempo()
Determina si se ha seleccionado no utilizar escala de tiempo
void CalcularParametrosAgrupacion(string tcAliasDatos)
Calcula los parametros de la agrupación solicitada
Dictionary< string, string > _FiltroFechaPorEjercicio(Dictionary< string, object > toFiltros, string teFiltro, string tcAlias, string tcCampo, string[] taEjecicios, _Operador_Condicional teOperador=_Operador_Condicional.And)
Método para preparar un filtro de tipo fecha
int ObtenerNumeroSemanasEjercicio(string ejercicio)
Obtiene el número de semanas que tiene un ejercicio
ComparativosMensuales(eTipoComparativa teTipoComparativo, object[] toObjects)
Constructor con parametros de entrada
void _GarantizarAlmenosUnRegistro(ref DataTable tdtResultados)
Método de corrección para garantizar que almenos haya un registro