#include 'minigui.ch'


PROCEDURE TranEntry
   private lAddmode := .f., aExpid := {}, aExpnm := {}, aType := {}, ;
    	aPmtBy := {'CASH', 'UNPAID', 'CHEQUE', 'CARD', 'OTHERS'}, aWAExp := {}, aWATran := {}
   private  nExpid, cCAT	

   if isWindowDefined(frmTran)
      return nil
   endif
   
   netselect("Accounts")
   set order to tag Accounts
   set order to tag Aname 
   OrdSetFocus("Aname")
   goto top   
   
   netselect("Exp")
   set order to tag Expid
   set order to tag Expnm
   OrdSetFocus("Expnm")
   goto top
   
   netselect("HTran")
   set order to tag hTrantype
   set order to tag hTrandt
   set order to tag htranid
   OrdSetFocus("htranid")
   goto top
   
   netselect("Tran")
   set order to tag Trantype
   set order to tag tranid
   set order to tag pmtby
   set order to tag Trandt
   goto top
   
   set softseek on
   seek date()
   if eof()
   	go bottom
   endif
   set softseek off

   DEFINE WINDOW frmTran            ;
      AT 0,0               ;
      WIDTH 935            ;
      HEIGHT 560            ;
      TITLE 'Daily Transaction Entry Routine'   ;
      CHILD ;
      FONT 'ARIAL' SIZE 9         ;
      ON INIT   (DeactivateEdit(), RefreshData() ) ;
      ON RELEASE ( DbCloseAll() )  
      

      DEFINE TOOLBAR ToolBar_1 BUTTONSIZE 50,30 BOLD FLAT RIGHTTEXT BORDER

      BUTTON btnFirst       ;
         CAPTION '&Top' ;
         picture "FIRST" ;
         ACTION ( Tran->(dBGoTop()) , frmTran.Browse_1.Value := Tran->(RecNo()) )

      BUTTON btnPrev    ;
         CAPTION '&Prev'    ;
         PICTURE "PREV" ;
         ACTION ( Tran->(dBSkip ( -1 )) , frmTran.Browse_1.Value := Tran->(RecNo()) )

      BUTTON btnNext   ;
         CAPTION '&Next'    ;
         PICTURE "NEXT" ;
         ACTION ( Tran->(dBSkip (1)) , if ( Tran->(Eof()) , Tran->(DbGoBottom()) , Nil ) , ;
         frmTran.Browse_1.Value := Tran->(RecNo()) )

      BUTTON btnLast       ;
         CAPTION '&Last'    ;
         PICTURE "LAST" ;
         ACTION ( Tran->(dBGoBottom ()) , frmTran.Browse_1.Value := Tran->(RecNo()) )  SEPARATOR

      BUTTON btnAdd       ;
         CAPTION '&New'    ;
         PICTURE "NEW" ;
         ACTION (lAddMode := .T., AddRec())

      BUTTON btnModify       ;
         CAPTION '&Modify'    ;
         PICTURE "EDIT" ;
         ACTION If ( CheckRLock() , ActivateEdit() , Nil )

            
     BUTTON btnPrint    ;
         CAPTION '&Print'   ;
         PICTURE "PRINT" ;
         ACTION TranPrint()

         
      END TOOLBAR
      
      @ 56, 10 label lblSearch ;
      	value "Search:"

      @ 56, 60 DATEPICKER dpkSearch ;
         height 24 ;
         on change {|| Tran->(dbseek(this.value, .t.)), ;
         	frmTran.browse_1.value := Tran->(recno())}

      @ 86, 10 BROWSE Browse_1            ;
         WIDTH 495              ;
         HEIGHT 430             ;
         HEADERS { 'Date', 'Account', 'Amount', 'Customer'  }   ;
         WIDTHS { 70, 130, 90 , 180 }         ;
         WORKAREA Tran        ;
         FIELDS { 'Tran->Trandt', 'Tran->Expnm', 'Tran->Amt', 'Tran->name' } ;
         JUSTIFY {0, 0, 1, 0} ;
         ON CHANGE RefreshData() ;
         ON DBLCLICK (RefreshData(), ActivateEdit() , If ( ! CheckRLock() , DeactivateEdit() , Nil ) )

		 
		 
		 
      @ 56,510 FRAME FRAME_1 ;     
         WIDTH 400      ;
         HEIGHT 460
    
        

      @ 70 , 520 LABEL lblTrandt ;
         VALUE 'Date : ' ;
         WIDTH 80
      @ 66 , 590 DATEPICKER dpkTrandt
	  
	  @ 100, 520 LABEL lblCust ;
      	 VALUE "Customer : "
      	 width 80
      @	 96,  590 COMBOBOX cboCust ;
      	width 300 ;
      	ITEMSOURCE accounts->name	;
		VALUESOURCE accounts->name  ;
		ON CHANGE (RefreshCstData()) ;
      	VALUE 1 
	  
      
      @ 130, 520 LABEL lblExpnm ;
      	 VALUE "Account : "
      	 width 80
      @	126,  590 COMBOBOX cboExpnm ;
      	width 300 ;
      	ITEMSOURCE Exp->Expnm	;
      	VALUESOURCE Exp->Expnm  ;
      	ON CHANGE (RefreshExpData()) ;
      	VALUE 1  
      	              
      	
      @ 160, 520 LABEL lblAmt;
     	VALUE "Amount : "
      @ 156, 590 TEXTBOX txtTot ;
         NUMERIC INPUTMASK "999,999,999.99" 
          
	  @ 190, 520 label lblPmtby ;
	  	value "Pmt By : "
	  @ 186, 590 combobox cboPmtBy ;
	  	width 100 ;
	  	items aPmtBy
	  	
	  @ 220, 520 label lblChqno ;
	  	value "Reference : "
	  @ 216, 590 textbox txtChqno ;
	  	maxlength 10
	  	
	  @ 250, 520 label lblRem ;
	  	value "Remarks : "
	  @ 246, 590 text txtRem ;
	  	width 200 ;
	  	maxlength 30
      
 
     @ 430, 520 label lblMtd value "                   MonthAmt" width 300
      
     @ 450, 520 TEXTBOX txtMtd ;
          READONLY NUMERIC INPUTMASK "99,999,999.99"
          
     @ 430, 650 label lblYtd value "                     YearAmt" width 300    
            
     @ 450, 650 TEXTBOX txtYtd ;
          READONLY NUMERIC INPUTMASK "99,999,999.99"
          
     @ 430, 780 label lblLyr value "                  LastYrAmt" width 300    
           
     @ 450, 780 TEXTBOX txtLyr ;
          READONLY NUMERIC INPUTMASK "99,999,999.99" 
                    	

    @ 480,590 BUTTON cmdSave ;
         CAPTION '&Save' ;
         PICTURE "OK" LEFT ;
         ACTION SaveRec() ;
         BOLD 

    @ 480,710 BUTTON cmdCancel ;
         CAPTION '&Cancel' ;
         PICTURE "CANCEL"  LEFT ;
         ACTION CancelRec() ;
         BOLD  

  

   END WINDOW
   ON KEY F1 of frmTran ACTION HELP(5)
   
   frmTran.Browse_1.SetFocus
   CENTER WINDOW frmTran
   ACTIVATE WINDOW frmTran

   RETURN
	   

static PROCEDURE AddRec()

   frmTran.dpkTrandt.value := date()
   
   frmTran.txtTot.value    := 0.00
   frmTran.cboPmtby.value  := 1
   frmTran.txtChqno.value  := ""
   frmTran.txtRem.value    := ""

   ActivateEdit()
   
   frmTran.dpkTrandt.enabled := .t.
   frmTran.cboCust.enabled   := .t.
   frmTran.cboExpnm.enabled  := .t.
   frmTran.txtTot.enabled    := .t.
   frmTran.cboExpnm.value    := 1
   frmTran.dpkTrandt.SetFocus   
   
   RETURN


static PROCEDURE ActivateEdit

   frmTran.Browse_1.Enabled  := .f.
   frmTran.dpkSearch.Enabled := .f.
   
   frmTran.dpkTrandt.enabled := .f.
   frmTran.cboCust.enabled   := .f.
   frmTran.cboExpnm.enabled  := .f.
   frmTran.txtTot.enabled    := .f.
   
   frmTran.txtMtd.enabled    := .f.
   frmTran.txtYtd.enabled    := .f.
   frmTran.txtLyr.enabled    := .f.
   
   frmTran.cboPmtby.enabled  := .t.
   frmTran.txtChqno.enabled  := .t.
   frmTran.txtRem.enabled    := .t.

   frmTran.cmdSave.Enabled   := .t.
   frmTran.cmdCancel.Enabled := .t.
   frmTran.ToolBar_1.Enabled := .f.
    
   frmTran.cboPmtby.SetFocus
   
   RETURN

static PROCEDURE DeactivateEdit

   frmTran.Browse_1.Enabled  := .T.
   
   frmTran.dpkSearch.Enabled := .t.
   frmTran.dpkTrandt.enabled := .f.
   frmTran.cboCust.enabled   := .f.
   frmTran.cboExpnm.enabled  := .f.
   frmTran.txtTot.enabled    := .f.
   frmTran.cboPmtby.enabled  := .f.
   frmTran.txtChqno.enabled  := .f.
   frmTran.txtRem.enabled    := .f.
      
   frmTran.txtMtd.enabled    := .f.
   frmTran.txtYtd.enabled    := .f.
   frmTran.txtLyr.enabled    := .f.
   
   frmTran.cmdSave.Enabled   := .F.
   frmTran.cmdCancel.Enabled := .F.
   frmTran.ToolBar_1.Enabled := .T.
   frmTran.Browse_1.SetFocus
   RETURN

static Procedure RefreshCstData()

   local mOK

   select accounts
*   msgbox(frmTran.cboExpnm.value, thiswindow.title)
   seek frmTran.cboCust.value
   if found()
      mOK := .t.
	  
   endif   
   
   select tran

   RETURN


static Procedure RefreshExpData()

   select exp
*   msgbox(frmTran.cboExpnm.value, thiswindow.title)
   seek frmTran.cboExpnm.value
   if found()
      frmTran.txtMtd.value    := exp->mtdamt
      frmTran.txtYtd.value    := exp->ytdamt
      frmTran.txtLyr.value    := exp->lyramt
   endif   
   
   select tran

   RETURN


static PROCEDURE RefreshData()

   local nRecNo, nCstRec
    
   select accounts
   
   seek tran->name
   
   if found()
      nCstRec := RecNo()
   else
      nCstRec := 1 
   endif
    	
	
   select exp
   
   seek tran->expnm
   
   if found()
      nRecNo := RecNo()
      frmTran.txtMtd.value    := exp->mtdamt
      frmTran.txtYtd.value    := exp->ytdamt
      frmTran.txtLyr.value    := exp->lyramt
   else
      nRecNo := 0
      frmTran.txtMtd.value    := 0
      frmTran.txtYtd.value    := 0
      frmTran.txtLyr.value    := 0    
   endif
	
   select tran

    if tran->category = " "
      rlock()
	  tran->category := exp->category
	  unlock
	endif
	
   frmTran.dpkTrandt.value := Tran->Trandt
   frmTran.cboCust.value   := nCstRec  
   frmTran.cboExpnm.value  := nRecNo  
   frmTran.txtTot.value    := tran->tot
   frmTran.cboPmtby.value  := ascan(aPmtby, alltrim(tran->pmtby))
   frmTran.txtChqno.value  := tran->chqno
   frmTran.txtRem.value    := tran->rem
      
	Return

static PROCEDURE CancelRec()
   DeactivateEdit()
   RefreshData()
   UNLOCK
   lAddmode := .f.
   RETURN


static PROCEDURE SaveRec()

   local mOldrec, lUpdExp := .f. , nRecNo
   
   frmTran.capture()
   
   if empty(frmTran.dpkTrandt.value)
      msgbox("Date cannot be blank!", thiswindow.title); frmTran.dpkTrandt.setfocus(); return
   endif
   
   if empty(frmTran.cboExpnm.value)
      msgbox("Please specify Account", thiswindow.title); frmTran.cboExpnm.setfocus(); return
   endif
   
   if empty(frmTran.cboPmtby.value)
      msgbox("Please specify payment by", thiswindow.title); frmTran.cboPmtby.setfocus(); return
   endif
   
   select tran
  
   If lAddmode == .T.
      Tran->(DbAppend())
      Tran->Tranid := newid("TRAN")
      lAddmode := .F.
      lUpdExp  := .T.
      
      Tran->Expid     := exp->ExpId 
	  Tran->name      := accounts->name
      Tran->Expnm     := exp->Expnm 
	  Tran->Category  := exp->Category
      Tran->Type      := exp->type 
      Tran->vatcode   := exp->vatcode
      Tran->vatperc   := exp->vatperc
     
      select htran 
      Htran->(DbAppend())
      Htran->Tranid   := tran->tranid
	  Htran->name     := tran->name  
      Htran->Expid    := tran->ExpId 
      Htran->Expnm    := tran->Expnm
	  Htran->Category := exp->Category
      Htran->Type     := tran->type 
      Htran->vatcode  := tran->vatcode
      Htran->vatperc  := tran->vatperc
     
      select Tran 

   else
      rlock()
   EndIf
   
   select tran 
        
   Tran->Trandt := frmTran.dpkTrandt.value
   Tran->Pmtby  := aPmtby[frmTran.cboPmtby.value]
   Tran->Chqno  := frmTran.txtChqno.value
   Tran->Rem    := frmTran.txtRem.value
   
   if tran->vatperc = 0.00
      tran->vatamt  := 0.00
      Tran->Amt     := frmTran.txtTot.value
      Tran->tot     := frmTran.txtTot.value
   else
      tran->Amt     := (frmTran.txtTot.value * 100) / (tran->vatperc + 100)
      Tran->tot     := frmTran.txtTot.value
      Tran->vatamt  := Tran->tot - Tran->amt  
   endif
   
   select htran 
   seek tran->tranid
   if found()
      Rlock()
      htran->Trandt := tran->Trandt 
      htran->Pmtby  := tran->pmtby 
      htran->Chqno  := tran->Chqno 
      htran->Rem    := tran->Rem 
      htran->Amt    := tran->amt 
      htran->tot    := tran->tot 
      htran->vatamt := tran->vatamt
   endif   
     
   select tran 
   
 * ********************************************************************  
   select accounts
	  Rlock()
	  accounts->mtdtot := accounts->mtdtot + tran->amt
	  accounts->ytdtot := accounts->ytdtot + tran->amt
      accounts->totamt := accounts->totamt + tran->amt
	  do case 
	     case tran->category = 'ROTI'
		      accounts->mtdrot := accounts->mtdrot + tran->amt
			  accounts->ytdrot := accounts->ytdrot + tran->amt
			  accounts->totrot := accounts->totrot + tran->amt
		 case tran->category = 'SAVOURIES'
		      accounts->mtdsav := accounts->mtdsav + tran->amt
              accounts->ytdsav := accounts->ytdsav + tran->amt
              accounts->totsav := accounts->totsav + tran->amt			  
		 case tran->category = 'PAPAD'
		      accounts->mtdpap := accounts->mtdpap + tran->amt
			  accounts->ytdpap := accounts->ytdpap + tran->amt
              accounts->totpap := accounts->totpap + tran->amt
		 case tran->category = 'PICKLES'
		      accounts->mtdpic := accounts->mtdpic + tran->amt
			  accounts->ytdpic := accounts->ytdpic + tran->amt
              accounts->totpic := accounts->totpic + tran->amt
	  OTHERWISE
		 accounts->mtdoth := accounts->mtdoth + tran->amt 
		 accounts->ytdoth := accounts->ytdoth + tran->amt
         accounts->tototh := accounts->tototh + tran->amt
	  endcase 
      COMMIT
      UNLOCK
   select tran
   
*************************************************************************   

   If lUpdExp == .T.
   
      select accounts
	  Rlock()
	  accounts->mtdtot := accounts->mtdtot + tran->amt
	  accounts->ytdtot := accounts->ytdtot + tran->amt
      accounts->totamt := accounts->totamt + tran->amt
	  do case 
	     case tran->category = 'ROTI'
		      accounts->mtdrot := accounts->mtdrot + tran->amt
              accounts->ytdrot := accounts->ytdrot + tran->amt
			  accounts->totrot := accounts->totrot + tran->amt			  
		 case tran->category = 'SAVOURIES'
		      accounts->mtdsav := accounts->mtdtsav+ tran->amt 
			  accounts->ytdsav := accounts->ytdsav + tran->amt
              accounts->totsav := accounts->totsav + tran->amt	
		 case tran->category = 'PAPAD'
		      accounts->mtdpap := accounts->mtdpap + tran->amt
			  accounts->ytdpap := accounts->ytdpap + tran->amt
              accounts->totpap := accounts->totpap + tran->amt
		 case tran->category = 'PICKLES'
		      accounts->mtdpic := accounts->mtdpic + tran->amt  
			  accounts->ytdpic := accounts->ytdpic + tran->amt
              accounts->totpic := accounts->totpic + tran->amt
	  OTHERWISE
		 accounts->mtdoth := accounts->mtdoth + tran->amt  
		 accounts->ytdoth := accounts->ytdoth + tran->amt
         accounts->tototh := accounts->tototh + tran->amt
	  endcase 
      COMMIT
      UNLOCK
	 
	 
      select exp 
      Rlock()
      Exp->MtdAmt := Exp->MtdAmt + Tran->Amt
      Exp->YtdAmt := Exp->YtdAmt + Tran->Amt
      nMTH        := MONTH(Tran->TranDt)
   
      do case
         case nMTH = 1 
            Exp->January   := Exp->January   + Tran->amt
         case nMTH = 2 
            Exp->February  := Exp->February  + Tran->amt         
         case nMTH = 3 
            Exp->March     := Exp->March     + Tran->amt
         case nMTH = 4 
            Exp->April     := Exp->April     + Tran->amt            
         case nMTH = 5 
            Exp->May       := Exp->May       + Tran->amt
         case nMTH = 6 
            Exp->June      := Exp->June      + Tran->amt            
         case nMTH = 7 
            Exp->July      := Exp->July      + Tran->amt
         case nMTH = 8 
            Exp->August    := Exp->August    + Tran->amt        
         case nMTH = 9 
            Exp->September := Exp->September + Tran->amt
         case nMTH = 10
            Exp->October   := Exp->October   + Tran->amt        
         case nMTH = 11
            Exp->November  := Exp->November  + Tran->amt
         case nMTH = 12
            Exp->December  := Exp->December  + Tran->amt        
      endcase
   endif 
  
   select tran 
   
   
   frmTran.Browse_1.Refresh
   frmTran.Browse_1.Value := Tran->(RecNo())

   COMMIT
   UNLOCK
   DeactivateEdit()

   RETURN




   
   
