Planning reservas hotel

Planning reservas hotel

Postby rolitocere » Mon Feb 25, 2013 10:31 pm

Buenas tardes,

Estoy empezando con la construcción de un planning de reservas para hotel.

Intento usar la clase Tgantt pero me parece que si uso la xBrowse (que conozco más), la cosa resultará mejor.

Por esto pido consejo a quien/es haya/n hecho algún planning de reservas.

Gracias.

Rolis
rolitocere
 
Posts: 41
Joined: Wed Sep 23, 2009 11:50 am

Re: Planning reservas hotel

Postby joseluisysturiz » Mon Feb 25, 2013 11:35 pm

Rolis, prueba con la TCalex de Daniel, es buena para eso, el colega Otto, creo tiene un sistema para HOTEL, muy completo y me parece verle visto algo como la TCalex en una de sus pantallas, 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: Planning reservas hotel

Postby Daniel Garcia-Gil » Tue Feb 26, 2013 1:30 am

Saludos

Mandame un email para enviarte una clase que te puede servir
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Planning reservas hotel

Postby sysctrl2 » Tue Feb 26, 2013 2:05 am

Daniel se puede? sysctrl@prodigy.net.mx ( sysctrl arroba prodigy.net.mx

saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 1032
Joined: Mon Feb 05, 2007 7:15 pm

Re: Planning reservas hotel

Postby ruben Dario » Tue Feb 26, 2013 2:10 am

Daniel tengo tambien hacer algo similar ,
Una planta de produccion necesito un planificardor para planear los pedidos algo parecido como al project de office o el Tgantt no conosco tu clase me gustaria ver si me sirve la que tienes.
De antemano gracias y saludos.
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
ruben Dario
 
Posts: 1070
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Planning reservas hotel

Postby Daniel Garcia-Gil » Tue Feb 26, 2013 2:39 am

Saludos

Ante la demanda la publicare un demo aqui
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Planning reservas hotel

Postby Daniel Garcia-Gil » Tue Feb 26, 2013 5:48 pm

Aqui les dejo un ejemplo de una clase para planning de reservas de hotel (fue a peticion de un usuario)

Maneja los estatus de habitaciones de forma personalizada junto con los colores de las mismas, es decir, cada quien decide que tipo de estatus manejara...

La clase se encarga del pintado, el manejo de los datos va por cuenta de los programadores, tiene la opcion de mover las reservas mas no de ampliar/reducir los dias

aqui dejo el prg ejemplo y la url de descarga del exe

http://sitasoft.net/fivewin/samples/plann.zip

Image

Code: Select all  Expand view  RUN

#include "fivewin.ch"
#include "ord.ch"
#include "planning.ch"
#include "dtpicker.ch"

REQUEST DBFCDX
REQUEST HB_Lang_ES
REQUEST HB_CODEPAGE_ESWIN

#define PLANNING_RESERVED   1
#define PLANNING_CONFIRMED  2
#define PLANNING_OCCUPIED   3
#define PLANNING_CANCELED   4
#define PLANNING_EMPTY      5

function Main()

   SET DATE FORMAT "MM/DD/YYYY"
   SET DELETE ON
     
   HB_LangSelect("ES")
   HB_CDPSELECT("ESWIN")

     
   SamplePlan():New()

return nil

// status 01 reserved
// status 02 confirmed
// status 03 occupied
// status 04 canceled

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

CLASS SamplePlan

   DATA oPlann
   DATA oWnd
   DATA aStatus
   DATA dStart, dEnd
   
   METHOD New()
   
   METHOD BuildDbf()
   METHOD BuildDialog()
   METHOD BuildPlanning()
   METHOD BuildPop()
   
   METHOD DeleteData( oPlan, dCheckIn )
   
   METHOD ColorData( oData )
   
   METHOD LoadData()
   METHOD LoadRooms()
   METHOD MoveReservation( nRow, nCol, nType )

   
ENDCLASS

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

METHOD New() CLASS SamplePlan
   
   local oMenu, oBrush
   local oSelf := Self
   
   ::aStatus = { "Reserved", "Confirmed", "Occupied", "Canceled", "Empty" }
   
   
   MENU oMenu
   ENDMENU
   
   DEFINE BRUSH oBrush COLOR CLR_WHITE
   
   ::BuildDbf()
   
   DEFINE WINDOW ::oWnd BRUSH obrush
   
   ::BuildPlanning()
   ::LoadRooms()
   ::LoadData()
   
   ::oWnd:oClient = ::oPlann
   
   ACTIVATE WINDOW ::oWnd
   
   oBrush:End()
 
   
RETURN Self

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


METHOD BuildDbf() CLASS SamplePlan

   local aStructure
   local i

   if ! File( "rooms.dbf" )
   
      aStructure = { { "id"   , "C",   4, 0 },;
                     { "name" , "C",  30, 0 },;
                     { "type" , "C",   2, 0 } }
                        
      DBCreate( "rooms", aStructure, "DBFCDX" )
     
   endif
   
   if ! File( "reserva.dbf" )
   
      aStructure = { { "date"     , "D",   8, 0 },;
                     { "rooms_id" , "C",   4, 0 },;
                     { "check_in" , "D",   8, 0 },;
                     { "check_out", "D",   8, 0 },;
                     { "status"   , "C",   2, 0 },;
                     { "guest"    , "C",  30, 0 } }
                        
      DBCreate( "reserva", aStructure, "DBFCDX" )      
     
   ENDIF                        

   USE ROOMS ALIAS ROOMS VIA "DBFCDX" NEW  
   INDEX ON ROOMS->ID TAG rooms_id TO rooms
   
   USE RESERVA ALIAS RESERVA VIA "DBFCDX" NEW
   INDEX ON RESERVA->ROOMS_ID + DToS( RESERVA->CHECK_IN ) TAG room_in TO reserva
   
   if ROOMS->( LastRec() ) == 0
      for i = 1 to 30
         ROOMS->( DbAppend() )
         ROOMS->ID   = StrZero( i, 2 )
         ROOMS->NAME = "Room " + StrZero( i, 2 )
         ROOMS->TYPE = StrZero( i % 5, 2 )
      next
   endif
   

RETURN nil

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

METHOD BuildDialog( oPlan, dCheckIn, dCheckOut ) CLASS SamplePlan

   local oDlg, oCbx
   local lSave := .F.
   local lNew := .T.
   local cVar, cName := Space( 30 )
   local nAt := 1
   
   if oPlan:oLastData != NIL
      lNew = ! oPlan:oLastData:lSelected
   endif  

   DEFINE DIALOG oDlg TITLE "Adding Data" SIZE 350, 370
   
   if ! lNew
      RESERVA->( DBSeek( oPlan:GetRowID() + DToS( dCheckIn ) ) )
      cName    := RESERVA->GUEST
      nAt      := Val( RESERVA->STATUS )
   endif

   
   //cCheckIn = oPlan:aSelected[ 1 ]
   
   @ 10, 10 SAY "Room: " + oPlan:GetRowText()  OF oDlg PIXEL
   @ 25, 10 SAY "Check In: " + DToC( dCheckIn ) OF oDlg PIXEL
   @ 40, 10 SAY "Check Out:" + DToC( dCheckOut ) OF oDlg PIXEL  
   @ 55, 10 SAY "Status:" OF oDlg PIXEL
   @ 55, 55 COMBOBOX oCbx VAR cVar;
             ITEMS ::aStatus;
             STYLE CBS_DROPDOWN PIXEL
   @ 70, 10 SAY "Guest Name:" OF oDlg PIXEL
   @ 70, 55 GET cName OF oDlg PIXEL

   @ 170, 10 BUTTON "OK" PIXEL ACTION ( lSave := .T., oDlg:End() )
   @ 170, 100 BUTTON "CANCEL" PIXEL ACTION ( oDlg:End() )

   ACTIVATE DIALOG oDlg CENTERED;
            ON INIT oCbx:Select( nAt )

   IF lSave
      if lNew        
         RESERVA->( DBAppend() )
      else
         RESERVA->( DBSeek( oPlan:GetRowID() + DToS( dCheckIn ) ) )
      endif
                     
      RESERVA->DATE      = Date()
      RESERVA->ROOMS_ID  = oPlan:GetRowID()
      RESERVA->CHECK_IN  = dCheckIn
      RESERVA->CHECK_OUT = dCheckOut
      RESERVA->STATUS    = StrZero( oCbx:nAt, 2 )
      RESERVA->GUEST     = cName
      RESERVA->( DbCommitAll() )
     
      ::LoadData()
      oPlan:Refresh()      
     
   ENDIF

RETURN nil

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

METHOD BuildPlanning() CLASS SamplePlan 

   LOCAL oSelf := Self

   DEFINE PLANNING ::oPlann OF ::oWnd;
          COLOR HEADER ( If( Dow( dDate ) == 1 .OR.  Dow( dDate ) == 7, CLR_WHITE, ::oPlann:nClrText )  );
          COLOR CELL ::ColorData( oData ) ;
          START DAY Date() - 5;
          END DAY Date() + 5;
          ON RIGHT SELECT oSelf:BuildPop( nRow, nCol, Self, dCheckIn, dCheckOut )
     
   ::oPlann:bOnCapture = { | nRow, nCol, pHitTest | If( pHitTest:nMoveType != 0, ::MoveReservation(nRow, nCol, pHitTest:nMoveType), ) }
   ::dStart = ::oPlann:dStart
   ::dEnd = ::oPlann:dEnd
   
   
   @ 10, 10 DTPICKER ::dStart OF ::oPlann pixel ;
            ON CHANGE ( if( oSelf:dStart != oSelf:oPlann:dStart, ( oSelf:oPlann:SetDates( oSelf:dStart ), oSelf:LoadData() ), ) )
           
   @ 10, 120 DTPICKER ::dEnd OF ::oPlann pixel;
            ON CHANGE ( if( oSelf:dEnd != oSelf:oPlann:dEnd, ( oSelf:oPlann:SetDates( , oSelf:dEnd ), oSelf:LoadData() ), ) )

RETURN nil


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

METHOD BuildPop( nRow, nCol, oPlan, dCheckIn, dCheckOut ) CLASS SamplePlan

   local oMenu
   local oSelf := Self
   local lNew := .T.
   
   if oPlan:oLastData != NIL
      lNew = ! oPlan:oLastData:lSelected
   endif
     
   MENU oMenu POPUP
      MENUITEM If( lNew, "New Reserve",;
                         "Modify Reserve" ) ACTION oSelf:BuildDialog( oPlan, dCheckIn, dCheckOut )
      if ! lNew                        
         MENUITEM "Delete Reserve"  ACTION If( MsgYesNo( "Are you sure?" ), oSelf:DeleteData( oPlan, dCheckIn ) , )
      endif

   ENDMENU


   ACTIVATE POPUP oMenu OF oPlan AT nRow, nCol

RETURN nil 

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

METHOD DeleteData( oPlan, dCheckIn ) CLASS SamplePlan

   if RESERVA->( DBSeek( oPlan:GetRowID() + DToS( dCheckIn ) ) )
       RESERVA->( DBDelete() )
       oPlan:DeleteData( oPlan:oLastData )
   endif
     
   
RETURN nil  


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

METHOD ColorData( oData ) CLASS SamplePlan
   local aGrad
   
   //"Reserved", "Confirmed", "Occupied", "Calceled", "Empty"
   switch oData:Cargo
      case PLANNING_RESERVED
         aGrad = { { 1, RGB(0x9a,0xcd,0x32), RGB(0x9a,0xcd,0x32) } }
         exit
      case PLANNING_CONFIRMED
         aGrad = { { 1, RGB(0x00,0x80,0xff) , RGB(0x00,0x80,0xff) } }
         exit
      case PLANNING_OCCUPIED
         aGrad = { { 1, RGB(0xff,0xff,0x80), RGB(0xff,0xff,0x80) } }
         exit
      case PLANNING_CANCELED
         aGrad = { { 1, RGB(0xff,0x00,0x00), RGB(0xff,0x00,0x00) } }
         exit
      case PLANNING_EMPTY
         aGrad = { { 1, RGB(0xc0,0xc0,0xc0), RGB(0xc0,0xc0,0xc0) } }
         
   endswitch

return aGrad
     
//---------------------------------------------------//      

METHOD LoadData() CLASS SamplePlan      

   local cDescribe
   local nStatus
   local cTooltip, oData

   //Clear scopes
   RESERVA->( OrdSetFocus( "room_in" ) )
   RESERVA->( OrdScope( TOPSCOPE, NIL ) )
   RESERVA->( OrdScope( BOTTOMSCOPE, NIL ) )
   RESERVA->(  DBGoTop() )
   RESERVA->( OrdScope( TOPSCOPE, Month( ::oPlann:dStart ) ) )
   RESERVA->( OrdScope( BOTTOMSCOPE, Month( ::oPlann:dEnd ) ) )
   RESERVA->(  DBGoTop() )
 
   DO WHILE ! RESERVA->( Eof() )
      if DToS( RESERVA->CHECK_OUT ) > DToS( ::oPlann:dStart ) .AND. DToS( RESERVA->CHECK_IN ) < DToS( ::oPlann:dEnd )

         cDescribe = "Empty..."
         nStatus = Val( RESERVA->STATUS )
         if nStatus > 0 .and. nStatus < 5
            cDescribe = ::aStatus[ nStatus ]
         endif
         
   
         ROOMS->( DbSeek( RESERVA->ROOMS_ID ) )
         
         cTooltip  = "Room     : " + ROOMS->NAME + CRLF
         cTooltip += "Guest    : " + RESERVA->GUEST + CRLF
         cTooltip += "Check In : " + DToC( RESERVA->CHECK_IN ) + CRLF
         cTooltip += "Check Out: " + DToC( RESERVA->CHECK_OUT )
         oData = ::oPlann:AddData( RESERVA->ROOMS_ID,;
                           RESERVA->CHECK_IN,;
                           RESERVA->CHECK_OUT,;
                           cDescribe, cToolTip )
         if oData != NIL                  
            oData:Cargo = nStatus
         endif
      endif
                       
      RESERVA->( DbSkip() )
     
   ENDDO

return NIL


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

METHOD LoadRooms() CLASS SamplePlan

   local n
   local cRowName, cRowText
   local oData
   
   ROOMS->( DbGoTop() )
   
   DO WHILE ! ROOMS->( Eof() )
      ::oPlann:AddRow( ROOMS->ID, ROOMS->NAME )
      ROOMS->( DbSkip() )
   ENDDO  

   
RETURN nil

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

METHOD MoveReservation( nRow, nCol, nType ) CLASS SamplePlan

   local oPlann := ::oPlann
   local oItem := oPlann:oLastData
   local cDescribe, cTooltip, oData, nStatus
     
   if nType > 0
      cDescribe = oItem:cDescribe
      nStatus = oItem:Cargo
      oPlann:DeleteData( oItem, .F. )
      RESERVA->( DBSeek( oPlann:GetRowID() + DToS( oItem:dStart ) ) )
   endif
     
   switch nType
      case PLANNING_MOVE_RIGTH
         RESERVA->CHECK_IN = RESERVA->CHECK_IN + 1
         RESERVA->CHECK_OUT = RESERVA->CHECK_OUT + 1
         RESERVA->( DbCommitAll() )
         exit
      case PLANNING_MOVE_LEFT
         RESERVA->CHECK_IN = RESERVA->CHECK_IN - 1
         RESERVA->CHECK_OUT = RESERVA->CHECK_OUT - 1
         RESERVA->( DbCommitAll() )
         exit
      case PLANNING_MOVE_UP
      case PLANNING_MOVE_DOWN
         RESERVA->ROOMS_ID = oPlann:GetRowID(oPlann:GetAtRow( nRow ))
         RESERVA->( DbCommitAll() )
         exit
   endswitch
   
   
   if nType > 0
      cTooltip  = "Room     : " + ROOMS->NAME + CRLF
      cTooltip += "Guest    : " + RESERVA->GUEST + CRLF
      cTooltip += "Check In : " + DToC( RESERVA->CHECK_IN ) + CRLF
      cTooltip += "Check Out: " + DToC( RESERVA->CHECK_OUT )
      oData = oPlann:AddData( RESERVA->ROOMS_ID,;
                       RESERVA->CHECK_IN,;
                       RESERVA->CHECK_OUT,;
                       cDescribe, cToolTip )
      oData:Cargo = nStatus
      oPlann:oLastData = NIL
      oPlann:SelectCell( nRow, nCol )
      oPlann:Refresh()
   endif

RETURN nil

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

function HB_COMPILEFROMBUF()
return nil

function curdrive()
return nil
 
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Planning reservas hotel

Postby rolitocere » Tue Feb 26, 2013 5:57 pm

Daniel,

Muchas gracias por tu atención. Parece ser lo que buscaba y más aún.

Ahora a probarlo.

De nuevo, gracias.

Rolis
rolitocere
 
Posts: 41
Joined: Wed Sep 23, 2009 11:50 am

Re: Planning reservas hotel

Postby rolitocere » Tue Feb 26, 2013 10:01 pm

Daniel,

No puedo compilar porque falta el planning.ch y no se si faltaría algo más, la clase parece muy sencilla (por todo lo que hace según el exe).

Espero tus comentarios. Gracias

Rolis
rolitocere
 
Posts: 41
Joined: Wed Sep 23, 2009 11:50 am

Re: Planning reservas hotel

Postby Daniel Garcia-Gil » Tue Feb 26, 2013 10:52 pm

Hola

no podras compilarlo, te mande el exe para que lo probases y el fuente del ejemplo para que vieras mas o menos como es el codigo... pero los fuentes de la clase y la cabecera no estan en el zip, si te interesa puedes enviarme un email
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Planning reservas hotel

Postby Francisco Horta » Tue Feb 26, 2013 11:25 pm

daniel, esta interesante y me interesa ya que yo lo hago con wbrowse y tarray, aqui una imagen, saludos

Image

tcalex enviada a tu gmail
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: Planning reservas hotel

Postby rolando » Tue Feb 26, 2013 11:49 pm

Daniel,

Muy bueno lo tuyo.

Francisco,

Se ve muy bien, yo estoy intentando el hacerlo con la xbrowse. Espero poder lograrlo.

Felicitaciones a ambos.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Planning reservas hotel

Postby Marcelo Roggeri » Wed Feb 27, 2013 2:13 am

Espectacular Daniel la clase, se me viene a la mente poder utilizarla en distintos proyectos.
Me anoto para que me envies la clase.
Saludos y gracias.
Marcelo
FWH - Harbour - BCC7 - PellesC
User avatar
Marcelo Roggeri
 
Posts: 342
Joined: Sat Jul 22, 2006 9:04 pm
Location: Venado Tuerto - Santa Fe -Argentina

Re: Planning reservas hotel

Postby AIDA » Wed Feb 27, 2013 5:07 am

Impresionante :shock:

yo quisiera tenerla :mrgreen:


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: Planning reservas hotel

Postby fgondi » Wed Feb 27, 2013 9:25 am

Muy, pero que muy bueno Daniel.
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 83 guests