Project

General

Profile

Bug #3806 ยป piramideMenu20100515.rbw

ceccobeppe (cecco beppe), 09/09/2010 06:03 AM

 
#!/usr/bin/env ruby

require 'rubygems'
require 'fox16'
require 'mysql'
include Fox

class Finestra0 < FXMainWindow
$var = []
def initialize(app)
# Initialize base class
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 600, :height => 400)
# Menubar
menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
# File menu
filemenu = FXMenuPane.new(self)
archivitabellemenu = FXMenuPane.new(self)

FXMenuCommand.new(filemenu, "Archivi e Tabelle").connect(SEL_COMMAND) {
finestra = Finestra1.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuCommand.new(filemenu, "Gestione degli Acquisti")
FXMenuCommand.new(filemenu, "Gestione del Magazzino")
FXMenuCommand.new(filemenu, "Gestione dei Cespiti Ammortizzabili")
FXMenuCommand.new(filemenu, "Gestione della Produzione")
FXMenuCommand.new(filemenu, "Gestione del Personale Dipendente e Collaboratori")
FXMenuCommand.new(filemenu, "Gestione delle Vendite")

FXMenuCommand.new(filemenu, "Gestione dell\'Amministrazione").connect(SEL_COMMAND) {
finestra = Finestra8.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuSeparator.new(filemenu)
FXMenuCommand.new(filemenu, "Configurazione ambiente operativo")
FXMenuCommand.new(filemenu, "Informazioni").connect(SEL_COMMAND) {
FXMessageBox.information(self, MBOX_OK,
"Programma PIRAMIDE",
"versione 2010.03.30
autore: Guerra Antonio
data: marzo 2010")
}
FXMenuSeparator.new(filemenu)
FXMenuCommand.new(filemenu, "Fine lavoro\tCtl-Z", nil, getApp(), FXApp::ID_QUIT)
FXMenuTitle.new(menubar, "Menu Principale", nil, :popupMenu => filemenu)
FXHorizontalSeparator.new(self, LAYOUT_SIDE_TOP|SEPARATOR_GROOVE|LAYOUT_FILL_X)
end
# Quit
def onCmdQuit(sender, sel, ptr)
getApp.exit(0)
end

# Start
def create
# Create window
super
# Show the main window
show(PLACEMENT_SCREEN)
end
end

class Finestra1 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 600, :height => 400)
# Menubar
menubar1 = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
# File menu
filemenu1 = FXMenuPane.new(self)
archivitabellemenu1 = FXMenuPane.new(self)
FXMenuCommand.new(archivitabellemenu1, "Archivi e Tabelle Comuni")
FXMenuCommand.new(archivitabellemenu1, "Archivi e Tabelle degli Acquisti")
FXMenuCommand.new(archivitabellemenu1, "Archivi e Tabelle del Magazzino")
FXMenuCommand.new(archivitabellemenu1, "Archivi e Tabelle dei Cespiti Ammortizzabili")
FXMenuCommand.new(archivitabellemenu1, "Archivi e Tabelle della Produzione")
FXMenuCommand.new(archivitabellemenu1, "Archivi e Tabelle di Dipenenti e Collaboratori")
FXMenuCommand.new(archivitabellemenu1, "Archivi e Tabelle delle Vendite")
FXMenuCommand.new(archivitabellemenu1, "Archivi e Tabelle dell\'Amministrazione").connect(SEL_COMMAND) {
finestra = Finestra108.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuTitle.new(menubar1, "Archivi e Tabelle", :popupMenu => archivitabellemenu1)
end
end

class Finestra108 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 600, :height => 400)
# Menubar
menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
# File menu
filemenu = FXMenuPane.new(self)
archivitabellemenu = FXMenuPane.new(self)
FXMenuCommand.new(archivitabellemenu, "Archivio del piano dei conti").connect(SEL_COMMAND) {
finestra = Finestra10801.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuCommand.new(archivitabellemenu, "Archivio dei clienti").connect(SEL_COMMAND) {
#finestra = Finestra10802.new(self)
finestra = Finestra00001.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuCommand.new(archivitabellemenu, "Archivio dei fornitori").connect(SEL_COMMAND) {
finestra = Finestra10803.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuSeparator.new(archivitabellemenu)
FXMenuCommand.new(archivitabellemenu, "Tabella delle condizioni di pagamento").connect(SEL_COMMAND) {
finestra = Finestra10804.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuCommand.new(archivitabellemenu, "Tabella delle causali di contabilita\' generale").connect(SEL_COMMAND) {
finestra = Finestra10805.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuCommand.new(archivitabellemenu, "Tabella delle causali iva").connect(SEL_COMMAND) {
finestra = Finestra10806.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuCommand.new(archivitabellemenu, "Tabella dei libri contabili").connect(SEL_COMMAND) {
finestra = Finestra10807.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuCommand.new(archivitabellemenu, "Tabella dei tipi di documenti iva").connect(SEL_COMMAND) {
finestra = Finestra10809.new(self)
finestra.execute(PLACEMENT_CURSOR)
}

FXMenuTitle.new(menubar, "Archivi e Tabelle dell\'Amministrazione", :popupMenu => archivitabellemenu)
end
end

class Finestra10801 < FXDialogBox #finestra per l'inserimento dei conti del piano dei conti
def initialize(app)
# Initialize base class
@contatore = 0
@riga = nil
#carica in memoria tutto il piano dei conti
carica_dati
#disegna la finestra
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 800, :height => 400)

area = FXPacker.new(self, :opts => LAYOUT_FILL, :vSpacing => 30, :hSpacing => 50)

gruppo1 = FXGroupBox.new(area, "", :vSpacing => 0)
vTesta0 = FXHorizontalFrame.new(gruppo1, :opts => LAYOUT_SIDE_TOP|PACK_UNIFORM_WIDTH, :padBottom => 10)
FXLabel.new(vTesta0, "GESTIONE DEL PIANO DEI CONTI", nil, JUSTIFY_CENTER_X|LAYOUT_FILL_ROW, :padRight => 128)

vTesta1 = FXHorizontalFrame.new(gruppo1, :opts => LAYOUT_SIDE_TOP|PACK_UNIFORM_WIDTH)
FXButton.new(vTesta1, 'Primo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {primo_record }
FXButton.new(vTesta1, 'Record precedente', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {precedente_record}
FXButton.new(vTesta1, 'Record successivo', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {successivo_record}
FXButton.new(vTesta1, 'Ultimo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {ultimo_record}
FXButton.new(vTesta1, 'Nuovo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {nuovo_record}

gruppo2 = FXGroupBox.new(area, "", :vSpacing => 0)
vLinea1 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceTipoConto = FXDataTarget.new(0)
FXButton.new(vLinea1, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90001.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codiceTipoConto.value = $var[0]
@descrizioneTipoConto.value = $var[1]
$var = []
}
FXLabel.new(vLinea1, "Codice tipo conto", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 128)
FXTextField.new(vLinea1, 1, :target => @codiceTipoConto, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER)
@descrizioneTipoConto = FXDataTarget.new("")
FXTextField.new(vLinea1, 30, :target => @descrizioneTipoConto, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE)

vLinea2 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceGruppo = FXDataTarget.new(0)
FXButton.new(vLinea2, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90003.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codiceGruppo.value = $var[0]
@descrizioneGruppo.value = $var[1]
$var = []
vai_a_record
}
FXLabel.new(vLinea2, "Codice gruppo", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 130)
gruppo = FXTextField.new(vLinea2, 3, :target => @codiceGruppo, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)
@descrizioneGruppo = FXDataTarget.new("")
FXTextField.new(vLinea2, 30, :target => @descrizioneGruppo, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE)

vLinea3 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceConto = FXDataTarget.new(0)
@descrizioneConto = FXDataTarget.new("")
FXButton.new(vLinea3, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
$var = @codiceGruppo
ricerca = Finestra90004.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codiceConto.value = $var[0]
@descrizioneConto.value = $var[1]
$var = []
vai_a_record
}
FXLabel.new(vLinea3, "Codice conto", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 138)
FXTextField.new(vLinea3, 3, :target => @codiceConto, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)
FXTextField.new(vLinea3, 30, :target => @descrizioneConto, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE)

vLinea4 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceSottoconto = FXDataTarget.new(0)
FXButton.new(vLinea4, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
$var[0] = @codiceGruppo
$var[1] = @codiceConto
ricerca = Finestra90005.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codiceSottoconto.value = $var[0]
@denominazioneConto.value = $var[1]
@codiceNaturaConto.value = $var[2]
@indice.value = $var[3]
$var = []
vai_a_record
}
FXLabel.new(vLinea4, "Codice sottoconto", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 95)
FXTextField.new(vLinea4, 6, :target => @codiceSottoconto, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)

vLinea5 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
FXButton.new(vLinea5, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
if $var[0] != nil
$var[0] = @denominazioneConto.value.gsub(/\W/, '').upcase
ricerca = Finestra90006.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@indice.value = $var[0]
$var = []
if @indice.value != nil
if @indice.value > "0"
@contatore = 0
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row

until @indice.value == @riga[7]
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row
@contatore = @contatore + 1
end
@contatore = @contatore - 1
assegna_variabili
end
end
end
}
FXLabel.new(vLinea5, "Denominazione conto", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 122)
@denominazioneConto = FXDataTarget.new("")
FXTextField.new(vLinea5, 30, :target => @denominazioneConto, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED)

vLinea6 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
FXLabel.new(vLinea6, "Costante del conto", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 120)
@costanteConto = FXDataTarget.new("A")
FXTextField.new(vLinea6, 1, :target => @costanteConto, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE)

vLinea7 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceNaturaConto = FXDataTarget.new(0)
@descrizioneNaturaConto = FXDataTarget.new("")
FXButton.new(vLinea7, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90002.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codiceNaturaConto.value = $var[0]
@descrizioneNaturaConto.value = $var[1]
$var = []
}
FXLabel.new(vLinea7, "Codice natura conto", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 115)
FXTextField.new(vLinea7, 1, :target => @codiceNaturaConto, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER)
FXTextField.new(vLinea7, 30, :target => @descrizioneNaturaConto, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE)

@indice = FXDataTarget.new("")

gruppo4 = FXGroupBox.new(area, "", :vSpacing => 0)
vFondo = FXHorizontalFrame.new(gruppo4, :opts => LAYOUT_SIDE_BOTTOM|PACK_UNIFORM_WIDTH)
FXButton.new(vFondo, 'Cancella', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {cancella_record}
FXButton.new(vFondo, 'Annulla', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {azzera_variabili}
FXButton.new(vFondo, 'Registra', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {registra}
FXButton.new(vFondo, 'Esci', :target => self, :selector => FXDialogBox::ID_CANCEL, :padLeft => 25, :padRight => 25)
azzera_variabili
end

def primo_record
@contatore = 0
@scelta.num_rows == 0 ? azzera_variabili : assegna_variabili
end

def precedente_record
if @scelta.num_rows == 0 then
@contatore = 0
azzera_variabili
else
@contatore - 1 <0 ? @contatore = 0 : @contatore = @contatore -1
assegna_variabili
end
end

def successivo_record
if @scelta.num_rows == 0 then
@contatore = 0
azzera_variabili
else
@contatore >= ("#{@scelta.num_rows}".to_i - 1) ? @contatore = ("#{@scelta.num_rows}".to_i - 1) : @contatore = @contatore + 1
assegna_variabili
end
end

def ultimo_record
if @scelta.num_rows == 0 then
@contatore = 0
azzera_variabili
else
@contatore = ("#{@scelta.num_rows}".to_i - 1)
assegna_variabili
end
end

def nuovo_record
azzera_variabili
@indice.value = 0
end

def vai_a_record
codiceGruppo = @codiceGruppo.value.to_i
codiceConto = @codiceConto.value.to_i
codiceSottoconto = @codiceSottoconto.value.to_i
@indice.value = (codiceGruppo * 1000000000 + codiceConto * 1000000 + codiceSottoconto).to_s

if @indice.value > "0"
@contatore = 0
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row

until @indice.value == @riga[7]
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row
@contatore = @contatore + 1
end
@contatore = @contatore - 1 if @contatore >0
assegna_variabili
end
end

def registra
registra = true

if @codiceTipoConto.value.to_i < 1 or @codiceTipoConto.value.to_i > 4
registra = false
FXMessageBox.warning(self, MBOX_OK, "Codice Tipo Conto", "valore '#{@codiceTipoConto.value}' non ammesso per questo campo")
end

if @codiceTipoConto.value.to_i == 1 and (@codiceGruppo.value.to_i == 0 or @codiceConto.value.to_i != 0 or @codiceSottoconto.value.to_i != 0)
registra = false
FXMessageBox.warning(self, MBOX_OK, "Codice Tipo Conto", "codici conto e sottoconto non corretti")
end

if @codiceTipoConto.value.to_i == 2 and (@codiceGruppo.value.to_i == 0 or @codiceConto.value.to_i == 0 or @codiceSottoconto.value.to_i != 0)
registra = false
FXMessageBox.warning(self, MBOX_OK, "Codice Tipo Conto", "codici conto e sottoconto non corretti")
end

if @codiceTipoConto.value.to_i == 3 and (@codiceGruppo.value.to_i == 0 or @codiceConto.value.to_i == 0 or @codiceSottoconto.value.to_i == 0)
registra = false
FXMessageBox.warning(self, MBOX_OK, "Codice Tipo Conto", "codici conto e sottoconto non corretti")
end

if @codiceNaturaConto.value.to_i < 1 or @codiceNaturaConto.value.to_i > 4
FXMessageBox.warning(self, MBOX_OK, "Codice Natura Conto", "valore '#{@codiceNaturaConto.value}' non corretto per questo campo")
registra = false
end

if registra == true
indice = (@codiceGruppo.value.to_i * 1000000000 + @codiceConto.value.to_i * 1000000 + @codiceSottoconto.value.to_i).to_s
@denominazioneConto.value = @conn.escape_string(@denominazioneConto.value).upcase
sigla = @denominazioneConto.value.gsub(/\W/, '').upcase
begin
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@conn.autocommit(0)
@conn.query("REPLACE piano_dei_conti VALUES ('#{@codiceTipoConto.value.to_s}','#{@codiceGruppo.value.to_s}','#{@codiceConto.value.to_s}','#{@codiceSottoconto.value.to_s}','#{@costanteConto.value}','#{@denominazioneConto.value}','#{@codiceNaturaConto.value.to_s}', '#{indice}', '#{sigla}')")
@conn.commit
@conn.close
rescue MysqlError => e
@conn.rollback
@conn.close
print "error code: ", e.errno, "\n"
print "error message: ", e.error, "\n"
end
carica_dati
azzera_variabili
end
end

def cancella_record
if (@contatore <= ("#{@scelta.num_rows}".to_i - 1)) then
messaggio = FXMessageBox.question(
self,
MBOX_YES_NO,
"Attenzione !!!",
"Si stanno cancellando dei dati: confermare l\'operazione ?")
if messaggio == MBOX_CLICKED_YES
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@conn.autocommit(0)
@conn.query("DELETE FROM piano_dei_conti WHERE indice = '#{@indice.value}'")
@conn.commit
@conn.close
carica_dati
azzera_variabili
end
end
end

def azzera_variabili
@contatore = 0
indice = 0
@codiceTipoConto.value = 0
@descrizioneTipoConto.value = ""
@codiceGruppo.value = 0
@descrizioneGruppo.value = ""
@codiceConto.value = 0
@descrizioneConto.value = ""
@codiceSottoconto.value = 0
@costanteConto.value = "A"
@denominazioneConto.value = ""
@codiceNaturaConto.value = 0
@descrizioneNaturaConto.value = ""
@indice = FXDataTarget.new("")
end

def assegna_variabili
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row
@codiceTipoConto.value = @riga[0].to_i
@codiceGruppo.value = @riga[1].to_i
@codiceConto.value = @riga[2].to_i
@codiceSottoconto.value = @riga[3].to_i
@costanteConto.value = @riga[4]
@denominazioneConto.value = @riga[5]
@codiceNaturaConto.value = @riga[6].to_i
@indice.value = @riga[7]

tipoConto = [0,"GRUPPO","CONTO","SOTTOCONTO"]
@descrizioneTipoConto.value = tipoConto[@codiceTipoConto.value.to_i]
naturaConto = [0,"CONTO DI REDDITO","CONTO PATRIMONIALE","CONTO D\'ORDINE","CONTO RIEPILOGATIVO"]
@descrizioneNaturaConto.value = naturaConto[@codiceNaturaConto.value.to_i]
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
scelta = @conn.query("SELECT * FROM piano_dei_conti WHERE indice = ('#{@codiceGruppo.value}'*1000000000)")
scelta1 = @conn.query("SELECT * FROM piano_dei_conti WHERE indice = ('#{@codiceGruppo.value}'*1000000000 + '#{@codiceConto.value}'*1000000)")
@conn.close

@descrizioneGruppo.value = ""
@descrizioneConto.value = ""
if "#{scelta.num_rows}".to_i > 0
riga = scelta.data_seek(0)
riga = scelta.fetch_row
@descrizioneGruppo.value = riga[5]
end

@descrizioneConto.value = ''
if @codiceConto.value != ""
riga = scelta1.data_seek(0)
riga = scelta1.fetch_row
@descrizioneConto.value = riga[5]
end
end
def carica_dati
begin
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM piano_dei_conti")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close
rescue
@conn.close
print "error code: ", e.errno, "/n"
print "Error message: ", e.error, "/n"
end
end
end

class Finestra10802 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 600, :height => 400)
end
end

class Finestra10803 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 600, :height => 400)
end
end

class Finestra10804 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 600, :height => 400)
end
end

class Finestra10805 < FXDialogBox #crea la finestra per gestire le causali di contabilita' generale
def initialize(app)
# Initialize base class
@contatore = 0
@riga = nil
#carica in memoria tutta la tabella delle causali di contabilita'
carica_dati
#disegna la finestra
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 800, :height => 460)

area = FXPacker.new(self, :opts => LAYOUT_FILL, :vSpacing => 30, :hSpacing => 50)

gruppo1 = FXGroupBox.new(area, "", :vSpacing => 0)
vTesta0 = FXHorizontalFrame.new(gruppo1, :opts => LAYOUT_SIDE_TOP|PACK_UNIFORM_WIDTH, :padBottom => 10)
FXLabel.new(vTesta0, "GESTIONE DELLE CAUSALI DI CONTABILITA\' GENERALE", nil, JUSTIFY_CENTER_X|LAYOUT_FILL_ROW, :padRight => 128)

vTesta1 = FXHorizontalFrame.new(gruppo1, :opts => LAYOUT_SIDE_TOP|PACK_UNIFORM_WIDTH)
FXButton.new(vTesta1, 'Primo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {primo_record }
FXButton.new(vTesta1, 'Record precedente', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {precedente_record}
FXButton.new(vTesta1, 'Record successivo', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {successivo_record}
FXButton.new(vTesta1, 'Ultimo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {ultimo_record}
FXButton.new(vTesta1, 'Vai al record...', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {vai_a_record}
FXButton.new(vTesta1, 'Nuovo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {nuovo_record}

gruppo2 = FXGroupBox.new(area, "", :vSpacing => 0)

vLinea1 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codice = FXDataTarget.new(0)
FXButton.new(vLinea1, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90011.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codice.value = $var[0]
vai_a_record
cerca_descrizioni
$var = []
}

FXLabel.new(vLinea1, "Codice causale", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 150)
FXTextField.new(vLinea1, 3, :target => @codice, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)

vLinea2 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@descrizioneCausale = FXDataTarget.new("")
FXButton.new(vLinea2, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
$var[0] = @descrizioneCausale.value.gsub(/\W/, '').upcase
ricerca = Finestra90012.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codice.value = $var[0]
vai_a_record
cerca_descrizioni
$var = []
}
FXLabel.new(vLinea2, "Descrizione della causale", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 103)
FXTextField.new(vLinea2, 25, :target => @descrizioneCausale, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|JUSTIFY_LEFT)

vLinea3 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@segno = FXDataTarget.new("")
FXLabel.new(vLinea3, "Segno del movimento (D, A, ' ')", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 24, :padRight => 73)
FXTextField.new(vLinea3, 1, :target => @segno, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|JUSTIFY_RIGHT)

vLinea4 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceLibro = FXDataTarget.new(0)
@descrizioneLibro = FXDataTarget.new("")
FXButton.new(vLinea4, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
$var[0] = @codiceLibro.value
ricerca = Finestra90013.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codiceLibro.value = $var[0]
@descrizioneLibro.value = $var[1]
$var = []
}
FXLabel.new(vLinea4, "Codice del libro giornale", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 107)
FXTextField.new(vLinea4, 3, :target => @codiceLibro, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)
FXTextField.new(vLinea4, 80, :target => @descrizioneLibro, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE)

vLinea7 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@partite = FXDataTarget.new("")
FXLabel.new(vLinea7, "Gestione delle partite (S/N)", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 24, :padRight => 89)
FXTextField.new(vLinea7, 1, :target => @partite, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|JUSTIFY_RIGHT)

vLinea8 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@fiscale = FXDataTarget.new("")
FXLabel.new(vLinea8, "Gestione delle ritenute fiscali (S/N)", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 24, :padRight => 54)
FXTextField.new(vLinea8, 1, :target => @fiscale, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|JUSTIFY_RIGHT)

vLinea9 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@sociale = FXDataTarget.new("")
FXLabel.new(vLinea9, "Gestione delle ritenute sociali (S/N)", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 24, :padRight => 52)
FXTextField.new(vLinea9, 1, :target => @sociale, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|JUSTIFY_RIGHT)

vLinea10 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@reverseCharge = FXDataTarget.new("")
FXLabel.new(vLinea10, "Registrazione reverse charge (S/N)", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 24, :padRight => 50)
FXTextField.new(vLinea10, 1, :target => @reverseCharge, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|JUSTIFY_RIGHT)

vLinea11 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@soloIva = FXDataTarget.new("")
FXLabel.new(vLinea11, "Registrazione solo su registro iva (S/N)", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 24, :padRight => 32)
FXTextField.new(vLinea11, 1, :target => @soloIva, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|JUSTIFY_RIGHT)

gruppo4 = FXGroupBox.new(area, "", :vSpacing => 0)
vFondo = FXHorizontalFrame.new(gruppo4, :opts => LAYOUT_SIDE_BOTTOM|PACK_UNIFORM_WIDTH)
FXButton.new(vFondo, 'Cancella', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {cancella_record}
FXButton.new(vFondo, 'Annulla', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {azzera_variabili}
FXButton.new(vFondo, 'Registra', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {registra}
FXButton.new(vFondo, 'Esci', :target => self, :selector => FXDialogBox::ID_CANCEL, :padLeft => 25, :padRight => 45)
azzera_variabili
end

def primo_record
@contatore = 0
@scelta.num_rows == 0 ? azzera_variabili : assegna_variabili
end

def precedente_record
if @scelta.num_rows == 0 then
@contatore = 0
azzera_variabili
else
@contatore - 1 <0 ? @contatore = 0 : @contatore = @contatore -1
assegna_variabili
end
end

def successivo_record
if @scelta.num_rows == 0 then
@contatore = 0
azzera_variabili
else
@contatore >= ("#{@scelta.num_rows}".to_i - 1) ? @contatore = ("#{@scelta.num_rows}".to_i - 1) : @contatore = @contatore + 1
assegna_variabili
end
end

def ultimo_record
if @scelta.num_rows == 0 then
@contatore = 0
azzera_variabili
else
@contatore = ("#{@scelta.num_rows}".to_i - 1)
assegna_variabili
end
end

def nuovo_record
azzera_variabili
@codice.value = 0
end

def vai_a_record
if @codice.value.to_i > 0
@contatore = 0
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row
until @codice.value == @riga[0]
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row
@contatore = @contatore + 1
end
@contatore = @contatore - 1 if @contatore >0
assegna_variabili
#end
end
end


def registra
#~ alla variabile registra si assegna il valore vero.
#~ Un risultato falso di un qualsiasi test ne cambiera' il valore in falso, impedendo la registrazione dei dati in memoria.
registra = true
@segno.value = @segno.value.upcase
@descrizioneCausale.value = @conn.escape_string(@descrizioneCausale.value).upcase
sigla = @descrizioneCausale.value.gsub(/\W/, '').upcase
@partite.value = @partite.value.to_s.upcase
@fiscale.value = @fiscale.value.to_s.upcase
@sociale.value = @sociale.value.to_s.upcase
@reverseCharge.value = @reverseCharge.value.to_s.upcase
@soloIva.value = @soloIva.value.to_s.upcase
@partite.value == 'S' ? @partite.value = 1 : @partite.value = 0
@fiscale.value == 'S' ? @fiscale.value = 1: @fiscale.value = 0
@sociale.value == 'S' ? @sociale.value = 1: @sociale.value = 0
@reverseCharge.value == 'S' ? @reverseCharge.value = 1: @reverseCharge.value = 0
@soloIva.value == 'S' ? @soloIva.value = 1: @soloIva.value = 0

if @codice.value.to_i == 0
registra = false
FXMessageBox.warning(self, MBOX_OK, "Codice causale", "valore '#{@codice.value}' non ammesso per questo campo")
end
if @descrizioneCausale.value == ""
registra = false
FXMessageBox.warning(self, MBOX_OK, "Descrizione causale", "Manca la descrizione della causale")
end

if (@segno.value != "D" and @segno.value != "A" and @segno.value != "")
registra = false
FXMessageBox.warning(self, MBOX_OK, "Segno del movimento", "Il valore '#{@segno.value}' non e' ammesso")
end

if registra == true
begin
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@conn.autocommit(0)
#~ @conn.query("REPLACE causali_coge VALUES ('#{@codice.value.to_s}','#{@descrizioneCausale.value}','#{@segno.value}','#{@codiceLibro.value.to_s}','#{@codiceLibroIva.value.to_s}','#{@codiceDocumento.value.to_s}', '#{@partite.value}', '#{@fiscale.value}', '#{@sociale.value}','#{@reverseCharge.value}','#{@soloIva.value}','#{sigla}')")
@conn.query("REPLACE causali_coge VALUES ('#{@codice.value.to_s}','#{@descrizioneCausale.value}','#{@segno.value}','#{@codiceLibro.value.to_s}', '#{@partite.value}', '#{@fiscale.value}', '#{@sociale.value}','#{@reverseCharge.value}','#{@soloIva.value}','#{sigla}')")
@conn.commit
@conn.close
rescue MysqlError => e
@conn.rollback
@conn.close
print "error code: ", e.errno, "\n"
print "error message: ", e.error, "\n"
end
carica_dati
azzera_variabili
end
end

def cancella_record
if (@contatore <= ("#{@scelta.num_rows}".to_i - 1))
messaggio = FXMessageBox.question(
self,
MBOX_YES_NO,
"Attenzione !!!",
"Si stanno cancellando dei dati: confermare l\'operazione ?")
if messaggio == MBOX_CLICKED_YES
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@conn.autocommit(0)
@conn.query("DELETE FROM causali_coge WHERE codice = '#{@codice.value}'")
@conn.commit
@conn.close
carica_dati
azzera_variabili
end
end
end

def azzera_variabili
@contatore = 0
@codice.value = 0
@descrizioneCausale.value = ""
@segno.value = ""
@codiceLibro.value = 0
@descrizioneLibro.value = ""
@partite.value = "N"
@fiscale.value = "N"
@sociale.value = "N"
@reverseCharge.value = "N"
@soloIva.value = "N"
end

def assegna_variabili
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row
@codice.value = @riga[0].to_i
@descrizioneCausale.value = @riga[1]
@segno.value = @riga[2]
@codiceLibro.value = @riga[3].to_i
@riga[4] == '0' ? @partite.value = 'N' : @partite.value = 'S'
@riga[5] == '0' ? @fiscale.value = 'N' : @fiscale.value = 'S'
@riga[6] ? @sociale.value = 'N' : @sociale.value = 'S'
@riga[7] ? @reverseCharge.value = 'N' : @reverseCharge.value = 'S'
@riga[8] ? @soloIva.value = 'N' : @soloIva.value = 'S'
cerca_descrizioni
end

def cerca_descrizioni
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
scelta = @conn.query("SELECT * FROM libro_contabile WHERE codice = '#{@codiceLibro.value}'")
@conn.close

if "#{scelta.num_rows}" > '0'
riga = scelta.data_seek(0)
riga = scelta.fetch_row
@descrizioneLibro.value = riga[1]
else
@descrizioneLibro.value = ""
end
end

def carica_dati
begin
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM causali_coge")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close
rescue MysqlError => e
@conn.close
print "error code: ", e.errno, "/n"
print "Error message: ", e.error, "/n"
end
end
end

class Finestra10806 < FXDialogBox #finestra per l'inserimento delle causali iva
def initialize(app)
# Initialize base class
@contatore = 0
@riga = nil
#~ #carica in memoria tutto il piano dei conti
carica_dati
#~ #disegna la finestra
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 800, :height => 450)

area = FXPacker.new(self, :opts => LAYOUT_FILL, :vSpacing => 30, :hSpacing => 50)

gruppo1 = FXGroupBox.new(area, "", :vSpacing => 0)
vTesta0 = FXHorizontalFrame.new(gruppo1, :opts => LAYOUT_SIDE_TOP|PACK_UNIFORM_WIDTH, :padBottom => 10)
FXLabel.new(vTesta0, "GESTIONE TABELLA DELLE CAUSALI IVA", nil, JUSTIFY_CENTER_X|LAYOUT_FILL_ROW, :padRight => 128)

vTesta1 = FXHorizontalFrame.new(gruppo1, :opts => LAYOUT_SIDE_TOP|PACK_UNIFORM_WIDTH)
FXButton.new(vTesta1, 'Primo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {primo_record }
FXButton.new(vTesta1, 'Record precedente', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {precedente_record}
FXButton.new(vTesta1, 'Record successivo', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {successivo_record}
FXButton.new(vTesta1, 'Ultimo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {ultimo_record}
FXButton.new(vTesta1, 'Nuovo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {nuovo_record}

gruppo2 = FXGroupBox.new(area, "", :vSpacing => 0)
vLinea1 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codice = FXDataTarget.new(0)
FXButton.new(vLinea1, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90019.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codice.value = $var[0]
@descrizione.value = $var[1]
$var = []
vai_a_record
}
FXLabel.new(vLinea1, "Codice causale", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 125)
FXTextField.new(vLinea1, 3, :target => @codice, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)

vLinea2 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@descrizione = FXDataTarget.new("")
FXButton.new(vLinea2, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90020.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codice.value = $var[0]
@descrizione.value = $var[1]
$var = []
vai_a_record
}
FXLabel.new(vLinea2, "Descrizione della causale iva", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 62)# :padLeft => 26, :padRight => 38)
FXTextField.new(vLinea2, 20, :target => @descrizione, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED)

vLinea3 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@libroIva = FXDataTarget.new(0)
FXButton.new(vLinea3, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90016.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@libroIva.value = $var[0]
$var = []
}
FXLabel.new(vLinea3, "Codice libro iva", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 124)
FXTextField.new(vLinea3, 3, :target => @libroIva, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)

vLinea4 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@documentoIva = FXDataTarget.new(0)
FXButton.new(vLinea4, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90017.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@documentoIva.value = $var[0]
$var = []
}
FXLabel.new(vLinea4, "Codice del documento iva", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 73)
FXTextField.new(vLinea4, 3, :target => @documentoIva, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)

vLinea5 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceOperazione = FXDataTarget.new(0)
FXButton.new(vLinea5, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90018.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codiceOperazione.value = $var[0]
$var = []
}
FXLabel.new(vLinea5, "Codice della operazione iva", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 65)
FXTextField.new(vLinea5, 3, :target => @codiceOperazione, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)

vLinea6 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@aliquotaIva = FXDataTarget.new(0.00)
FXLabel.new(vLinea6, "Aliquota iva", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 26, :padRight => 138)
FXTextField.new(vLinea6, 5, :target => @aliquotaIva, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_REAL|JUSTIFY_RIGHT)

vLinea7 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@ivaIndeducibile = FXDataTarget.new(0.00)
FXLabel.new(vLinea7, "Percentuale di iva non deducibile", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 26, :padRight => 37)
FXTextField.new(vLinea7, 5, :target => @ivaIndeducibile, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_REAL|JUSTIFY_RIGHT)

vLinea8 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@calcoloPlafond = FXDataTarget.new("")
FXLabel.new(vLinea8, "Calcolo plafond (S/N)", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 24, :padRight => 32)
FXTextField.new(vLinea8, 1, :target => @calcoloPlafond, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|JUSTIFY_RIGHT)


gruppo4 = FXGroupBox.new(area, "", :vSpacing => 0)
vFondo = FXHorizontalFrame.new(gruppo4, :opts => LAYOUT_SIDE_BOTTOM|PACK_UNIFORM_WIDTH)
FXButton.new(vFondo, 'Cancella', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {cancella_record}
FXButton.new(vFondo, 'Annulla', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {azzera_variabili}
FXButton.new(vFondo, 'Registra', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {registra}
FXButton.new(vFondo, 'Esci', :target => self, :selector => FXDialogBox::ID_CANCEL, :padLeft => 25, :padRight => 25)
azzera_variabili
end

def primo_record
@contatore = 0
@scelta.num_rows == 0 ? azzera_variabili : assegna_variabili
end

def precedente_record
if @scelta.num_rows == 0 then
@contatore = 0
azzera_variabili
else
@contatore - 1 <0 ? @contatore = 0 : @contatore = @contatore -1
assegna_variabili
end
end

def successivo_record
if @scelta.num_rows == 0 then
@contatore = 0
azzera_variabili
else
@contatore >= ("#{@scelta.num_rows}".to_i - 1) ? @contatore = ("#{@scelta.num_rows}".to_i - 1) : @contatore = @contatore + 1
assegna_variabili
end
end

def ultimo_record
if @scelta.num_rows == 0 then
@contatore = 0
azzera_variabili
else
@contatore = ("#{@scelta.num_rows}".to_i - 1)
assegna_variabili
end
end

def nuovo_record
azzera_variabili
end

def vai_a_record
if @codice.value.to_i != 0
@contatore = 0
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row

until @codice.value == @riga[0]
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row
@contatore = @contatore + 1
end
@contatore = @contatore - 1 if @contatore >0
assegna_variabili
end
end


def registra
#~ alla variabile registra si assegna il valore vero.
#~ Un risultato falso di un qualsiasi test ne cambiera' il valore in falso, impedendo la registrazione dei dati in memoria.
@descrizione.value = @descrizione.value.to_s.upcase
@calcoloPlafond.value = @calcoloPlafond.value.to_s.upcase
@calcoloPlafond.value == 'S' ? @calcoloPlafond.value = 1 : @calcoloPlafond.value = 0
registra = true
if @codice.value.to_i == 0
registra = false
FXMessageBox.warning(self, MBOX_OK, "Codice causale iva", "valore '#{@codice.value}' non ammesso per questo campo")
end

if registra == true
begin
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@conn.autocommit(0)
@conn.query("REPLACE causali_iva VALUES ('#{@codice.value.to_s}','#{@descrizione.value}','#{@libroIva.value.to_s}','#{@documentoIva.value.to_s}','#{@codiceOperazione.value.to_s}','#{@aliquotaIva.value}', '#{@ivaIndeducibile.value}', '#{@calcoloPlafond.value}')")
@conn.commit
@conn.close
rescue MysqlError => e
@conn.rollback
@conn.close
print "error code: ", e.errno, "\n"
print "error message: ", e.error, "\n"
end
carica_dati
azzera_variabili
end
end

def cancella_record
if (@contatore <= ("#{@scelta.num_rows}".to_i - 1))
messaggio = FXMessageBox.question(
self,
MBOX_YES_NO,
"Attenzione !!!",
"Si stanno cancellando dei dati: confermare l\'operazione ?")
if messaggio == MBOX_CLICKED_YES
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@conn.autocommit(0)
@conn.query("DELETE FROM libro_contabile WHERE codice = '#{@codice.value}'")
@conn.commit
@conn.close
carica_dati
azzera_variabili
end
end
end

def azzera_variabili
@contatore = 0
@codice.value = 0
@descrizione.value = ""
@libroIva.value = 0
@documentoIva.value = 0
@codiceOperazione.value = 0
@aliquotaIva.value = 0.00
@ivaIndeducibile.value = 0.00
@calcoloPlafond.value = "N"
end

def assegna_variabili
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row
@codice.value = @riga[0].to_i
@descrizione.value = @riga[1]
@libroIva.value = @riga[2].to_i
@documentoIva.value = @riga[3].to_i
@codiceOperazione.value = @riga[4].to_i
@aliquotaIva.value = @riga[5]
@ivaIndeducibile.value = @riga[6].to_i
@riga[7] == '0' ? @calcoloPlafond.value = 'N' : @calcoloPlafond.value = 'S'
end
def carica_dati
begin
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM causali_iva")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close
rescue
@conn.close
print "error code: ", e.errno, "/n"
print "Error message: ", e.error, "/n"
end
end
end

class Finestra10807 < FXDialogBox #finestra per l'inserimento dei tipi di libri contabili
def initialize(app)
# Initialize base class
@contatore = 0
@riga = nil
#carica in memoria tutto il piano dei conti
carica_dati
#disegna la finestra
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 800, :height => 450)

area = FXPacker.new(self, :opts => LAYOUT_FILL, :vSpacing => 30, :hSpacing => 50)

gruppo1 = FXGroupBox.new(area, "", :vSpacing => 0)
vTesta0 = FXHorizontalFrame.new(gruppo1, :opts => LAYOUT_SIDE_TOP|PACK_UNIFORM_WIDTH, :padBottom => 10)
FXLabel.new(vTesta0, "GESTIONE TABELLA DEI LIBRI CONTABILI", nil, JUSTIFY_CENTER_X|LAYOUT_FILL_ROW, :padRight => 128)

vTesta1 = FXHorizontalFrame.new(gruppo1, :opts => LAYOUT_SIDE_TOP|PACK_UNIFORM_WIDTH)
FXButton.new(vTesta1, 'Primo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {primo_record }
FXButton.new(vTesta1, 'Record precedente', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {precedente_record}
FXButton.new(vTesta1, 'Record successivo', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {successivo_record}
FXButton.new(vTesta1, 'Ultimo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {ultimo_record}
FXButton.new(vTesta1, 'Nuovo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {nuovo_record}

gruppo2 = FXGroupBox.new(area, "", :vSpacing => 0)
vLinea1 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codice = FXDataTarget.new(0)
FXButton.new(vLinea1, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90015.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codice.value = $var[0]
@descrizione.value = $var[1]
$var = []
vai_a_record
}
FXLabel.new(vLinea1, "Codice del libro contabile", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 128)
FXTextField.new(vLinea1, 3, :target => @codice, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)

vLinea2 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@descrizione = FXDataTarget.new("")
FXLabel.new(vLinea2, "Descrizione del libro contabile", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 26, :padRight => 104)
FXTextField.new(vLinea2, 80, :target => @descrizione, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED)

vLinea3 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@tipoLibro = FXDataTarget.new(0)
FXButton.new(vLinea3, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90014.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@tipoLibro.value = $var[0]
$var = []
}
FXLabel.new(vLinea3, "Codice tipo libro contabile", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 124)
FXTextField.new(vLinea3, 1, :target => @tipoLibro, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)

vLinea4 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@dataUltimaRegistrazione = FXDataTarget.new(0)
FXLabel.new(vLinea4, "Data ultima registrazione", nil, :opts => JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 128)
FXTextField.new(vLinea4, 10, :target => @dataUltimaRegistrazione, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE|JUSTIFY_RIGHT)

vLinea5 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@numeroUltimaRegistrazione = FXDataTarget.new(0)
FXLabel.new(vLinea5, "Numero ultima registrazione", nil, :opts => JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 114)
FXTextField.new(vLinea5, 10, :target => @numeroUltimaRegistrazione, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE|JUSTIFY_RIGHT)

vLinea6 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@dataUltimaStampa = FXDataTarget.new(0)
FXLabel.new(vLinea6, "Data ultima stampa", nil, :opts => JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 154)
FXTextField.new(vLinea6, 10, :target => @dataUltimaStampa, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE|JUSTIFY_RIGHT)

vLinea7 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@numeroUltimaStampa = FXDataTarget.new(0)
FXLabel.new(vLinea7, "Numero ultima stampa", nil, :opts => JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 141)
FXTextField.new(vLinea7, 10, :target => @numeroUltimaStampa, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE|JUSTIFY_RIGHT)

vLinea8 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@ultimoNumeroProgressivo = FXDataTarget.new(0)
FXLabel.new(vLinea8, "Ultimo numero progressivo", nil, :opts => JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 120)
FXTextField.new(vLinea8, 10, :target => @ultimoNumeroProgressivo, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE|JUSTIFY_RIGHT)

gruppo4 = FXGroupBox.new(area, "", :vSpacing => 0)
vFondo = FXHorizontalFrame.new(gruppo4, :opts => LAYOUT_SIDE_BOTTOM|PACK_UNIFORM_WIDTH)
FXButton.new(vFondo, 'Cancella', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {cancella_record}
FXButton.new(vFondo, 'Annulla', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {azzera_variabili}
FXButton.new(vFondo, 'Registra', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {registra}
FXButton.new(vFondo, 'Esci', :target => self, :selector => FXDialogBox::ID_CANCEL, :padLeft => 25, :padRight => 25)
azzera_variabili
end

def primo_record
@contatore = 0
@scelta.num_rows == 0 ? azzera_variabili : assegna_variabili
end

def precedente_record
if @scelta.num_rows == 0 then
@contatore = 0
azzera_variabili
else
@contatore - 1 <0 ? @contatore = 0 : @contatore = @contatore -1
assegna_variabili
end
end

def successivo_record
if @scelta.num_rows == 0 then
@contatore = 0
azzera_variabili
else
@contatore >= ("#{@scelta.num_rows}".to_i - 1) ? @contatore = ("#{@scelta.num_rows}".to_i - 1) : @contatore = @contatore + 1
assegna_variabili
end
end

def ultimo_record
if @scelta.num_rows == 0 then
@contatore = 0
azzera_variabili
else
@contatore = ("#{@scelta.num_rows}".to_i - 1)
assegna_variabili
end
end

def nuovo_record
azzera_variabili
end

def vai_a_record
if @codice.value.to_i != 0
@contatore = 0
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row

until @codice.value == @riga[0]
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row
@contatore = @contatore + 1
end
@contatore = @contatore - 1 if @contatore >0
assegna_variabili
end
end


def registra
#~ alla variabile registra si assegna il valore vero.
#~ Un risultato falso di un qualsiasi test ne cambiera' il valore in falso, impedendo la registrazione dei dati in memoria.
@dataUltimaRegistrazione.value = @dataUltimaRegistrazione.value.to_i == 0 ? 0 : @dataUltimaRegistrazione.value
@numeroUltimaRegistrazione.value = @numeroUltimaRegistrazione.value.to_s
@dataUltimaStampa.value = @dataUltimaStampa.value.to_i == 0 ? 0 : @dataUltimaStampa.value
@numeroUltimaStampa.value = @numeroUltimaStampa.value.to_s
@ultimoNumeroProgressivo.value = @ultimoNumeroProgressivo.to_s
@descrizione.value = @descrizione.value.to_s.upcase

registra = true
if @codice.value.to_i == 0
registra = false
FXMessageBox.warning(self, MBOX_OK, "Codice libro contabile", "valore '#{@codice.value}' non ammesso per questo campo")
end

if @tipoLibro.value.to_i == 0 or @tipoLibro.value.to_i > 3
registra = false
FXMessageBox.warning(self, MBOX_OK, "Codice tipo libro contabile", "valore '#{@tipoLibro.value}' non ammesso per questo campo")
end

if registra == true
begin
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@conn.autocommit(0)
@conn.query("REPLACE libro_contabile VALUES ('#{@codice.value.to_s}','#{@descrizione.value}','#{@tipoLibro.value.to_s}','#{@dataUltimaRegistrazione.value == 0 ? '0000-00-00' : @dataUltimaRegistrazione.value}','#{@numeroUltimaRegistrazione.value.to_s}','#{@dataUltimaStampa.value == 0 ? '0000-00-00' : @dataUltimaStampa.value}','#{@numeroUltimaStampa.value.to_s}','#{@ultimoNumeroProgressivo.value.to_s}')")
@conn.commit
@conn.close
rescue MysqlError => e
@conn.rollback
@conn.close
print "error code: ", e.errno, "\n"
print "error message: ", e.error, "\n"
end
carica_dati
azzera_variabili
end
end

def cancella_record
if (@contatore <= ("#{@scelta.num_rows}".to_i - 1))
messaggio = FXMessageBox.question(
self,
MBOX_YES_NO,
"Attenzione !!!",
"Si stanno cancellando dei dati: confermare l\'operazione ?")
if messaggio == MBOX_CLICKED_YES
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@conn.autocommit(0)
@conn.query("DELETE FROM libro_contabile WHERE codice = '#{@codice.value}'")
@conn.commit
@conn.close
carica_dati
azzera_variabili
end
end
end

def azzera_variabili
@contatore = 0
@codice.value = 0
@descrizione.value = ""
@tipoLibro.value = 0
@dataUltimaRegistrazione.value = 0
@numeroUltimaRegistrazione.value = 0
@dataUltimaStampa.value = 0
@numeroUltimaStampa.value = 0
@ultimoNumeroProgressivo.value = 0
end

def assegna_variabili
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row
@codice.value = @riga[0].to_i
@descrizione.value = @riga[1]
@tipoLibro.value = @riga[2].to_i
@dataUltimaRegistrazione.value = @riga[3]
@numeroUltimaRegistrazione.value = @riga[4].to_i
@dataUltimaStampa.value = @riga[5]
@numeroUltimaStampa.value = @riga[6].to_i
@ultimoNumeroProgressivo.value = @riga[7].to_i
end
def carica_dati
begin
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM libro_contabile")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close
rescue
@conn.close
print "error code: ", e.errno, "/n"
print "Error message: ", e.error, "/n"
end
end
end

class Finestra10809 < FXDialogBox #finestra per l'inserimento dei tipi di documenti iva
def initialize(app)
# Initialize base class
@contatore = 0
@riga = nil
#carica in memoria tutto il piano dei conti
carica_dati
#disegna la finestra
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 800, :height => 250)
area = FXPacker.new(self, :opts => LAYOUT_FILL, :vSpacing => 30, :hSpacing => 50)
gruppo1 = FXGroupBox.new(area, "", :vSpacing => 0)
vTesta0 = FXHorizontalFrame.new(gruppo1, :opts => LAYOUT_SIDE_TOP|PACK_UNIFORM_WIDTH, :padBottom => 10)
FXLabel.new(vTesta0, "GESTIONE TABELLA DELLE OPERAZIONI IVA", nil, JUSTIFY_CENTER_X|LAYOUT_FILL_ROW, :padRight => 128)

vTesta1 = FXHorizontalFrame.new(gruppo1, :opts => LAYOUT_SIDE_TOP|PACK_UNIFORM_WIDTH)
FXButton.new(vTesta1, 'Primo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {primo_record }
FXButton.new(vTesta1, 'Record precedente', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {precedente_record}
FXButton.new(vTesta1, 'Record successivo', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {successivo_record}
FXButton.new(vTesta1, 'Ultimo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {ultimo_record}
FXButton.new(vTesta1, 'Nuovo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) {nuovo_record}

gruppo2 = FXGroupBox.new(area, "", :vSpacing => 0)
vLinea1 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codice = FXDataTarget.new(0)
FXButton.new(vLinea1, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90018.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codice.value = $var[0]
@descrizione.value = $var[1]
$var = []
vai_a_record
}
FXLabel.new(vLinea1, "Codice del tipo di operazione iva", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 128)
FXTextField.new(vLinea1, 3, :target => @codice, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)

vLinea2 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@descrizione = FXDataTarget.new("")
FXLabel.new(vLinea2, "Descrizione del tipo di operazione iva", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 26, :padRight => 104)
FXTextField.new(vLinea2, 30, :target => @descrizione, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED)

gruppo4 = FXGroupBox.new(area, "", :vSpacing => 0)
vFondo = FXHorizontalFrame.new(gruppo4, :opts => LAYOUT_SIDE_BOTTOM|PACK_UNIFORM_WIDTH)
FXButton.new(vFondo, 'Cancella', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {cancella_record}
FXButton.new(vFondo, 'Annulla', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {azzera_variabili}
FXButton.new(vFondo, 'Registra', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) {registra}
FXButton.new(vFondo, 'Esci', :target => self, :selector => FXDialogBox::ID_CANCEL, :padLeft => 25, :padRight => 25)
azzera_variabili
end

def primo_record
@contatore = 0
@scelta.num_rows == 0 ? azzera_variabili : assegna_variabili
end

def precedente_record
if @scelta.num_rows == 0 then
@contatore = 0
azzera_variabili
else
@contatore - 1 <0 ? @contatore = 0 : @contatore = @contatore -1
assegna_variabili
end
end

def successivo_record
if @scelta.num_rows == 0
@contatore = 0
azzera_variabili
else
@contatore >= ("#{@scelta.num_rows}".to_i - 1) ? @contatore = ("#{@scelta.num_rows}".to_i - 1) : @contatore = @contatore + 1
assegna_variabili
end
end

def ultimo_record
if @scelta.num_rows == 0 then
@contatore = 0
azzera_variabili
else
@contatore = ("#{@scelta.num_rows}".to_i - 1)
assegna_variabili
end
end

def nuovo_record
azzera_variabili
end

def vai_a_record
if @codice.value.to_i != 0
@contatore = 0
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row

until @codice.value == @riga[0]
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row
@contatore = @contatore + 1
end
@contatore = @contatore - 1 if @contatore >0
assegna_variabili
end
end

def registra
#~ alla variabile registra si assegna il valore vero.
#~ Un risultato falso di un qualsiasi test ne cambiera' il valore in falso, impedendo la registrazione dei dati in memoria.
@descrizione.value = @descrizione.value.to_s.upcase

registra = true
if @codice.value.to_i == 0
registra = false
FXMessageBox.warning(self, MBOX_OK, "Codice operazione iva", "valore '#{@codice.value}' non ammesso per questo campo")
end

if registra == true
begin
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@conn.autocommit(0)
@conn.query("REPLACE operazione_iva VALUES ('#{@codice.value.to_s}','#{@descrizione.value}')")
@conn.commit
@conn.close
rescue MysqlError => e
@conn.rollback
@conn.close
print "error code: ", e.errno, "\n"
print "error message: ", e.error, "\n"
end
carica_dati
azzera_variabili
end
end

def cancella_record
if (@contatore <= ("#{@scelta.num_rows}".to_i - 1))
messaggio = FXMessageBox.question(
self,
MBOX_YES_NO,
"Attenzione !!!",
"Si stanno cancellando dei dati: confermare l\'operazione ?")
if messaggio == MBOX_CLICKED_YES
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@conn.autocommit(0)
@conn.query("DELETE FROM operazione_iva WHERE codice = '#{@codice.value}'")
@conn.commit
@conn.close
carica_dati
azzera_variabili
end
end
end

def azzera_variabili
@contatore = 0
@codice.value = 0
@descrizione.value = ""
end

def assegna_variabili
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row
@codice.value = @riga[0].to_i
@descrizione.value = @riga[1]
end
def carica_dati
begin
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM operazione_iva")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close
rescue
@conn.close
print "error code: ", e.errno, "/n"
print "Error message: ", e.error, "/n"
end
end
end

class Finestra8 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 600, :height => 400)
# Menubar
menubar1 = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
# File menu
filemenu1 = FXMenuPane.new(self)
archivitabellemenu1 = FXMenuPane.new(self)
FXMenuCommand.new(archivitabellemenu1, "Scritture di Prima Nota").connect(SEL_COMMAND) {
finestra = Finestra801.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuCommand.new(archivitabellemenu1, "Interrogazioni e Stampe").connect(SEL_COMMAND) {
finestra = Finestra802.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuCommand.new(archivitabellemenu1, "Bilanci di Esercizio").connect(SEL_COMMAND) {
finestra = Finestra803.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuCommand.new(archivitabellemenu1, "Servizi Finanziari ed Amministrativi").connect(SEL_COMMAND) {
finestra = Finestra804.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuCommand.new(archivitabellemenu1, "Chiusura/Apertura Esercizi").connect(SEL_COMMAND) {
finestra = Finestra805.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuTitle.new(menubar1, "Gestione dell\'Amministrazione", :popupMenu => archivitabellemenu1)
FXHorizontalSeparator.new(self, LAYOUT_SIDE_TOP|SEPARATOR_GROOVE|LAYOUT_FILL_X)
end
end

class Finestra801 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 600, :height => 400)
# Menubar
menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
# File menu
filemenu = FXMenuPane.new(self)
archivitabellemenu = FXMenuPane.new(self)
FXMenuCommand.new(archivitabellemenu, "Prima Nota di Contabilita\' Generale").connect(SEL_COMMAND) {
finestra = Finestra80101.new(self)
finestra.execute(PLACEMENT_CURSOR)
}
FXMenuSeparator.new(archivitabellemenu)
FXMenuCommand.new(archivitabellemenu, "Prima Nota Fornitori")
FXMenuCommand.new(archivitabellemenu, "Controllo Fatture / Documenti di Trasporto")
FXMenuCommand.new(archivitabellemenu, "Pagamenti a Fornitori")
FXMenuCommand.new(archivitabellemenu, "Avvisi di Pagamento da Fornitori")
FXMenuSeparator.new(archivitabellemenu)
FXMenuCommand.new(archivitabellemenu, "Prima Nota Clienti")
FXMenuCommand.new(archivitabellemenu, "Incassi da Clienti")
FXMenuCommand.new(archivitabellemenu, "Avvisi di Pagamento a Clienti")
FXMenuSeparator.new(archivitabellemenu)
FXMenuCommand.new(archivitabellemenu, "Prima Nota Finanziamento Crediti")
FXMenuCommand.new(archivitabellemenu, "Prima Nota Portafoglio Ri.Ba.")
FXMenuCommand.new(archivitabellemenu, "Prima Nota Fideiussioni")
FXMenuTitle.new(menubar, "Prime Note", :popupMenu => archivitabellemenu)
end
end

class Finestra80101 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 800, :height => 700)
area = FXPacker.new(self, :opts => LAYOUT_FILL, :vSpacing => 10, :hSpacing => 50)

gruppo1 = FXGroupBox.new(area, "", :vSpacing => 0)
vTesta = FXHorizontalFrame.new(gruppo1, :opts => LAYOUT_SIDE_TOP|PACK_UNIFORM_WIDTH)
FXButton.new(vTesta, 'Ricerca ...', :padLeft => 5, :padRight => 5)
FXButton.new(vTesta, 'Primo record', :padLeft => 5, :padRight => 5)
FXButton.new(vTesta, 'Record precedente', :padLeft => 5, :padRight => 5)
FXButton.new(vTesta, 'Record successivo', :padLeft => 5, :padRight => 5)
FXButton.new(vTesta, 'Ultimo record', :padLeft => 5, :padRight => 5)
FXButton.new(vTesta, 'Nuovo record', :padLeft => 5, :padRight => 5)

gruppo2 = FXGroupBox.new(area, "", :vSpacing => 0)
@dataRegistrazione = FXDataTarget.new("")
vLinea1 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
FXLabel.new(vLinea1, "Data di registrazione", nil, :opts => JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 100)
FXTextField.new(vLinea1, 10, :target => @dataRegistrazione, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED)

vLinea2 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceCausale, @descrizioneCausale = FXDataTarget.new("")
FXButton.new(vLinea2, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0)
FXLabel.new(vLinea2, "Codice causale", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 128)
FXTextField.new(vLinea2, 3, :target => @codiceCausale, :selector => FXDataTarget::ID_VALUE, :opts =>FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER)
FXTextField.new(vLinea2, 50, @descrizioneCausale, FXDataTarget::ID_VALUE, FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_READONLY)

vLinea3 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
FXLabel.new(vLinea3, "Estremi del documento:", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25)

vLinea4 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@numeroDocumento = FXDataTarget.new("")
FXLabel.new(vLinea4, "Numero", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 105, :padRight => 85)
FXTextField.new(vLinea4, 10, :target => @numeroDocumento, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)

vLinea5 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@dataDocumento = FXDataTarget.new("")
FXLabel.new(vLinea5, "Data", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 105, :padRight => 98)
FXTextField.new(vLinea5, 10, :target => @dataDocumento, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)

gruppo3 = FXGroupBox.new(area, "", :vSpacing => 0)
vLinea61 = FXHorizontalFrame.new(gruppo3, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceGruppo = FXDataTarget.new("")
FXButton.new(vLinea61, '?', :padLeft => 5, :padRight => 5)
FXLabel.new(vLinea61, "Codice gruppo", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 132)
FXTextField.new(vLinea61, 3, :target => @codiceGruppo, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)

vLinea62 = FXHorizontalFrame.new(gruppo3, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceConto = FXDataTarget.new("")
FXLabel.new(vLinea62, "Codice conto", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 138)
FXTextField.new(vLinea62, 3, :target => @codiceConto, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)

vLinea63 = FXHorizontalFrame.new(gruppo3, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceSottoconto = FXDataTarget.new("")
FXLabel.new(vLinea63, "Codice sottoconto", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 112)
FXTextField.new(vLinea63, 6, :target => @codiceSottoconto, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)
FXTextField.new(vLinea63, 60, :target => @denominazioneConto, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_READONLY)

vLinea7 = FXHorizontalFrame.new(gruppo3, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@siglaValuta, @valuta = FXDataTarget.new("")
FXButton.new(vLinea7, '?', :padLeft => 5, :padRight => 5)
FXLabel.new(vLinea7, "Sigla valuta", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 144)
FXTextField.new(vLinea7, 3, :target => @siglaValuta, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)
FXTextField.new(vLinea7, 50, :target => @valuta, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_READONLY)

vLinea8 = FXHorizontalFrame.new(gruppo3, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@cambioNazionale = FXDataTarget.new("")
FXLabel.new(vLinea8, "Cambio: valuta nazionale", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 80)
FXTextField.new(vLinea8, 10, :target => @cambioNazionale, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)

vLinea9 = FXHorizontalFrame.new(gruppo3, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@cambioEstero = FXDataTarget.new("")
FXLabel.new(vLinea9, "Cambio: valuta estera", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 94)
FXTextField.new(vLinea9, 10, :target => @cambioEstero, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)
vLinea10 = FXHorizontalFrame.new(gruppo3, :opts => LAYOUT_SIDE_TOP)
FXLabel.new(vLinea10, "Importo del movimento in valuta", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 35)

vLinea11 = FXHorizontalFrame.new(gruppo3, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@valutaDare = FXDataTarget.new("")
FXLabel.new(vLinea11, "DARE", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 125, :padRight => 76)
FXTextField.new(vLinea11, 15, :target => @valutaDare, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)

vLinea12 = FXHorizontalFrame.new(gruppo3, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@valutaAvere = FXDataTarget.new("")
FXLabel.new(vLinea12, "AVERE", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 125, :padRight => 70)
FXTextField.new(vLinea12, 15, :target => @valutaAvere, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)

vLinea13 = FXHorizontalFrame.new(gruppo3, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
FXLabel.new(vLinea13, "Importo del movimento in valuta nazionale", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 35)
vLinea13 = FXHorizontalFrame.new(area, :opts => LAYOUT_SIDE_TOP)
vLinea14 = FXHorizontalFrame.new(gruppo3, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@valoreDare = FXDataTarget.new("")
FXLabel.new(vLinea14, "DARE", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 53, :padLeft => 125, :padRight => 76)
FXTextField.new(vLinea14, 15, :target => @valoreDare, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)

vLinea15 = FXHorizontalFrame.new(gruppo3, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@valoreAvere = FXDataTarget.new("")
FXLabel.new(vLinea15, "AVERE", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 52, :padLeft => 125, :padRight => 70)
FXTextField.new(vLinea15, 15, :target => @valoreAvere, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)

vLinea16 = FXHorizontalFrame.new(gruppo3, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@descrzione = FXDataTarget.new("")
FXLabel.new(vLinea16, "Descrizione aggiuntiva", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 92)
FXTextField.new(vLinea16, 50, :target => @descrizione, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)

gruppo4 = FXGroupBox.new(area, "", :vSpacing => 0)
vFondo = FXHorizontalFrame.new(gruppo4, :opts => LAYOUT_SIDE_BOTTOM|PACK_UNIFORM_WIDTH)
FXButton.new(vFondo, 'Cancella', :padLeft => 25, :padRight => 25)
FXButton.new(vFondo, 'Annulla', :padLeft => 25, :padRight => 25)
FXButton.new(vFondo, 'Registra', :padLeft => 25, :padRight => 25)
FXButton.new(vFondo, 'Esci', :target => self, :selector => FXDialogBox::ID_CANCEL, :padLeft => 25, :padRight => 25)
end
end

class Finestra802 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 600, :height => 400)
# Menubar
menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
# File menu
filemenu = FXMenuPane.new(self)
archivitabellemenu = FXMenuPane.new(self)
FXMenuCommand.new(archivitabellemenu, "Interrogazione/Stampa Conto di Mastro")
FXMenuSeparator.new(archivitabellemenu)
FXMenuCommand.new(archivitabellemenu, "Interrogazione/Stampa Estratto Conto Clienti/Fornitori")
FXMenuCommand.new(archivitabellemenu, "Interrogazione/Stampa Scadenziario")
FXMenuSeparator.new(archivitabellemenu)
FXMenuCommand.new(archivitabellemenu, "Interrogazione/Stampa Prima Nota")
FXMenuCommand.new(archivitabellemenu, "Interrogazione/Stampa Libro Giornale")
FXMenuSeparator.new(archivitabellemenu)
FXMenuCommand.new(archivitabellemenu, "Interrogazione/Stampa Libri Iva")
FXMenuCommand.new(archivitabellemenu, "Interrogazione/Stampa Progressivi Iva")
FXMenuTitle.new(menubar, "Interrogazioni e Stampe", :popupMenu => archivitabellemenu)
FXHorizontalSeparator.new(self, LAYOUT_SIDE_TOP|SEPARATOR_GROOVE|LAYOUT_FILL_X)
end
end

class Finestra803 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 600, :height => 400)
# Menubar
menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
# File menu
filemenu = FXMenuPane.new(self)
archivitabellemenu = FXMenuPane.new(self)
FXMenuCommand.new(archivitabellemenu, "Interrogazione/Stampa Bilancio di Verifica")
FXMenuCommand.new(archivitabellemenu, "Interrogazione/Stampa Bilancio di Esercizio")
FXMenuSeparator.new(archivitabellemenu)
FXMenuCommand.new(archivitabellemenu, "Interrogazione/Stampa Bilancio di Verifica del Controllo di Gestione")
FXMenuCommand.new(archivitabellemenu, "Interrogazione/Stampa Bilancio di Esercizio del controllo di Gestione")
FXMenuTitle.new(menubar, "Bilanci di Esercizio", :popupMenu => archivitabellemenu)
FXHorizontalSeparator.new(self, LAYOUT_SIDE_TOP|SEPARATOR_GROOVE|LAYOUT_FILL_X)
end
end

class Finestra804 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 600, :height => 400)
# Menubar
menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
# File menu
filemenu = FXMenuPane.new(self)
archivitabellemenu = FXMenuPane.new(self)
FXMenuCommand.new(archivitabellemenu, "Gestione del Portafoglio Effetti")
FXMenuCommand.new(archivitabellemenu, "Gestione dei Finanziamenti")
FXMenuCommand.new(archivitabellemenu, "Gestione delle Fideiussioni")
FXMenuSeparator.new(archivitabellemenu)
FXMenuCommand.new(archivitabellemenu, "Gestione Comunicazioni Instrastat")
FXMenuCommand.new(archivitabellemenu, "Gestione Ritenute Fiscali")
FXMenuCommand.new(archivitabellemenu, "Gestione Ratei e Risconti")
FXMenuTitle.new(menubar, "Servizi Finanziari ed Amministrativi", :popupMenu => archivitabellemenu)
FXHorizontalSeparator.new(self, LAYOUT_SIDE_TOP|SEPARATOR_GROOVE|LAYOUT_FILL_X)
end
end

class Finestra805 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 600, :height => 400)
# Menubar
menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
# File menu
filemenu = FXMenuPane.new(self)
archivitabellemenu = FXMenuPane.new(self)
FXMenuCommand.new(archivitabellemenu, "Inserimento Manuale dei Movimenti di Apertura/Chiusura")
FXMenuCommand.new(archivitabellemenu, "Scritture di Rettifica")
FXMenuCommand.new(archivitabellemenu, "Generazione Automatica della Chiusura/Apertura di Esercizio")
FXMenuCommand.new(archivitabellemenu, "Cancellazione Movimenti Esercizi Precedenti")
FXMenuTitle.new(menubar, "Operazioni di Chiusura/Apertura degli Esercizi", :popupMenu => archivitabellemenu)
FXHorizontalSeparator.new(self, LAYOUT_SIDE_TOP|SEPARATOR_GROOVE|LAYOUT_FILL_X)
end
end

class Finestra00001 < FXDialogBox
#finestra prototipo per l'acquisizione dei dati
def initialize(app)
# Initialize base class
@contatore = 0
@riga = nil
#carica in memoria tutto il piano dei conti
#carica_dati
#disegna la finestra
super(app, "PROGRAMMA PIRAMIDE", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 800, :height => 400)

#self.backColor = "FF.FF.FF"
area = FXPacker.new(self, :opts => LAYOUT_FILL, :vSpacing => 30, :hSpacing => 50)

gruppo1 = FXGroupBox.new(area, "", :vSpacing => 0)
vTesta0 = FXHorizontalFrame.new(gruppo1, :opts => LAYOUT_SIDE_TOP|PACK_UNIFORM_WIDTH, :padBottom => 10)
FXLabel.new(vTesta0, "FINESTRA PROTOTIPO", nil, JUSTIFY_CENTER_X|LAYOUT_FILL_ROW, :padRight => 128)

vTesta1 = FXHorizontalFrame.new(gruppo1, :opts => LAYOUT_SIDE_TOP|PACK_UNIFORM_WIDTH)
FXButton.new(vTesta1, 'Primo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) #{primo_record }
FXButton.new(vTesta1, 'Record precedente', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) #{precedente_record}
FXButton.new(vTesta1, 'Record successivo', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) #{successivo_record}
FXButton.new(vTesta1, 'Ultimo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) #{ultimo_record}
FXButton.new(vTesta1, 'Nuovo record', :padLeft => 5, :padRight => 5).connect(SEL_COMMAND) #{nuovo_record}
=begin
gruppo2 = FXGroupBox.new(area, "", :vSpacing => 0)
vLinea1 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceTipoConto = FXDataTarget.new(0)
FXButton.new(vLinea1, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90001.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codiceTipoConto.value = $var[0]
@descrizioneTipoConto.value = $var[1]
$var = []
}
FXLabel.new(vLinea1, "Codice tipo conto", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 128)
FXTextField.new(vLinea1, 1, :target => @codiceTipoConto, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER)
@descrizioneTipoConto = FXDataTarget.new("")
FXTextField.new(vLinea1, 30, :target => @descrizioneTipoConto, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE)

vLinea2 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceGruppo = FXDataTarget.new(0)
FXButton.new(vLinea2, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90003.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codiceGruppo.value = $var[0]
@descrizioneGruppo.value = $var[1]
$var = []
vai_a_record
}
FXLabel.new(vLinea2, "Codice gruppo", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 130)
gruppo = FXTextField.new(vLinea2, 3, :target => @codiceGruppo, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)
@descrizioneGruppo = FXDataTarget.new("")
FXTextField.new(vLinea2, 30, :target => @descrizioneGruppo, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE)

vLinea3 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceConto = FXDataTarget.new(0)
@descrizioneConto = FXDataTarget.new("")
FXButton.new(vLinea3, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
$var = @codiceGruppo
ricerca = Finestra90004.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codiceConto.value = $var[0]
@descrizioneConto.value = $var[1]
$var = []
vai_a_record
}
FXLabel.new(vLinea3, "Codice conto", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 138)
FXTextField.new(vLinea3, 3, :target => @codiceConto, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)
FXTextField.new(vLinea3, 30, :target => @descrizioneConto, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE)

vLinea4 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceSottoconto = FXDataTarget.new(0)
FXButton.new(vLinea4, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
$var[0] = @codiceGruppo
$var[1] = @codiceConto
ricerca = Finestra90005.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codiceSottoconto.value = $var[0]
@denominazioneConto.value = $var[1]
@codiceNaturaConto.value = $var[2]
@indice.value = $var[3]
$var = []
vai_a_record
}
FXLabel.new(vLinea4, "Codice sottoconto", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 95)
FXTextField.new(vLinea4, 6, :target => @codiceSottoconto, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER|JUSTIFY_RIGHT)

vLinea5 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
FXButton.new(vLinea5, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
if $var[0] != nil
$var[0] = @denominazioneConto.value.gsub(/\W/, '').upcase
ricerca = Finestra90006.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@indice.value = $var[0]
$var = []
if @indice.value != nil
if @indice.value > "0"
@contatore = 0
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row

until @indice.value == @riga[7]
@riga = @scelta.data_seek(@contatore)
@riga = @scelta.fetch_row
@contatore = @contatore + 1
end
@contatore = @contatore - 1
assegna_variabili
end
end
end
}
FXLabel.new(vLinea5, "Denominazione conto", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 122)
@denominazioneConto = FXDataTarget.new("")
FXTextField.new(vLinea5, 30, :target => @denominazioneConto, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED)

vLinea6 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
FXLabel.new(vLinea6, "Costante del conto", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padLeft => 25, :padRight => 120)
@costanteConto = FXDataTarget.new("A")
FXTextField.new(vLinea6, 1, :target => @costanteConto, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE)

vLinea7 = FXHorizontalFrame.new(gruppo2, :opts => LAYOUT_SIDE_TOP, :vSpacing => 0)
@codiceNaturaConto = FXDataTarget.new(0)
@descrizioneNaturaConto = FXDataTarget.new("")
FXButton.new(vLinea7, '?', :padLeft => 5, :padRight => 5, :padTop =>0, :padBottom => 0).connect(SEL_COMMAND) {
$var = []
ricerca = Finestra90002.new(self)
ricerca.execute(PLACEMENT_CURSOR)
@codiceNaturaConto.value = $var[0]
@descrizioneNaturaConto.value = $var[1]
$var = []
}
FXLabel.new(vLinea7, "Codice natura conto", nil, JUSTIFY_RIGHT|LAYOUT_FILL_ROW, :padRight => 115)
FXTextField.new(vLinea7, 1, :target => @codiceNaturaConto, :selector => FXDataTarget::ID_VALUE, :opts => FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_LIMITED|TEXTFIELD_INTEGER)
FXTextField.new(vLinea7, 30, :target => @descrizioneNaturaConto, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_READONLY|TEXTFIELD_OVERSTRIKE)

@indice = FXDataTarget.new("")
=end
gruppo4 = FXGroupBox.new(area, "", :vSpacing => 0)
vFondo = FXHorizontalFrame.new(gruppo4, :opts => LAYOUT_SIDE_BOTTOM|PACK_UNIFORM_WIDTH)
FXButton.new(vFondo, 'Cancella', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) #{cancella_record}
FXButton.new(vFondo, 'Annulla', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) #{azzera_variabili}
FXButton.new(vFondo, 'Registra', :padLeft => 25, :padRight => 25).connect(SEL_COMMAND) #{registra}
FXButton.new(vFondo, 'Esci', :target => self, :selector => FXDialogBox::ID_CANCEL, :padLeft => 25, :padRight => 25)
#azzera_variabili
end
end

class Finestra90001 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Codice del tipo di conto", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 100)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)
lista.setTableSize(3, 2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 200)

lista.setItemText(0, 0, "1")
lista.setItemText(0, 1, "GRUPPO")
lista.setItemJustify(0, 1, FXTableItem::LEFT)
lista.setItemText(1, 0, "2")
lista.setItemText(1, 1, "CONTO")
lista.setItemJustify(1, 1, FXTableItem::LEFT)
lista.setItemText(2, 0, "3")
lista.setItemText(2, 1, "SOTTOCONTO")
lista.setItemJustify(2, 1, FXTableItem::LEFT)

lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 0)).to_s
$var[1] = (sender.getItem(pos.row, 1)).to_s
end
end
end

class Finestra90002 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Codice della natura del conto", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 100)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)

lista.setTableSize(4, 2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 200)

lista.setItemText(0, 0, "1")
lista.setItemText(0, 1, "CONTO DI REDDITO")
lista.setItemJustify(0, 1, FXTableItem::LEFT)
lista.setItemText(1, 0, "2")
lista.setItemText(1, 1, "CONTO PATRIMONIALE")
lista.setItemJustify(1, 1, FXTableItem::LEFT)
lista.setItemText(2, 0, "3")
lista.setItemText(2, 1, "CONTO D\'ORDINE")
lista.setItemJustify(2, 1, FXTableItem::LEFT)
lista.setItemText(3, 0, "4")
lista.setItemText(3, 1, "CONTO RIEPILOGATIVO")
lista.setItemJustify(3, 1, FXTableItem::LEFT)
lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 0)).to_s
$var[1] = (sender.getItem(pos.row, 1)).to_s
end
end
end

class Finestra90003 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Ricerca del codice del gruppo", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 100)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)

begin
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM piano_dei_conti WHERE codice_tipo_conto = 1")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close
rescue MysqlError => e
@conn.close
print "error code: ", e.errno, "\n"
print "error message: ", e.error, "\n"
end

lista.tableStyle |= TABLE_COL_SIZABLE
lista.setTableSize(0,2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 200)

idx = 0
while idx < @contatore
@riga = @scelta.data_seek(idx)
@riga = @scelta.fetch_row
lista.insertRows(idx)
lista.setItemText(idx, 0, @riga[1])
lista.setItemJustify(idx, 0, FXTableItem::LEFT)
lista.setItemText(idx, 1, @riga[5])
lista.setItemJustify(idx, 1, FXTableItem::LEFT)
idx = idx + 1
end

lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 0)).to_s
$var[1] = (sender.getItem(pos.row, 1)).to_s
end
end
end

class Finestra90004 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Ricerca del codice del conto", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 100)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)

@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM piano_dei_conti WHERE codice_tipo_conto = 2 AND codice_gruppo = '#{$var}'")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close
lista.tableStyle |= TABLE_COL_SIZABLE
lista.setTableSize(0,3)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 25)
lista.setColumnWidth(2, 200)

idx = 0
while idx < @contatore
@riga = @scelta.data_seek(idx)
@riga = @scelta.fetch_row
lista.insertRows(idx)
lista.setItemText(idx, 0, @riga[1])
lista.setItemJustify(idx, 0, FXTableItem::LEFT)
lista.setItemText(idx, 1, @riga[2])
lista.setItemJustify(idx, 1, FXTableItem::LEFT)
lista.setItemText(idx, 2, @riga[5])
lista.setItemJustify(idx, 2, FXTableItem::LEFT)
idx = idx + 1
end
$var = []
lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 1)).to_s
$var[1] = (sender.getItem(pos.row, 2)).to_s
end
end
end

class Finestra90005 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Ricerca del codice di sottoconto", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 100)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)

@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM piano_dei_conti WHERE codice_tipo_conto = 3 AND codice_gruppo = '#{$var[0]}' AND codice_conto = '#{$var[1]}'")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close
lista.tableStyle |= TABLE_COL_SIZABLE
lista.setTableSize(0,6)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 25)
lista.setColumnWidth(2, 50)
lista.setColumnWidth(3, 200)
lista.setColumnWidth(4, 25)
lista.setColumnWidth(5, 100)
idx = 0
while idx < @contatore
@riga = @scelta.data_seek(idx)
@riga = @scelta.fetch_row
lista.insertRows(idx)
lista.setItemText(idx, 0, @riga[1])
lista.setItemJustify(idx, 0, FXTableItem::LEFT)
lista.setItemText(idx, 1, @riga[2])
lista.setItemJustify(idx, 1, FXTableItem::LEFT)
lista.setItemText(idx, 2, @riga[3])
lista.setItemJustify(idx, 2, FXTableItem::LEFT)
lista.setItemText(idx, 3, @riga[5])
lista.setItemJustify(idx, 3, FXTableItem::LEFT)
idx = idx + 1
end
$var = []
lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 2)).to_s
$var[1] = (sender.getItem(pos.row, 3)).to_s
$var[2] = (sender.getItem(pos.row, 4)).to_s
$var[3] = (sender.getItem(pos.row, 5)).to_s
end
end
end

class Finestra90006 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Ricerca di conto per denominazione", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 500, :height => 200)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)

@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM piano_dei_conti WHERE sigla LIKE '%#{$var[0]}%'")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close
lista.tableStyle |= TABLE_COL_SIZABLE
lista.setTableSize(0,2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0,100)
lista.setColumnWidth(1,300)
idx = 0
while idx < @contatore
@riga = @scelta.data_seek(idx)
@riga = @scelta.fetch_row
lista.insertRows(idx)
lista.setItemText(idx, 0, @riga[7])
lista.setItemJustify(idx, 0, FXTableItem::RIGHT)
lista.setItemText(idx, 1, @riga[5])
lista.setItemJustify(idx, 1, FXTableItem::LEFT)
idx = idx + 1
end
$var = []
lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 0)).to_s
end
end
end

class Finestra90011 < FXDialogBox #finestra per la ricerca delle causali di contabilita' generale per codice
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Ricerca del codice della causale iva", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 100)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)

begin
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM causali_coge")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close
rescue MysqlError => e
@conn.close
print "error code: ", e.errno, "\n"
print "error message: ", e.error, "\n"
end

lista.tableStyle |= TABLE_COL_SIZABLE
lista.setTableSize(0,2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 200)

idx = 0
while idx < @contatore
@riga = @scelta.data_seek(idx)
@riga = @scelta.fetch_row
lista.insertRows(idx)
lista.setItemText(idx, 0, @riga[0])
lista.setItemJustify(idx, 0, FXTableItem::LEFT)
lista.setItemText(idx, 1, @riga[1])
lista.setItemJustify(idx, 1, FXTableItem::LEFT)
idx = idx + 1
end

lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 0)).to_s
end
end
end

class Finestra90012 < FXDialogBox #finestra per la ricerca delle causali di contabilita' generale per descrizione
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Causale di contabilita\' generale", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 100)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)
lista.setTableSize(0, 11)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 400)
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM causali_coge WHERE sigla LIKE '%#{$var[0]}%'")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close

idx = 0
while idx < @contatore
@riga = @scelta.data_seek(idx)
@riga = @scelta.fetch_row
lista.insertRows(idx)
lista.setItemText(idx, 0, @riga[0])
lista.setItemJustify(idx, 0, FXTableItem::LEFT)
lista.setItemText(idx, 1, @riga[1])
lista.setItemJustify(idx, 1, FXTableItem::LEFT)
idx = idx + 1
end

lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 0)).to_s
end
end
end

class Finestra90013 < FXDialogBox #finestra per la ricerca dei libri giornale
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Ricerca del libro contabile", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 100)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)
lista.setTableSize(0, 2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 200)

@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM libro_contabile WHERE tipo_registro_iva = 1")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close

lista.tableStyle |= TABLE_COL_SIZABLE
lista.setTableSize(0,2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 200)

idx = 0
while idx < @contatore
@riga = @scelta.data_seek(idx)
@riga = @scelta.fetch_row
lista.insertRows(idx)
lista.setItemText(idx, 0, @riga[0])
lista.setItemJustify(idx, 0, FXTableItem::LEFT)
lista.setItemText(idx, 1, @riga[1])
lista.setItemJustify(idx, 1, FXTableItem::LEFT)
idx = idx + 1
end

lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 0)).to_s
$var[1] = (sender.getItem(pos.row, 1)).to_s
end
end
end

class Finestra90014 < FXDialogBox
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Codice del tipo di libro contabile", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 200)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)
lista.setTableSize(3, 2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 400)

lista.setItemText(0, 0, "1")
lista.setItemText(0, 1, "LIBRO GIORNALE")
lista.setItemJustify(0, 1, FXTableItem::LEFT)
lista.setItemText(1, 0, "2")
lista.setItemText(1, 1, "LIBRO IVA ACQUISTI")
lista.setItemJustify(1, 1, FXTableItem::LEFT)
lista.setItemText(2, 0, "3")
lista.setItemText(2, 1, "LIBRO IVA VENDITE")
lista.setItemJustify(2, 1, FXTableItem::LEFT)

lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 0)).to_s
$var[1] = (sender.getItem(pos.row, 1)).to_s
end
end
end

class Finestra90015 < FXDialogBox #finestra per la ricerca dei libri contabili
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Ricerca del libro contabile", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 200)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)

begin
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM libro_contabile")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close
rescue MysqlError => e
@conn.close
print "error code: ", e.errno, "\n"
print "error message: ", e.error, "\n"
end

lista.tableStyle |= TABLE_COL_SIZABLE
lista.setTableSize(0,2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 400)
idx = 0
while idx < @contatore
@riga = @scelta.data_seek(idx)
@riga = @scelta.fetch_row
lista.insertRows(idx)
lista.setItemText(idx, 0, @riga[0])
lista.setItemJustify(idx, 0, FXTableItem::LEFT)
lista.setItemText(idx, 1, @riga[1])
lista.setItemJustify(idx, 1, FXTableItem::LEFT)
idx = idx + 1
end

lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 0)).to_s
$var[1] = (sender.getItem(pos.row, 1)).to_s
end
end
end

class Finestra90016 < FXDialogBox #finestra per la ricerca dei libri iva
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Ricerca del libro iva", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 500)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)
lista.setTableSize(0, 2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 400)

@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM libro_contabile WHERE tipo_registro_iva > 1")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close

lista.tableStyle |= TABLE_COL_SIZABLE
lista.setTableSize(0,2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 400)

idx = 0
while idx < @contatore
@riga = @scelta.data_seek(idx)
@riga = @scelta.fetch_row
lista.insertRows(idx)
lista.setItemText(idx, 0, @riga[0])
lista.setItemJustify(idx, 0, FXTableItem::LEFT)
lista.setItemText(idx, 1, @riga[1])
lista.setItemJustify(idx, 1, FXTableItem::LEFT)
idx = idx + 1
end

lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 0)).to_s
$var[1] = (sender.getItem(pos.row, 1)).to_s
end
end
end

class Finestra90017 < FXDialogBox #finestra per la ricerca dei documenti iva
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Ricerca del tipo di documento iva", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 500)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)
lista.setTableSize(0, 2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 200)

@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM tipo_documento_iva")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close

lista.tableStyle |= TABLE_COL_SIZABLE
lista.setTableSize(0,2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 200)

idx = 0
while idx < @contatore
@riga = @scelta.data_seek(idx)
@riga = @scelta.fetch_row
lista.insertRows(idx)
lista.setItemText(idx, 0, @riga[0])
lista.setItemJustify(idx, 0, FXTableItem::LEFT)
lista.setItemText(idx, 1, @riga[1])
lista.setItemJustify(idx, 1, FXTableItem::LEFT)
idx = idx + 1
end

lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 0)).to_s
$var[1] = (sender.getItem(pos.row, 1)).to_s
end
end
end

class Finestra90018 < FXDialogBox #finestra per la ricerca delle operazioni iva
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Ricerca delle operazioni iva", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 500)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)
lista.setTableSize(0, 2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 200)

@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM operazione_iva")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close

lista.tableStyle |= TABLE_COL_SIZABLE
lista.setTableSize(0,2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 200)

idx = 0
while idx < @contatore
@riga = @scelta.data_seek(idx)
@riga = @scelta.fetch_row
lista.insertRows(idx)
lista.setItemText(idx, 0, @riga[0])
lista.setItemJustify(idx, 0, FXTableItem::LEFT)
lista.setItemText(idx, 1, @riga[1])
lista.setItemJustify(idx, 1, FXTableItem::LEFT)
idx = idx + 1
end

lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 0)).to_s
$var[1] = (sender.getItem(pos.row, 1)).to_s
end
end
end

class Finestra90019 < FXDialogBox #finestra per la ricerca di causali iva
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Ricerca delle operazioni iva", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 500)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)
lista.setTableSize(0, 2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 200)

@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM causali_iva")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close

lista.tableStyle |= TABLE_COL_SIZABLE
lista.setTableSize(0,2)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 200)

idx = 0
while idx < @contatore
@riga = @scelta.data_seek(idx)
@riga = @scelta.fetch_row
lista.insertRows(idx)
lista.setItemText(idx, 0, @riga[0])
lista.setItemJustify(idx, 0, FXTableItem::LEFT)
lista.setItemText(idx, 1, @riga[1])
lista.setItemJustify(idx, 1, FXTableItem::LEFT)
idx = idx + 1
end

lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 0)).to_s
$var[1] = (sender.getItem(pos.row, 1)).to_s
end
end
end

class Finestra90020 < FXDialogBox #finestra per la ricerca delle causali iva per descrizione
#def initialize(app)
def initialize(app)
# Initialize base class
super(app, "Causale di contabilita\' generale", :opts => DECOR_ALL, :x => 20, :y => 20, :width => 400, :height => 500)
lista = FXTable.new(self, :opts => LAYOUT_FILL|TABLE_READONLY)
lista.setTableSize(0, 11)
lista.rowHeaderMode = LAYOUT_FIX_WIDTH
lista.rowHeaderWidth = 0
lista.columnHeaderMode = LAYOUT_FIX_HEIGHT
lista.columnHeaderHeight = 0
lista.setColumnWidth(0, 25)
lista.setColumnWidth(1, 400)
@conn = Mysql.new("localhost", "root", "xcolibri", "piramide")
@scelta = @conn.query("SELECT * FROM causali_iva WHERE codice LIKE '%#{$var[0]}%'")
@contatore = "#{@scelta.num_rows}".to_i
@conn.close

idx = 0
while idx < @contatore
@riga = @scelta.data_seek(idx)
@riga = @scelta.fetch_row
lista.insertRows(idx)
lista.setItemText(idx, 0, @riga[0])
lista.setItemJustify(idx, 0, FXTableItem::LEFT)
lista.setItemText(idx, 1, @riga[1])
lista.setItemJustify(idx, 1, FXTableItem::LEFT)
idx = idx + 1
end

lista.connect(SEL_SELECTED) do | sender, sel, pos |
$var[0] = (sender.getItem(pos.row, 0)).to_s
end
end
end

if __FILE__ == $0
# Make an application
application = FXApp.new("DataTarget", "FoxTest")
# Create main window
window = Finestra0.new(application)
# Handle interrupts to quit application gracefully
application.addSignal("SIGINT", window.method(:onCmdQuit))
# Create the application
application.create
# Run
application.run
end
    (1-1/1)