#include "fivewin.ch"
#include "tarray.ch"
#include "splitter.ch"
#include "xbrowse.ch"
#define HA_LEFT 0
#define HA_RIGHT 1
#define HA_CENTER 2
static aGet := array(14)
static oQfac
static oCta
static nsaldo := 0
static oDlg
static oQdetalle
function factura(oMysql, lnueva, lcliente)
local aItem := {"Contado","30 días","45 días","90 días","120 días"}
local aBut := array(3)
local oBrw
local oSpli
local cEva1 := {|| oBrw:setfocus() }
local nBut := array(3)
local cTitulo := iif(lcliente,"Factura Clientes","Factura proveedor")
LOCAL cQuery := "SELECT * FROM producto ORDER by codigo"
// Este no va, porque maeclien puede ser una tabla y aqui en
// SQL no se pone en uso cada tabla sino solo el contenedor (base de datos)
// oMysql:Selectdb("maeclie")
// Aqui te aplica una especie d ZAP a la tabla maeclien
// oMysql:execute( "TRUNCATE TABLE maeclie" )
oQdetalle := oMysql:Query( cQuery )
oQdetalle:gotop()
xbrNumFormat( "E", .T. )
oCta := oCtac()
aadd(oCta:adet,{ space(24),space(20),space(20),space(20),0,0,0,0,.t.})
DEFINE DIALOG oDlg resource "dia_factura"
oDlg:cCaption := "Factura clientes"
REDEFINE GET aGet[1] VAR oCta:ncli picture "99999" ID 101 UPDATE of odlg ;
VALID cargocli(oBrw,oMysql)
REDEFINE GET aGet[2] VAR oCta:nape ID 102 of odlg UPDATE
REDEFINE GET aGet[3] VAR oCta:domi ID 103 of odlg UPDATE
REDEFINE GET aGet[5] VAR oCta:cuit ID 104 of odlg UPDATE
REDEFINE GET aGet[4] VAR oCta:iva ID 105 of odlg UPDATE
REDEFINE COMBOBOX aGet[8] VAR oCta:condicion ITEMS aItem ID 113 of odlg UPDATE // VALID ( Eval( cEva1 ), .T. )
REDEFINE GET aGet[6] VAR oCta:fecha picture "@d" ID 106 of odlg UPDATE
REDEFINE GET aGet[14] VAR oCta:pventa picture "9999" ID 115 of odlg UPDATE valid( oCta:pventa:=RIGHT("0000"+AllTrim( oCta:pventa),4),aGet[14]:refresh(),.t.)
REDEFINE GET aGet[8] VAR oCta:factura ID 107 of odlg UPDATE valid ( oCta:factura:=RIGHT("0000"+AllTrim( oCta:factura),8),aGet[8]:refresh(),.t.)
REDEFINE GET aGet[9] VAR oCta:subtotal picture "@e 9,999,999.99" ID 109 of odlg UPDATE
REDEFINE GET aGet[10] VAR oCta:total picture "@e 9,999,999.99" ID 112 of odlg UPDATE
REDEFINE GET aGet[11] VAR oCta:niva picture "@e 999,999.99" ID 110 of odlg UPDATE
REDEFINE GET aGet[12] VAR oCta:ib picture "@e 999,999.99" ID 111 of odlg UPDATE
REDEFINE SPLITTER aGet[13] ID 116 COLOR rgb(234,234,234) ADJUST of odlg _3DLOOK
REDEFINE BUTTON nbut[ 1 ] id 200 of odlg;
ACTION ACEPTO(oMysql, lnueva, lcliente)
REDEFINE BUTTON nbut[ 2 ] id 201 of odlg;
ACTION nil
REDEFINE BUTTON nbut[ 3 ] id 202 of odlg;
ACTION nil
REDEFINE xbrowse oBrw id 108 of oDlg ARRAY oCta:adet;
headers "Código","Medida","Marca","Modelo","Cant","Precio","Total" ;
columns 1, 2, 3, 4, 5, 6, 7 ;
colsizes 100,95,95,90,70,80,80 ;
lines cell fastedit
oBrw:aArrayData := oCta:adet
WITH OBJECT oBrw:aCols[ 1 ]
:beditvalue := {|| oCta:adet[oBrw:nArrayAt, 1] }
:nFootStrAlign := AL_RIGHT
:nEditType := EDIT_GET
:bEditvalid := { | oGet, oCol | valido(oBrw,oBrw:nArrayAt,oMysql,oQdetalle),.t. }
:bOnPostEdit := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,(oCol:value := xVal,;
oBrw:SelectCol( 5 )), ) }
END WITH
WITH OBJECT oBrw:aCols[ 2 ]
:beditvalue := {|| oCta:adet[oBrw:nArrayAt, 2] }
:nFootStrAlign := AL_RIGHT
:nEditType := EDIT_GET
:bOnPostEdit := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,oCol:value := xVal, ) }
END WITH
WITH OBJECT oBrw:aCols[ 3 ]
:beditvalue := {|| oCta:adet[oBrw:nArrayAt, 3] }
:nFootStrAlign := AL_RIGHT
:nEditType := EDIT_GET
:bOnPostEdit := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,oCol:value := xVal, ) }
END WITH
WITH OBJECT oBrw:aCols[ 4 ]
:beditvalue := {|| oCta:adet[oBrw:nArrayAt, 4] }
:nFootStrAlign := AL_RIGHT
:nEditType := EDIT_GET
:bOnPostEdit := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,oCol:value := xVal, ) }
END WITH
WITH OBJECT oBrw:aCols[5 ]
:beditvalue := {|| oCta:aDet[ oBrw:nArrayAt, 5 ] }
:cEditPicture := "@e 99,999"
:nFootStrAlign := AL_LEFT
:nEditType := EDIT_GET
:bOnPostEdit := {| oCol, xVal, nKey | If( nKey <> VK_ESCAPE,oCol:value := xVal, ) }
END WITH
WITH OBJECT oBrw:aCols[6 ]
:beditvalue := {|| oCta:aDet[ oBrw:nArrayAt, 6 ] }
:cEditPicture := "@e 999,999.99"
:nFootStrAlign := AL_LEFT
:nEditType := EDIT_GET
:bOnPostEdit := {| oCol, xVal, nKey | If( nKey <> VK_ESCAPE,(oCol:value := xVal,totales(obrw)), ) }
END WITH
WITH OBJECT oBrw:aCols[ 7 ]
:beditvalue := {|| oCta:adet[oBrw:nArrayAt, 7] }
:cEditPicture := "@e 999,999.99"
:nFootStrAlign := AL_RIGHT
:nEditType := EDIT_GET
:bOnPostEdit := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,(oCol:value := xVal, AddRow( oBrw )), ) }
END WITH
WITH OBJECT oBrw
:nMarqueeStyle := MARQSTYLE_HIGHLCELL
:nColDividerStyle := LINESTYLE_BLACK
:nStretchCol := STRETCHCOL_LAST
:lColDividerComplete := .t.
:l2007 := .t.
:lRecordSelector := .f.
:lAllowColHiding := .f.
:lAllowColSwapping := .f.
END WITH
oBrw:bKeyDown := {| nKey | If( nKey == VK_DELETE, DelRow( oBrw ), ) }
ACTIVATE DIALOG oDlg
return nil
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static function cargocli(oBrw,oMysql)
local oQmae := oMysql:Query( "SELECT * FROM maeclie")
local oQry1
local z := 1
local lTipo := .f.
local nImporte
oQry1 :=busnap(,oQmae,oCta:ncli,oMysql)
if empty(oQry1 )
return .f.
endif
oCta:ncli := oQry1:ncli
oCta:nape := oQry1:nape
oCta:domi := alltrim(oQry1:domi) +" - " + oQry1:loca
oCta:cuit := oQry1:cuit
oCta:iva := oQry1:iva
oDlg:update()
oQmae:end()
return .t.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static function AddRow( oBrw )
aadd(oCta:adet,{ space(24),space(20),space(20),space(20),0,0,0,0,.t.})
oBrw:GoBottom()
oBrw:Refresh()
oBrw:SetFocus()
return nil
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static function DelRow( oBrw )
if oBrw:nLen > 0
ADel( oBrw:aArrayData, oBrw:nArrayAt )
ASize( oBrw:aArrayData, oBrw:nLen - 1 )
oBrw:Refresh()
endif
oBrw:SetFocus()
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
STATIC FUNCTION oCtac( )
local oCta
DEFINE STRUCT oCta
STRUCT FIELD "ncli" INIT 0
STRUCT FIELD "nape" INIT ""
STRUCT FIELD "domi" INIT ""
STRUCT FIELD "fecha" INIT date()
STRUCT FIELD "cuit" INIT ""
STRUCT FIELD "iva" INIT ""
STRUCT FIELD "condicion" INIT "Contado"
STRUCT FIELD "subtotal" INIT 0
STRUCT FIELD "total" INIT 0
STRUCT FIELD "niva" INIT 0
STRUCT FIELD "ib" INIT 0
STRUCT FIELD "pventa" INIT space(4)
STRUCT FIELD "factura" INIT space(8)
STRUCT FIELD "adet" INIT array(0)
END STRUCT
return oCta
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
STATIC FUNCTION valido(oBrw,nAt,oMysql,oQdetalle)
local oQry
// oQry2 := ocheque:seek("codigo =" + alltrim(str(adet[nAt,1])) ,, {"*"})
oQry := bprodu(,oQdetalle,oMysql)
if empty(oQry)
msgstop("No esta cargado ese producto","Aviso del sistema")
return nil
endif
oCta:adet[nAt, 1] := oQry:codigo
oCta:adet[nAt, 2] := oQry:producto
oCta:adet[nAt, 3] := oQry:marca
oCta:adet[nAt, 4] := oQry:modelo
oQry:end()
oBrw:refresh()
return .t.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
STATIC FUNCTION ACEPTO(oMysql, lnueva, lcliente)
LOCAL cQuery
LOCAL cQueryfac
LOCAL oQrycta
LOCAL oQryfac
LOCAL cQuerysto := "SELECT * FROM detapro"
LOCAL oQrysto := oMysql:Query(cQuerysto)
if empty(oCta:ntotal)
msgstop("No hay datos para grabar","Ingrese datos")
return nil
endif
if lcliente
cQuery:= "SELECT * FROM ctacte ORDER by ncli"
cQueryfac := "SELECT * FROM factura ORDER by nrofac"
else
cQuery:= "SELECT * FROM ctacp ORDER by ncli"
cQueryfac := "SELECT * FROM facpro ORDER by nrofac"
endif
oQrycta := oMysql:Query(cQuery)
oQrycta:blank()
oQrycta:ncli := oCta:ncli
oQrycta:comprobante := oCta:pventa + "-"+ oCta:factura
oQrycta:fecha := oCta:fecha
oQrycta:descripcion := oCta:tipocom
oQrycta:importe := oCta:ntotal
oQrycta:tipo := "1"
oQrycta:pventa := oCta:pventa
oQrycta:numero := oCta:factura
oQrycta:save()
oQrycta:end()
oQryfac := oMysql:Query(cQueryfac)
oQryfac:blank()
oQryfac:ncli := oCta:ncli
oQryfac:nrofac := oCta:pventa + "-"+ oCta:factura
oQryfac:fecha := oCta:fecha
oQryfac:importe := oCta:ntotal
oQryfac:plazo := oCta:condicion
oQryfac:baseimpo := oCta:subtotal
oQryfac:iva := oCta:niva
oQryfac:ingbruto := oCta:ib
oQryfac:tipo := oCta:tipocom
oQryfac:save()
oQryfac:end()
oQrysto := oMysql:Query(cQueryfac)
for z = 1 to len(oCta:adet)
oQrySto:blank()
iif(lcliente,oQrysto:ncli := oCta:ncli, oQrysto:npro := oCta:ncli)
oQrysto:codigo := oCta:adet[z,1]
oQrysto:comprobante := oCta:pventa + "-"+ oCta:factura
oQrysto:costo := oCta:adet[z,6]
oQrysto:fecha := oCta:fecha
oQrysto:cantidad := oCta:adet[z,5]
oQrysto:save()
next
oQrysto:end()
RETURN NIL
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static function totales(oBrw)
oCta:adet[oBrw:nArrayAt,7] := multi(oCta:aDet[ oBrw:nArrayAt, 5 ],oCta:aDet[ oBrw:nArrayAt, 6 ] )
obrw:refresh()
return .t.