#include "minigui.ch"
#include "winprint.ch"

procedure PedLis()
   TituloImp:="Listado de pedidos por fecha"

   DEFINE WINDOW W_Imp1 ;
      AT 10,10 ;
      WIDTH 400 HEIGHT 275 ;
      TITLE TituloImp ;
      MODAL      ;
      NOSIZE     ;
      ON RELEASE CloseTables()

      @ 15,10 LABEL L_Fec1 VALUE 'Desde la Fecha' AUTOSIZE TRANSPARENT
      @ 10,110 DATEPICKER D_Fec1 WIDTH 100 VALUE DMA1

      @ 45,10 LABEL L_Fec2 VALUE 'Hasta la Fecha' AUTOSIZE TRANSPARENT
      @ 40,110 DATEPICKER D_Fec2 WIDTH 100 VALUE DMA2



draw rectangle in window W_Imp1 at 110,010 to 112,390 fillcolor{255,0,0} //Rojo
      aIMP:=Impresoras()
      @125,10 LABEL L_Impresora ;
              VALUE 'Impresora' ;
              WIDTH 90 HEIGHT 25
      @120,100 COMBOBOX C_Impresora ;
            WIDTH 280 ;
            ITEMS aIMP[1] ;
            VALUE aIMP[3] ;
            TOOLTIP 'Impresora' NOTABSTOP

      @150, 10 CHECKBOX nImp CAPTION 'Seleccionar impresora' WIDTH 150 VALUE .F. ;
               ON CHANGE W_Imp1.C_Impresora.Enabled:=IF(W_Imp1.nImp.Value=.T.,.F.,.T.)

      @180, 10 CHECKBOX nVer CAPTION 'Previsualizar documento' WIDTH 150 VALUE .T.

      @210, 10 BUTTONEX B_Imp CAPTION 'Imprimir' ICON icobus('imprimir') WIDTH 90 HEIGHT 25 ;
               ACTION PedLisi()

      @210,110 BUTTONEX B_Can CAPTION 'Cancelar' ICON icobus('cancelar') WIDTH 90 HEIGHT 25 ;
               ACTION W_Imp1.release

      END WINDOW
      CENTER WINDOW W_Imp1
      ACTIVATE WINDOW W_Imp1

Return Nil

Function CloseTables()
   DBCOMMITALL()
   DBUNLOCKALL()
   CLOSE DATABASES
Return NIL


procedure PedLisi()
   IF FILE("FIN.DBF")
      IF SELEC("FIN")<>0
         FIN->( DBCLOSEAREA() )
      ENDIF
      ERASE FIN.DBF
      ERASE FIN.CDX
   ENDIF

   AbrirDBF("PEDIDOS")
   COPY TO FIN FOR FPED>=W_Imp1.D_Fec1.value .AND. FPED<=W_Imp1.D_Fec2.value
   AbrirDBF("FIN","SIN_INDICE")
   INDEX ON DTOS(FPED) TO FIN

   GO TOP
   IF LASTREC()=0
      MsgExclamation("No hay datos en las fechas introducidas","Informacion")
      FIN->( DBCLOSEAREA() )
      RETURN
   ENDIF

   PedLisiF()


procedure PedLisiF()
   dirimp:=GetCurrentFolder()
   INIT PRINTSYS
   SET UNITS MM

   IF W_Imp1.nImp.value=.t.
      IF W_Imp1.nVer.value=.t.
         SELECT BY DIALOG PREVIEW
      ELSE
         SELECT BY DIALOG
      ENDIF
   ELSE
      IF W_Imp1.C_Impresora.ItemCount=0 .OR. ;
         W_Imp1.C_Impresora.Value<=0 .OR. ;
         W_Imp1.C_Impresora.Value>W_Imp1.C_Impresora.ItemCount
         MSGSTOP("No hay impresoras instaladas","Error")
         release printsys
         SetCurrentFolder(dirimp)
         RETURN
      ENDIF
      IF W_Imp1.nVer.value=.t.
         SELECT PRINTER W_Imp1.C_Impresora.Item(W_Imp1.C_Impresora.Value) PREVIEW
      ELSE
         SELECT PRINTER W_Imp1.C_Impresora.Item(W_Imp1.C_Impresora.Value)
      ENDIF
   ENDIF

   IF HBPRNERROR>0
      release printsys
      SetCurrentFolder(dirimp)
      return nil
   ENDIF

  define font "ft10" name "times new roman" size 10
  define font "ft12" name "times new roman" size 12 //bold=negrita
  define font "ft14" name "times new roman" size 14
  define font "ft18" name "times new roman" size 18

  define pen "p0" style PS_SOLID width 1 color 0x000000
  define pen "p1" style PS_DOT width 1 color 0xFF0000
  define pen "p2" style PS_NULL

  select font "ft12"
  select pen "p0"

*  start doc
  hbprn:startdoc(TituloImp)
  set page orientation DMORIENT_LANDSCAPE papersize DMPAPER_A4 font "ft12"
  start page

SELEC FIN
GO TOP
PAG:=0
LIN:=0
TOT:=0
DO WHILE .NOT. EOF()
   IF LIN>=180 .OR. PAG=0
      IF PAG<>0
         @ LIN+5,210 SAY "Suma" ALIGN TA_RIGHT TO PRINT
         @ LIN+5,230 SAY TRANSFORM( TOT , "@E 9,999,999.99" ) ALIGN TA_RIGHT TO PRINT
         @ LIN+10,150 say "SIGUE EN LA HOJA: "+LTRIM(STR(PAG+1)) ALIGN TA_CENTER TO PRINT
         end page
         start page
      ENDIF
      PAG=PAG+1
      select font "ft12"

      @ 20,20 say "SUIZO Pedidos clientes" TO PRINT
      @ 20,270 say "Hoja: "+LTRIM(STR(PAG)) ALIGN TA_RIGHT TO PRINT
      @ 25,20 say DATE() TO PRINT

      @ 25,150 say "Nombre de la empresa" ALIGN TA_CENTER TO PRINT
      @ 35,150 say TituloImp FONT "ft18" ALIGN TA_CENTER TO PRINT

      @ 40,20 say 'desde: '+DIA(W_Imp1.D_Fec1.value,10) TO PRINT
      @ 45,20 say 'hasta: '+DIA(W_Imp1.D_Fec2.value,10) TO PRINT

      select font "ft10"

      LIN:=55
      @ LIN,30 SAY "Pedido" ALIGN TA_RIGHT TO PRINT
      @ LIN,40 SAY "Fecha" ALIGN TA_CENTER TO PRINT
      @ LIN,58 SAY "Codigo" ALIGN TA_RIGHT TO PRINT
      @ LIN,60 SAY "Cliente" ALIGN TA_LEFT TO PRINT
      @ LIN,110 SAY "Codigo" ALIGN TA_LEFT TO PRINT
      @ LIN,130 SAY "Articulo" ALIGN TA_LEFT TO PRINT
      @ LIN,190 SAY "Unidades" ALIGN TA_RIGHT TO PRINT
      @ LIN,210 SAY "Precio" ALIGN TA_RIGHT TO PRINT
      @ LIN,230 SAY "Total" ALIGN TA_RIGHT TO PRINT
      @ LIN+4,20 , LIN+4,230 LINE

      LIN:=LIN+5
   ENDIF


   @ LIN,30 SAY LTRIM(STR(NPED))+"-"+SERPED ALIGN TA_RIGHT TO PRINT
   @ LIN,40 SAY FPED ALIGN TA_CENTER TO PRINT
   @ LIN,58 SAY CODCLI ALIGN TA_RIGHT TO PRINT
   CODCLI2:=CODCLI
   AbrirDBF("CLIENTES",,,,,1)
   SEEK CODCLI2
   IF .NOT. EOF()
      @ LIN,60 SAY CLIENTE ALIGN TA_LEFT TO PRINT
   ENDIF
   SELEC FIN
   @ LIN,110 SAY CODART ALIGN TA_LEFT TO PRINT
   @ LIN,130 SAY NOMART ALIGN TA_LEFT TO PRINT
   @ LIN,190 SAY TRANSFORM( UNIDAD , "@E 9,999,999.99" ) ALIGN TA_RIGHT TO PRINT
   @ LIN,210 SAY TRANSFORM( PRECIO , "@E 9,999,999.99" ) ALIGN TA_RIGHT TO PRINT
   @ LIN,230 SAY TRANSFORM( UNIDAD*PRECIO , "@E 9,999,999.99" ) ALIGN TA_RIGHT TO PRINT

   TOT:=TOT+(UNIDAD*PRECIO)
   LIN:=LIN+5

   SKIP

ENDDO

   @ LIN,210 SAY "Total" ALIGN TA_RIGHT TO PRINT
   @ LIN,230 SAY TRANSFORM( TOT , "@E 9,999,999.99" ) ALIGN TA_RIGHT TO PRINT

   SELEC FIN
   FIN->( DBCLOSEAREA() )

   end page
   end doc
   release printsys
   SetCurrentFolder(dirimp)

   W_Imp1.release


Return Nil





procedure Impresoras()
   INIT PRINTSYS
   GET PRINTERS TO aIMP1
   ASORT(aIMP1,,, { |x, y| UPPER(x) < UPPER(y) })
   GET DEFAULT PRINTER TO aIMP2
   aIMP3:=ASCAN(aIMP1, {|aVal| aVal == aIMP2})
   RELEASE PRINTSYS
   aIMP:={aIMP1,aIMP2,aIMP3}
RETURN(aIMP)
