Ver Mensaje Individual
  #9 (permalink)  
Antiguo 02/08/2010, 06:55
Avatar de Adler
Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: marcar eventos multidia en calendario

Hola

Veamos si es esto lo que buscas

Se necesita 4 campos
Cita:
FechaInicio --> Fecha (21/09/2010)
FechaFinal ---> Fecha (25/09/2010)
AnyoMes ---> Texto (2010/09)
Evento ---> Texto
Te he marcado las partes editables. Si no entiendes el código no edites nada más
Código ASP:
Ver original
  1. <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
  2. <% Option Explicit %>
  3. <html>
  4. <head>
  5. <title>Horarios</title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  7. <style type="text/css">
  8. #ContenedorCalendario{background-color:#EEEEEE;padding-top:20px;border: 1px solid #C9C9C9;width:800px;}
  9. .calFondoCalendario {background-color:#EEEEEE;border: 1px solid #C9C9C9;}
  10. #calFondoMes, .calFondoDias, .calFondoSemanas, .calFondoNumeroSemanas {background-color:#C9C9C9;}
  11. #calFondoMes {font:bold 11px Arial, Helvetica, sans-serif; text-align:center;}
  12. .calFondoDias, .calFondoSemanas, .calFondoNumeroSemanas {font:900 9px Arial, Helvetica, sans-serif;}
  13. #calDias, #calFinSemana {font:700 11px Arial, Helvetica, sans-serif;text-decoration:none;}
  14. #calDias a{color:#333333;}
  15. #calFinSemana {color:#FF0000;}
  16. #calDiasMarcado, #calFinSemanaMarcado {background-color:#C9C9C9; font:700 11px Arial, Helvetica, sans-serif;}
  17. #calDiasMarcado a{color:#FFFFFF;text-decoration:none;}
  18. #calFinSemanaMarcado a {color:#FF0000;text-decoration:none;}
  19. #calDiasMarcado div, #calFinSemanaMarcado div {display:none;}
  20. #calDiasMarcado:hover div, #calFinSemanaMarcado:hover div {display:block;position:absolute;border:1px solid #C9C9C9;width:100px;height:100px;background-color:#FFFFFF;color:#000000;font:11px Verdana, Helvetica, sans-serif;}
  21. .calDiaVacio {background-color:#FFFFFF;color:#C9C9C9;font:700 11px Arial, Helvetica, sans-serif; text-align:center;}
  22. #paginador {background-color:#EEEEEE;height:30px;padding-top:7px;}
  23. #paginador a{background-color:#A4A4A4;color:#FFFFFF;font:900 9px Arial, Helvetica, sans-serif;text-decoration:none;padding:3px;border: 1px solid #C9C9C9;}
  24. </style>
  25. </head>
  26. <body>
  27.  
  28. <div id="ContenedorCalendario">
  29.  
  30. <%
  31. ' ===============  Sub y Funciones ================
  32. Sub Dias()
  33. %>
  34. </td>
  35. </tr>
  36. <tr align="center">
  37. <td rows="6"><div class="calFondoSemanas">Sem</div></td>
  38. <td><div class="calFondoDias">Lun</div></td>
  39. <td><div class="calFondoDias">Mar</div></td>
  40. <td><div class="calFondoDias">Mi&eacute;</div></td>
  41. <td><div class="calFondoDias">Jue</div></td>
  42. <td><div class="calFondoDias">Vie</div></td>
  43. <td><div class="calFondoDias">S&aacute;b</div></td>
  44. <td><div class="calFondoDias">Dom</div></td>
  45. </tr>
  46. <%
  47. End Sub
  48.  
  49. Function Nombre_Mes(ElMes)
  50. Select Case ElMes
  51. Case 1
  52. Nombre_Mes = "Enero"
  53. Case 2
  54. Nombre_Mes = "Febrero"
  55. Case 3
  56. Nombre_Mes = "Marzo"
  57. Case 4
  58. Nombre_Mes = "Abril"
  59. Case 5
  60. Nombre_Mes = "Mayo"
  61. Case 6
  62. Nombre_Mes = "Junio"
  63. Case 7
  64. Nombre_Mes = "Julio"
  65. Case 8
  66. Nombre_Mes = "Agosto"
  67. Case 9
  68. Nombre_Mes = "Septiembre"
  69. Case 10
  70. Nombre_Mes = "Octubre"
  71. Case 11
  72. Nombre_Mes = "Noviembre"
  73. Case 12
  74. Nombre_Mes = "Diciembre"
  75. Case Else
  76. Nombre_Mes = "ERROR!"
  77. End Select
  78. End Function
  79.  
  80. Function UltimoDia(ElMes, ElAnyo)
  81. Select Case ElMes
  82. Case 1, 3, 5, 7, 8, 10, 12
  83. UltimoDia = 31
  84.  
  85. Case 4, 6, 9, 11
  86. UltimoDia = 30
  87.  
  88. Case 2
  89. If IsDate(ElAnyo & "-" & ElMes & "-" & "29") Then UltimoDia = 29 Else UltimoDia = 28
  90.  
  91. Case Else
  92. UltimoDia = 31
  93. End Select
  94. End Function
  95.  
  96. ' ===============  Sub y Funciones ================
  97.  
  98.  
  99. Dim oConn, SQL, rs, registros
  100. Dim j, i, z, indiceCicloArrUnidimen, indiceCicloEvento ' ----> Contadores
  101. Dim numRows
  102. Dim arregloIni(), arregloFin(), DiffDias(), RangoDias(), TxtEvento(), RangoDias2(), TxtEvento2()
  103. Dim FechaIni, FechaFin, Evento
  104. Dim Mes, ElMes
  105. Dim Anyo, ElAnyo
  106. Dim FechaInicio, FechaActual, FechaFinal
  107. Dim DiaActual
  108. Dim SumarMesQuery, MesAnyo
  109. Dim PrimerDiaMes
  110. Dim Semana, nSemanas01, nSemanas31
  111. Dim DiasMesSiguiente, DiasMesAnterior
  112. Dim Columna, Fila
  113. Dim UltimoDiaMesAnterior
  114. Dim EstamosEnEl, cad
  115. Dim unMesMenos, unMesMas, splMenos, splMas, mesMenos, mesMas, anyoMas, anyoMenos
  116. Dim pagMeses ' ---> Meses que hay que sumar o restar para hacer la paginación
  117. FechaIni = 0
  118. FechaFin = 1
  119. Evento = 2
  120.  
  121.  
  122. ' Si viene vacía o no es numerica
  123. If Request.Querystring("mes") = "" or Not IsNumeric(Request.Querystring("mes")) then
  124. Mes = CInt(Month(Date))
  125. Else
  126. Mes = CInt(Request.Querystring("mes"))
  127. End If
  128. If Request.Querystring("anyo") = "" or Not IsNumeric(Request.Querystring("anyo")) then
  129. Anyo = CInt(Year(Date))
  130. Else
  131. Anyo = CInt(Request.Querystring("anyo"))
  132. End If
  133. FechaInicio = CDate("1/" & Month(Date) & "/" & Year(Date))
  134. FechaActual = CDate("1/" & Mes & "/" & Anyo)
  135. FechaFinal = DateAdd("m", 4, FechaInicio)
  136.  
  137. ' Conexión
  138.  
  139. ' Traemos los eventos y sus fechas
  140. ' Consulta para un mes
  141. SQL ="SELECT FechaInicio, FechaFinal, Evento, AnyoMes FROM Calendario2 WHERE AnyoMes = '"& CInt(Anyo) & "/" & CInt(Mes) & "';"
  142. ' Consulta para más de un mes
  143. 'SQL ="SELECT FechaInicio, FechaFinal, Evento FROM Calendario2 WHERE FechaInicio >= #"& FechaActual &"#;"
  144. set rs = oConn.Execute(SQL)
  145.  
  146. ' Hay eventos??
  147. IF not rs.eof = True Then
  148.  
  149. ' Traemos las fechas de inicio y final
  150. registros = rs.getrows()
  151. rs.Close
  152. Set rs = Nothing
  153. oConn.Close
  154. Set oConn = Nothing
  155.  
  156. numRows = UBound(registros,2)+1
  157.  
  158. indiceCicloArrUnidimen = 0
  159.  
  160. Redim arregloIni(numRows)
  161. Redim arregloFin(numRows)
  162. Redim DiffDias(numRows)
  163. 'Redim RangoDias(1, 1)
  164. 'Redim TxtEvento(1, 1)
  165.  
  166. For j = 0 to UBound(registros,2)
  167. arregloIni(j) = registros(FechaIni,j)
  168. arregloFin(j) = registros(FechaFin,j)
  169.  
  170. ' Sacamos el número días en los que el evento estará activo
  171. DiffDias(j) = DateDiff("d", arregloIni(j), arregloFin(j))
  172.  
  173. Redim preserve RangoDias(numRows, DiffDias(j))
  174. Redim preserve TxtEvento(numRows, DiffDias(j))
  175.  
  176.  
  177. ' Sacamos el rango de fechas entre la fecha inical y final y los eventos
  178. For i = 0 to DiffDias(j)
  179. RangoDias(j, i) =  DateSerial(CInt(split(arregloIni(j),"/")(2)), CInt(split(arregloIni(j),"/")(1)), CInt(split(arregloIni(j),"/")(0)) + CInt(i))
  180. TxtEvento(j, i) = registros(Evento,j)
  181. Next 'i
  182.  
  183. ' Trabajamos esos eventos y fechas  para insertarlas en una matríz unidimensional y poder evaluarlas más tarde
  184. For z = 0 to UBound(RangoDias,2)
  185. Redim Preserve RangoDias2(indiceCicloArrUnidimen)
  186. Redim Preserve TxtEvento2(indiceCicloArrUnidimen)
  187. RangoDias2(indiceCicloArrUnidimen) = """" & RangoDias(j,z) & """"
  188. TxtEvento2(indiceCicloArrUnidimen) = TxtEvento(j,z)
  189. indiceCicloArrUnidimen = indiceCicloArrUnidimen +1
  190. Next 'z
  191. Next 'j
  192.  
  193. indiceCicloEvento = 0
  194. %>
  195.  
  196. <!-- Empezamos a montar el Calendario -->
  197.  
  198. <div>
  199. <table border="0" cellspacing="0px" cellpadding="0px" width="85%" align="center">
  200. <tr>
  201. <%
  202. IF FechaActual > FechaFinal then ' Aún no ha progresado 6 meses en el calendario
  203. %>
  204. <td id="calFondoMes">No puede consultar eventos con mas de 6 meses de antelación</td></tr></table>
  205. <div id="paginador" align="center">
  206. <a href="./calendario.asp?mes=<%=Month(FechaFinal)%>&anyo=<%=Year(FechaFinal)%>">Atr&aacute;s</a>
  207. </div>
  208. <%
  209. ELSEIF FechaActual < FechaInicio then ' Se ha manipulado las var con una fecha menor a la de inicio
  210. %>
  211. <td id="calFondoMes">No puede consultar eventos ya pasados</td></tr></table>
  212. <div id="paginador" align="center">
  213. <a href="./calendario.asp?mes=<%=Month(Date)%>&anyo=<%=Year(Date)%>">Atr&aacute;s</a>
  214. </div>
  215. <%
  216. ELSE
  217. ' =======
  218. ' EDITABLE
  219. ' Para mostrar más de un mes editamos el límite del ciclo
  220. ' =======
  221. For i = 0 to 0 ' ¿Cuantos meses mostramos? 0 : 1 mes, 1 : 2 meses, ...
  222. SumarMesQuery = DateAdd("m", i, DateSerial(Anyo, Mes, 1))
  223. MesAnyo = Split(SumarMesQuery,"/")
  224. ElMes = MesAnyo(1)
  225. ElAnyo = MesAnyo(2)
  226. %>
  227. <td>
  228. <table border="0" cellspacing="1px" cellpadding="3px" width="200px" align="center" class="calFondoCalendario">
  229. <tr align="center">
  230. <td colspan="8">
  231. <div id="calFondoMes">
  232. <%=Nombre_Mes(ElMes)%>,&nbsp;<%=ElAnyo%>
  233. </div>
  234. <%
  235. Call Dias()
  236. DiaActual = 1
  237. PrimerDiaMes = DatePart("w", DateAdd("d", -1, DateSerial(ElAnyo, ElMes, 1)), vbMonday)
  238. Semana = DatePart("ww", CDate("01/" & ElMes & "/" & ElAnyo), vbMonday, vbFirstFourDays) ' Número de la semana del mes actual
  239. nSemanas31 = DatePart("ww", CDate("12/31/" & ElAnyo), vbMonday, vbFirstFourDays) 'Número de semanas del año
  240. nSemanas01 = DatePart("ww", CDate("01/01/" & ElAnyo), vbMonday, vbFirstFourDays) 'Número de semana de la primera semana del año siguiente
  241. DiasMesSiguiente = 0
  242. For Fila = 0 to 5
  243. %>
  244. <tr height="20px">
A por la otra parte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />