Outlook Calendar (prototype)

Re: Outlook Calendar (prototype)

Postby Daniel Garcia-Gil » Thu Sep 06, 2012 4:48 pm

Francisco Horta wrote:Daniel,
Gracias por tu apoyo, vere si lo puedo adaptar, por lo pronto le hice unos pequaños cambios para colorear, estoy probando ya con los registros de hecho estoy usando mysql, no dbf's, asi que por lo pronto ya me atore con el nId del calinfo, estoy revisando la clase a ver por donde van los tiros, o es para trabajar con dbf's?
mientras seguire probando y te comento
saludos
paco


los datos los puedes tomar de cualquier fuente de datos, eso es programable.
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Outlook Calendar (prototype)

Postby Francisco Horta » Thu Sep 06, 2012 6:43 pm

Ok, done me perdi es el id que genera para el array y el id incremental que tengo en mi tabla, cuando elimino registros me borran los que no son, me puedes ayudar con ese punto para entender como funciona el array con la carga de la info que tengo en mi tabla o cual campo de mi taba debe coincidir con el id en el array de calinfo, ahi me perdi, estaba viendo la opcion tambien del codejock, pero prefiero no usar de terceros, por aquello de no te entumas, jeje expersion mexicana.
mil gracias
saludos
paco
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: Outlook Calendar (prototype)

Postby Daniel Garcia-Gil » Thu Sep 06, 2012 8:52 pm

Hola

te dejo un ejemplo funcional usando dolphin...

la data nIdx es parametizable con el valor del campo indice para cada caso...
eso lo puedes ver en el metodo LoadDates...

Code: Select all  Expand view

      ::oCalex:LoadDates( oQry:start,;
                          oQry:endi, ;
                          oQry:dstart, ;
                          oQry:dstart, ;
                          oQry:texto, ;
                          oQry:subject,;
                          oQry:idx )
 


si te fijas el ultimo parametro es el dato que me servira para localizar ese unico registro y sera almacenado en la DATA nIdx del objeto CALINFO (que no es numerica necesariamente, mal de mi parte, disculpa)

actualmente puedes hacer varias citas el mismo dia y a la misma hora

la cantidad de citas visible en la vista del mes es autoajustable dependiendo del tamaño del control, puedes intentar ampliarlo y reducirlo para que veas el efecto...
si te fijas en la vista semanal, los nomre de los dias tambien se ajustan dependiendo del ancho de las columnas

http://www.sitasoft.net/fivewin/samples/calex_sample_dolphin.zip

Code: Select all  Expand view

#include "fivewin.ch"
#include "calendar.ch"
#include "calex.ch"
#include "tselex.ch"
#include "ord.ch"
#include "tdolphin.ch"

REQUEST DBFCDX

function Main()

   SET DATE FORMAT "MM/DD/YYYY"
   SET DELETE ON
     
   SampleCalex():New()

return nil

//---------------------------------------------------//

CLASS SampleCalex

   DATA dDateStart, dDateEnd
   
   DATA oServer
   
   DATA lOnPreNext
   
   DATA oCalex
   DATA oDtPick
   DATA oExBar  
   DATA oPanelExplorer
   DATA oPanelCalex
   DATA oWnd
   DATA oSelex
   
   METHOD New()

   METHOD AddDates()

   METHOD connectMySql()
   
   METHOD BuildCalex()  
   METHOD BuildDialog()
   METHOD BuildExplorer()
   METHOD BuildPanels()
   METHOD BuildPop( oView, dDateFrom, dDateTo, nTimeFrom, nTimeTo )
   
   METHOD ChangeSelex()
   METHOD ChangeDate()
   
   METHOD DeleteInfo( oView, nIdx )
   
   METHOD SetSize( nType, nWidth, nHeight )
   
ENDCLASS

//---------------------------------------------------//

METHOD New() CLASS SampleCalex
   
   local oMenu
   local oSelf := Self
   
   MENU oMenu
   ENDMENU
   
   ::dDateStart = Date()
   ::dDateEnd   = Date()
   
   ::lOnPreNext = .F.
   
   ::connectMySql()
   
   DEFINE WINDOW ::oWnd MDI MENU oMenu
   
   ::BuildPanels()
   ::BuildExplorer()
   ::BuildCalex()
//   ::Adddates()
   
   ACTIVATE WINDOW ::oWnd MAXIMIZED;
            ON RESIZE oSelf:SetSize( nSizeType, nWidth, nHeight )
 
   
RETURN Self

//---------------------------------------------------//

METHOD AddDates( dStart, dEnd, nStart, nEnd ) CLASS SampleCalex

   local dDate
   local oQry
   // compat with xharbour  
   DEFAULT dStart := CToD( "  /  /  " )
   DEFAULT dEnd   := CToD( "  /  /  " )
   
                           
   oQry = ::oServer:Query( "SELECT * FROM citas WHERE concat( dstart + '', start + '' ) >= '" + DToS( dStart ) + Str( nStart * 100, 4 ) +;
                           "' AND concat( dstart + '', start + '' ) <= '" + DToS( dEnd ) + Str( nEnd * 100, 4 ) + "'" )
   
   ::oCalex:Reset()
   
   DO WHILE ! oQry:Eof()
      ::oCalex:LoadDates( oQry:start,;
                          oQry:endi, ;
                          oQry:dstart, ;
                          oQry:dstart, ;
                          oQry:texto, ;
                          oQry:subject,;
                          oQry:idx )
      oQry:Skip()
   ENDDO
   
   oQry:End()
   
RETURN nil

//---------------------------------------------------//

METHOD BuildCalex() CLASS SampleCalex
   
   local oSelf := Self
   
   DEFINE CALEX ::oCalex OF ::oPanelCalex;
          FIRST_DATE 2
   
   DEFINE MONTH VIEW OF ::oCalex;
          ON SELECT VIEW ( oSelf:AddDates( ::dStart, ::dEnd, ::nStartHour, ::nEndHour ), ;
                           oSelf:oDtPick:SetDate( ::dDateSelected )  ) ;
          ON SELECT DAY  oSelf:oDtPick:SetDate( dDate ) ;
          ON SELECT WEEK oSelf:oDtPick:SetDate( dDate ) ;
          ON NEXT        ( oSelf:oDtPick:SetDate( dDate ), ;
                           oSelf:AddDates( ::dStart, ::dEnd, ::nStartHour, ::nEndHour ) );
          ON PREV        ( oSelf:oDtPick:SetDate( dDate ), ;
                           oSelf:AddDates( ::dStart, ::dEnd, ::nStartHour, ::nEndHour ) );
          ACTIVATE

   //Day

   DEFINE DAY VIEW OF ::oCalex ;
          INTERVAL 30 ;
          START HOUR 2 ;
          END HOUR 19;
          ON SELECT VIEW ( oSelf:AddDates( ::dStart, ::dEnd, ::nStartHour, ::nEndHour ), ;
                           oSelf:oDtPick:SetDate( ::dDateSelected )  ) ;
          ON NEXT        ( oSelf:oDtPick:SetDate( dDate ), ;
                           oSelf:AddDates( ::dStart, ::dEnd, ::nStartHour, ::nEndHour ) );
          ON PREV        ( oSelf:oDtPick:SetDate( dDate ), ;
                           oSelf:AddDates( ::dStart, ::dEnd, ::nStartHour, ::nEndHour ) );
          ON RIGHT CLICK ( oSelf:BuildPop( nRow, nCol, Self, dDateFrom, dDateTo, nTimeFrom, nTimeTo ) );
          ON DELETE      ( oSelf:DeleteInfo( Self, nIdx ) )
                           
   
   //Week
   
   DEFINE WEEK VIEW OF ::oCalex ;
          INTERVAL 30 ;
          START HOUR 0 ;
          END HOUR 25;
          ON SELECT VIEW ( oSelf:oDtPick:SetDate( oLast:dDateSelected - DoW( oLast:dDateSelected ) + 1 ),;
                           oSelf:AddDates( ::dStart, ::dEnd, ::nStartHour, ::nEndHour ) ) ;
          ON RIGHT CLICK ( oSelf:BuildPop( nRow, nCol, Self, dDateFrom, dDateTo, nTimeFrom, nTimeTo ) ) ;
          ON NEXT        ( oSelf:oDtPick:SetDate( dDate ), ;
                           oSelf:AddDates( ::dStart, ::dEnd, ::nStartHour, ::nEndHour ) );
          ON PREV        ( oSelf:oDtPick:SetDate( dDate ), ;
                           oSelf:AddDates( ::dStart, ::dEnd, ::nStartHour, ::nEndHour ) );
          ON DELETE      ( oSelf:DeleteInfo( Self, nIdx ) )
 
RETURN nil

//---------------------------------------------------//

METHOD connectMysql() CLASS SampleCalex

   local cHost:="dolphintest.sitasoft.net"
   local cUser:="test_dolphin"
   local cPsw:="123456"
   local nFlags:=0x20000
   local nPort:=3306
   local cDBName:="dolphin_man"
   
   
   CONNECT ::oServer HOST chost ;
                      USER cUser ;
                      PASSWORD cpsw ;
                      PORT nPort ;
                      FLAGS nFlags;
                      DATABASE cDBName  
   

RETURN nil

//---------------------------------------------------//

METHOD BuildDialog( oView, dDateFrom, dDateTo, nTimeFrom, nTimeTo ) CLASS SampleCalex

   local oDlg
   local cSubject := Space( 100 )
   local cText
   local lSave := .F.
   local lNew := oView:oCalex:oCalInfoSelected == NIL
   local o, nID, cLastOrd
   local aMod
   
   DEFINE DIALOG oDlg TITLE "Adding Data" SIZE 300, 370
   
   if ! lNew
      o = oView:oCalex:oCalInfoSelected
      cSubject = o:cSubject
      cText    = o:cText
   endif
   
   
   @ 10, 10 SAY "Date: " + DToC( dDateFrom ) OF oDlg PIXEL
   @ 25, 10 SAY "Time Start: [" + oView:ConvertTime( nTimeFrom, oView:lAmPm ) +;
                "] -- Time End: [" + oView:ConvertTime( nTimeTo, oView:lAmPm ) + "]" OF oDlg PIXEL
   @ 40, 10 SAY "Subject" OF oDlg PIXEL
   @ 40, 30 GET cSubject OF oDlg PIXEL SIZE 100, 10
   @ 55, 10 SAY "Text" OF oDlg PIXEL
   @ 70, 10 GET cText MEMO OF oDlg PIXEL SIZE 130, 95
   @ 170, 10 BUTTON "OK" PIXEL ACTION ( lSave := .T., oDlg:End() )
   @ 170, 100 BUTTON "CANCEL" PIXEL ACTION ( oDlg:End() )
   
   ACTIVATE DIALOG oDlg CENTERED

   IF lSave
      if lNew
         ::oServer:hInsert( "citas", { "start" => nTimeFrom, "endi" => nTimeTo, "dstart" => dDateFrom, "subject" => cSubject, "texto" => cText } )
      else
         ::oServer:hUpdate( "citas", { "start" => nTimeFrom, "endi" => nTimeTo, "dstart" => dDateFrom, "subject" => cSubject, "texto" => cText },;
                           "idx = " + ClipValue2Sql( o:nIdx ) )
      endif
      ::AddDates( oView:dStart, oView:dEnd, oView:nStartHour, oView:nEndHour )      
      oView:BuildDates()      
     
   ENDIF

RETURN nil

//---------------------------------------------------//

METHOD BuildExplorer() CLASS SampleCalex

   local oPanel
   local oSelf := Self
   local nOption := 5
   
   ::oExBar := TExplorerBar():New( 0, 0, 250, 300, ::oPanelExplorer )
   
   oPanel := ::oExBar:AddPanel( "Jump To Date", "c:\fwh\bitmaps\32x32\people.bmp", 200 )
   @ 40, 15 CALENDAR ::oDtPick VAR ::dDateStart OF oPanel PIXEL;
              SIZE 220, 157;
             
   ::oDtPick:bChange = { | o | ::ChangeDate( o ) }
   
   oPanel := ::oExBar:AddPanel( "View", "c:\fwh\bitmaps\32x32\people.bmp", 130 )
     oPanel:AddLink( "Daily"  , { || ::oCalex:SetDayView(), ::ChangeSelex()  }, "c:\fwh\bitmaps\16x16\additem.bmp" )
     oPanel:AddLink( "Weekly" , { || ::oCalex:SetWeekView(), ::ChangeSelex() }, "c:\fwh\bitmaps\16x16\additem.bmp" )
     oPanel:AddLink( "Monthly", { || ::oCalex:SetMonthView() }, "c:\fwh\bitmaps\16x16\additem.bmp" )

   @ 100, 10 SELEX ::oSelex VAR nOption of oPanel PIXEL size 220, 45;
      ITEMS "5", "10", "15", "20", "30", "60" ;
      GRADIENT OUTTRACK { { 1/2, nRGB( 219, 230, 244 ), nRGB( 207-50, 221-25, 255 ) }, ;
                          { 1/2, nRGB( 201-50, 217-25, 255 ), nRGB( 231, 242, 255 ) } };
      LINECOLORS nRGB( 237, 242, 248 ), nRGB( 141, 178, 227 );
      COLORTEXT  CLR_BLACK, CLR_GREEN ;
      ACTION (::oCalex:oView:SetInterval( Val( ::oSelex:aOptions[ nOption ] ) ), ::oCalex:refresh() )
     
   ::oPanelExplorer:oClient = ::oExBar
   ::oPanelExplorer:oClient:bMouseWheel = {|| MsgInfo( "ok" ) }

RETURN nil

//---------------------------------------------------//

METHOD BuildPanels() CLASS SampleCalex

   local oBrush

   ::oPanelExplorer = TPanel():New( 0, 0, ::oWnd:nHeight, 280, ::oWnd:oWndClient )
   
   ::oPanelCalex    = TPanel():New( 0, 281, ::oWnd:nHeight, ::oWnd:nWidth, ::oWnd:oWndClient )
   
   DEFINE BRUSH oBrush COLOR CLR_WHITE
   
   ::oPanelCalex:SetBrush( oBrush )
   
   oBrush:End()


RETURN nil

//---------------------------------------------------//

METHOD ChangeSelex() CLASS SampleCalex
   
   local cInterval := AllTrim( Str( ::oCalex:oView:nInterval * 60, 2 ) )
   local nAt := AScan( ::oSelex:aOptions, cInterval )

   if nAt != 0  .and. ::oSelex:nOption != nAt
      ::oSelex:SetOption( nAt )
      ::oSelex:Refresh()
   endif
   

RETURN nil

//---------------------------------------------------//

METHOD SetSize( nType, nWidth, nHeight ) CLASS SampleCalex
   
   if nWidth != nil
      ::oPanelExplorer:Move( , , , nHeight )
      ::oPanelCalex:Move( , , nWidth - ::oPanelExplorer:nRight, nHeight )
   endif
   
RETURN nil

//---------------------------------------------------//

METHOD BuildPop( nRow, nCol, oView, dDateFrom, dDateTo, nTimeFrom, nTimeTo ) CLASS SampleCalex

   local oMenu
   local oSelf := Self
   local lNew := oView:oCalex:oCalInfoSelected == NIL
   
   MENU oMenu POPUP
      MENUITEM If( lNew, "New appointment",;
                         "Modify appointment" ) ACTION oSelf:BuildDialog( oView, dDateFrom, dDateTo, nTimeFrom, nTimeTo )
      if ! lNew                        
         MENUITEM "Delete appointment"  ACTION If( MsgYesNo( "Are you sure?" ), oView:oCalex:DelCalInfo(), )
      endif
     
      MENUITEM "Today"           ACTION ( oView:SetDate( date() ), If( oView:IsKindOf( "TWEEKVIEW" ),;
                                                                       oView:oCalex:SetWeekView(),;
                                                                       oView:oCalex:SetDayView() ) )
   ENDMENU


   ACTIVATE POPUP oMenu OF oView:oCalex AT nRow, nCol

RETURN nil 

//---------------------------------------------------//

METHOD DeleteInfo( oView, nIdx ) CLASS SampleCalex

   local cLastOrd
   
   ::oServer:Execute( "DELETE FROM citas WHERE idx = " + ClipValue2Sql( nIdx ) )


RETURN NIL

//---------------------------------------------------//

METHOD ChangeDate( oDatePick ) CLASS SampleCalex

   ::oCalex:oView:SetDate( oDatePick:GetDate() )
   
   if ::oCalex:oView:IsKindOf( "TMONTHVIEW" )
      ::oCalex:SetMonthView()
   elseif ::oCalex:oView:IsKindOf( "TWEEKVIEW" )
      ::oCalex:SetWeekView()
   else
      ::oCalex:SetDayView()
   endif
   
RETURN NIL

//---------------------------------------------------//
 
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Outlook Calendar (prototype)

Postby Francisco Horta » Thu Sep 06, 2012 9:59 pm

Gracias Daniel,

efectivamente por ahi en loaddates() el ultimo parametro ahi cargo mi id que es mi no. de reservacion autoincremental en mi tabla y se almacena en la DATA nIdx del objeto CALINFO (entendido), tambien ya vi que es autoajustable las vistas en el mes,,, la version que descargue de las contrib creo tiene un bug porque cuando tenia mi tabla vacia y/o la dbf de tu ejemplo vacia y agregaba citas, al salir y volver a entrar tronaba el programa en el metodo builddates de la clase tcalex en esta linea:
hInfo = hb_HASH()
if oCalInfo:dStart >= ::dStart .and. oCalInfo:dStart <= ::dEnd <------ en esta linea fallaba

al verificar vi que ::dStart y ::dEnd no tenian valor, entonces hice esto:

hInfo = hb_HASH()
********* agregue para darle un valor
if ValType(::dStart) <> "D"
::dStart := oCalInfo:dStart
endif
if ValType(::dEnd) <> "D"
::dEnd := oCalInfo:dStart
endif
*********
if oCalInfo:dStart >= ::dStart .and. oCalInfo:dStart <= ::dEnd

y funcionó!! es mi corrección correcta?

Encontre otro punto que no supe como resolver al definir la clase y poner el FIRST_DATE 2 todo el calendario esta mal con las fechas no coinciden, el dia de hoy me lo muestra en sabado, esta todo alterado, pero le puse FIRST_DATE 1 y el calendario aparece correcto, pudieras verificar ??
DEFINE CALEX ::oCalex OF ::oPanelCalex;
FIRST_DATE 2 <----- crea mal el calendario
FIRST_DATE 1 <----- crea correcto el calendario

otra cosa, no he sabido como hacer 2 citas el mismo dia a la misma hora, por ejemplo a las 9am y que las 2 duren el mismo tiempo... :(

Mil gracias ahi la llevo ya, y espero no molestar tanto con tantas ideas,
una cosa que estaria fabuloso es poder seleccionar con el mouse una cita y poder moverla con el boton presionado de hora( en tdayview), de hora y dia( en tweekview)
Gracias
Saludos
Paco

p.d. si gustas las pequeñas modificaciones que le hice, fueron para poner el dia domingo en color rojo, complete el cuadro de encabezado en el mes, los colores de encabezado de mes, semana parametrizables en colores.
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: Outlook Calendar (prototype)

Postby Francisco Horta » Thu Sep 06, 2012 10:55 pm

Daniel, se me paso un detalle mas y no encuentro el fix, cuando defino

DEFINE DAY / WEEK VIEW ;
START HOUR 7 ;
END HOUR 22

la hora del calendario la muestra desde las 7am hasta las 9pm no hasta las 10pm, siempre le quita 1 hora ...
Gracias
paco
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: Outlook Calendar (prototype)

Postby AIDA » Tue Oct 30, 2012 4:30 am

Esta super que gran trabajo :D


Saluditos :wink:
Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
User avatar
AIDA
 
Posts: 879
Joined: Fri Jan 12, 2007 8:35 pm

Re: Outlook Calendar (prototype)

Postby Silvio.Falconi » Mon Nov 12, 2012 11:51 am

donde se puede descargar la última versión con los elementos de color?
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
Silvio.Falconi
 
Posts: 7052
Joined: Thu Oct 18, 2012 7:17 pm

Re: Outlook Calendar (prototype)

Postby Francisco Horta » Wed Nov 21, 2012 10:38 pm

Silvio,

La modificacion a colores la adpate a mis necesidades, ya le envie los fuentes a Daniel para que los revise y los publique para los que esten interesados.
Saludos
Paco
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: Outlook Calendar (prototype)

Postby joseluisysturiz » Wed Feb 06, 2013 6:12 am

Saludos, que ha pasado con esta clase, hicieron la publicacion de los cambios, necesito hacer un cronograma de llamadas telefonicas en fechas vencidas de forma automatica, segun cronograma de pagos de los clientes, asi que necesitare en una dia especifico, ver todos los clientes que se le vence el pago dicho dia, a la vez que su numero telefonico para crear un listado de cientes a llamar, este organizador sera mas visual para encargados de hacer las llamadas, que tendran clientes asignados, gracias, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Outlook Calendar (prototype)

Postby Uwe.Diemer » Wed Feb 06, 2013 8:43 am

Excuse me

Tell me if i am wrong is this the spanish or english Forum
User avatar
Uwe.Diemer
 
Posts: 98
Joined: Mon Aug 09, 2010 11:00 am

Re: Outlook Calendar (prototype)

Postby Otto » Wed Feb 06, 2013 9:47 am

This is a very professional and generous contribution of Daniel.
Thank you Daniel for sharing.
Best regards,
Otto
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6328
Joined: Fri Oct 07, 2005 7:07 pm

Re: Outlook Calendar (prototype)

Postby joseluisysturiz » Wed Feb 06, 2013 3:45 pm

Otto, como siempre, excelente trabajo el de Daniel, me gustaria saber de donde puedo descargarla, no la veo en las de distribucion, gracias, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Outlook Calendar para un SPA

Postby joseluisysturiz » Mon Feb 03, 2014 10:19 pm

Saludos, estoy diseñando un sistema de SPA, con reservas de citas, creo que esta clase de Daniel me ayudaria, pero nose donde esta la mas actualizada y si alguien podria colocar o enviar a mi correo un ejemplo de como usarla con TDolphin, no me da mucho esto de las clases, y los samples que veo, todos con con methodos y de verdad, creo a esa clase no entre, mucho agradeceria alguna ayuda, idea o sugerencia, desde ya, gracias y saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Previous

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 54 guests