Corretta gestione valuta in prima nota e gestione dare/avere nelle causali
git-svn-id: svn://10.65.10.50/trunk@546 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
d87826888b
commit
ab9480626f
664
cg/cg0500.cpp
664
cg/cg0500.cpp
@ -7,147 +7,19 @@
|
||||
#include <config.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include <clifo.h>
|
||||
#include <pconti.h>
|
||||
#include <causali.h>
|
||||
#include <rcausali.h>
|
||||
#include <clifo.h>
|
||||
#include <pconti.h>
|
||||
|
||||
#include "cglib.h"
|
||||
#include "cg2103.h"
|
||||
#include "cg0500.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Funzioni legate ai parametri ditta
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
HIDDEN bool salda_conto()
|
||||
{
|
||||
static bool _saldaconto = 2;
|
||||
|
||||
if (_saldaconto == 2)
|
||||
{
|
||||
TConfig conf(CONFIG_DITTA);
|
||||
_saldaconto = conf.get_bool("GesSal");
|
||||
}
|
||||
return _saldaconto;
|
||||
}
|
||||
|
||||
HIDDEN bool gestione_valuta()
|
||||
{
|
||||
static bool _gest_val = 2;
|
||||
|
||||
if (_gest_val == 2)
|
||||
{
|
||||
TConfig conf(CONFIG_DITTA);
|
||||
_gest_val = conf.get_bool("GesVal");
|
||||
}
|
||||
return _gest_val;
|
||||
}
|
||||
|
||||
HIDDEN int anno_iva()
|
||||
{
|
||||
static int _anno_iva = 0;
|
||||
if (_anno_iva == 0)
|
||||
{
|
||||
TConfig conf(CONFIG_DITTA);
|
||||
_anno_iva = (int)conf.get_long("AnLiIv", "cg");
|
||||
if (_anno_iva < 1900)
|
||||
{
|
||||
_anno_iva = TDate(TODAY).year();
|
||||
error_box("Nei parametri ditta manca l'anno liquidazione IVA: assumo %d", _anno_iva);
|
||||
}
|
||||
}
|
||||
return _anno_iva;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Le righe di causale:
|
||||
//
|
||||
// Righe_rcaus e' un array di TRiga_caus.
|
||||
//
|
||||
// - NB - Contiene solo le descrizioni fisse!
|
||||
//
|
||||
// I dati letti dal file sono memorizzati direttamente nello spreadsheet
|
||||
// Quando cambiano i campi tipodoc, codreg, tpm della testata le nuove
|
||||
// descrizioni vengono caricate in questo array e poi ricopiate (solo le
|
||||
// descrizioni) nello spreadsheet.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
class TRiga_caus : public TToken_string
|
||||
{
|
||||
public:
|
||||
const TString& operator = (const TString& s) {return TToken_string::operator=(s);}
|
||||
const TString& operator = (const char* s) {return TToken_string::operator=(s);}
|
||||
|
||||
TRiga_caus (const char *df="", // descrizione fissa
|
||||
char sezione=' ', // dare/avere
|
||||
TConto* tc = NULL, // il conto
|
||||
const char * coddes="", // codice descr. aggiuntiva
|
||||
const char * descagg=""); // descrizione aggiuntiva
|
||||
};
|
||||
|
||||
TRiga_caus::TRiga_caus (const char * df, char sez, TConto* tc,
|
||||
const char * coddes, const char * descagg)
|
||||
: TToken_string(128)
|
||||
{
|
||||
add(df);
|
||||
add(sez);
|
||||
if (tc != NULL) add(tc->string(0x3));
|
||||
else add(" | | | | ");
|
||||
add(coddes);
|
||||
add(descagg);
|
||||
}
|
||||
|
||||
class TRighe_rcaus : public TArray
|
||||
{
|
||||
public:
|
||||
void set_descr (int numrig=-1, const char * descr="");
|
||||
void clear(int riga); // pulisce una riga in seguito ad Azzera
|
||||
void clear_descr(); // cancella solo le descrizioni fisse
|
||||
void CaricaRigheLibere();
|
||||
void CausaleIncassoPagamento();
|
||||
void CausaleRitenutaOccas ();
|
||||
void CausaleVendite ();
|
||||
void CausaleAcquisti();
|
||||
TRighe_rcaus() : TArray(20) {}
|
||||
};
|
||||
|
||||
// Cancella tutte le descrizioni delle righe
|
||||
void TRighe_rcaus::clear_descr()
|
||||
{
|
||||
for (int i=0; i < items(); i++)
|
||||
{
|
||||
TRiga_caus *r = (TRiga_caus*)objptr(i);
|
||||
if (r) r->add("", 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Cancella tutta la riga tranne la descrizione
|
||||
void TRighe_rcaus::clear(int row)
|
||||
{
|
||||
TRiga_caus* r = (TRiga_caus*)objptr(row);
|
||||
if (r != NULL) *r = (const char*)r->get(0);
|
||||
}
|
||||
|
||||
// Setta la descrizione di una riga senza cmbiare il resto
|
||||
void TRighe_rcaus::set_descr(int i, const char * dfi)
|
||||
{
|
||||
TRiga_caus *r = (TRiga_caus*)objptr(i);
|
||||
|
||||
if (r == NULL)
|
||||
{
|
||||
r = new TRiga_caus(dfi);
|
||||
add(r,i);
|
||||
}
|
||||
else
|
||||
r->add(dfi, 0);
|
||||
}
|
||||
|
||||
bool filtra_reg(const TRelation * r);
|
||||
|
||||
typedef enum { acquisto, vendita, incasso_pagamento,
|
||||
typedef enum { no_descr, acquisto, vendita, incasso_pagamento,
|
||||
ritenuta_occas, incasso_pagamento_gesval } tipo_descr;
|
||||
|
||||
|
||||
class TCaus_app : public TRelation_application
|
||||
{
|
||||
int _filtro; // tipo di filtro su tab. reg.
|
||||
@ -156,23 +28,29 @@ typedef enum { acquisto, vendita, incasso_pagamento,
|
||||
// 3 acquisti
|
||||
// 4 sia acquisti che vendite
|
||||
|
||||
friend bool filtra_reg(const TRelation * r);
|
||||
TSheet_field* _sheet;
|
||||
|
||||
// Parametri ditta
|
||||
bool _valuta, _saldaconto;
|
||||
int _anno_iva;
|
||||
|
||||
protected:
|
||||
static bool filtra_reg(const TRelation * r);
|
||||
|
||||
static bool tipocf_hndl (TMask_field& f, KEY k);
|
||||
static bool cod_reg_hndl (TMask_field& f, KEY k);
|
||||
static bool tipodoc_hndl (TMask_field& f, KEY k);
|
||||
static bool tipomov_hndl (TMask_field& f, KEY k);
|
||||
|
||||
static bool sezione_hndl (TMask_field& f, KEY k);
|
||||
static bool conto_hndl (TMask_field& f, KEY k);
|
||||
static bool sottoconto_hndl (TMask_field& f, KEY k);
|
||||
static bool codcausim_hndl (TMask_field& f, KEY k);
|
||||
static bool m770_hndl (TMask_field& f, KEY k);
|
||||
static bool leggi_riga (int r, KEY k);
|
||||
static bool ss_notify (int r, KEY k);
|
||||
|
||||
TRelation * _rel;
|
||||
TMask * _msk;
|
||||
TLocalisamfile * _conti;
|
||||
int _mode; // Modo maschera corrente
|
||||
int _items;
|
||||
|
||||
// Bitarray delle righe lette da file all'inizio.
|
||||
// Quando leggo dal file la riga n setto il bit n.
|
||||
@ -181,9 +59,17 @@ typedef enum { acquisto, vendita, incasso_pagamento,
|
||||
void togli_dal_file(const TString&);
|
||||
|
||||
void read_rcaus(TMask&);
|
||||
bool descr2array(TMask&, bool fromHandler);
|
||||
bool fill_sheet(TMask&);
|
||||
|
||||
void set_descr (int numrig=-1, const char * descr="");
|
||||
void clear(int riga); // pulisce una riga in seguito ad Azzera
|
||||
void clear_descr(); // cancella solo le descrizioni fisse
|
||||
void carica_righe_libere();
|
||||
void causale_inc_pag();
|
||||
void causale_ritenute ();
|
||||
void causale_vendite ();
|
||||
void causale_acquisti();
|
||||
|
||||
protected:
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
@ -193,6 +79,7 @@ protected:
|
||||
virtual bool changing_mask(int mode) {return FALSE; }
|
||||
virtual bool remove();
|
||||
|
||||
void read_firm_params();
|
||||
void init_mask(TMask&);
|
||||
virtual void init_query_mode(TMask&);
|
||||
virtual void init_insert_mode(TMask&);
|
||||
@ -205,49 +92,33 @@ protected:
|
||||
|
||||
public:
|
||||
bool _forcedCopy;
|
||||
TRighe_rcaus _righe_rcaus; // Array delle descrizioni delle righe
|
||||
tipo_descr _tipo_des; // Il tipo di causale corrente
|
||||
|
||||
void compilaarray (const TString&, int, int, int);
|
||||
void array2sheet(); // Copia le descrizioni dall'array allo sheet
|
||||
void compila_array (const TString&, int, int, int);
|
||||
|
||||
TSheet_field& ss() const { return *_sheet; }
|
||||
TMask& ss_mask() const { return _sheet->sheet_mask(); }
|
||||
|
||||
TMask* main_mask() const { return _msk; }
|
||||
TMask& ss_mask() const { return ss().sheet_mask(); }
|
||||
TSheet_field& ss() const { return (TSheet_field&)_msk->field(F_SHEET_GCS);}
|
||||
void add_riga (int numrig, char sz, TConto& tc, const TString& d, const TString& da);
|
||||
bool mostra_campi(TMask_field& f);
|
||||
TLocalisamfile & conti() { return *_conti; }
|
||||
|
||||
bool valuta() const { return _valuta; }
|
||||
bool saldaconto() const { return _saldaconto; }
|
||||
int anno_iva() const { return _anno_iva; }
|
||||
|
||||
TCaus_app() {}
|
||||
};
|
||||
|
||||
HIDDEN TCaus_app& app() { return (TCaus_app&) main_app(); }
|
||||
|
||||
// Per sapere su che riga sono dello spreadsheet. v. set_notify piu' sotto
|
||||
// e per pulire la sezione Dare/avere in caso di riga azzerata
|
||||
bool TCaus_app::leggi_riga(int r, KEY k)
|
||||
{
|
||||
if (k == K_ENTER)
|
||||
{
|
||||
TToken_string &riga = app().ss().row(r);
|
||||
const int g = riga.get_int(3);
|
||||
if (g == 0) // riga azzerata
|
||||
{
|
||||
app()._righe_rcaus.clear(r); // pulisco la riga anche nell'array
|
||||
app().ss().force_update(r);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool filtra_reg(const TRelation * r)
|
||||
bool TCaus_app::filtra_reg(const TRelation * r)
|
||||
{
|
||||
bool ok = FALSE;
|
||||
|
||||
const TRectype& rec = r->lfile().curr();
|
||||
const int anno = atoi(rec.get("CODTAB").left(4));
|
||||
|
||||
if (anno == anno_iva())
|
||||
if (anno == app().anno_iva())
|
||||
{
|
||||
const int tiporeg = rec.get_int("I0");
|
||||
const bool corrisp = rec.get_bool("B0");
|
||||
@ -261,7 +132,7 @@ bool filtra_reg(const TRelation * r)
|
||||
case 3:
|
||||
ok = tiporeg == 2; break;
|
||||
case 4: // tiporeg 1 senza corrisp OPPURE 2 (NC ST ND AF)
|
||||
ok = (tiporeg == 1 && !corrisp) || tiporeg == 2; break;
|
||||
ok = tiporeg == 2 || (tiporeg == 1 && !corrisp) ; break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -270,6 +141,129 @@ bool filtra_reg(const TRelation * r)
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Funzioni che caricano le varie descrizioni fisse nell'array
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Cancella tutta la riga tranne la descrizione
|
||||
void TCaus_app::clear(int riga)
|
||||
{
|
||||
TToken_string& r = ss().row(riga);
|
||||
r = r.get(0);
|
||||
ss().force_update(riga);
|
||||
}
|
||||
|
||||
// Setta la descrizione di una riga senza cmbiare il resto
|
||||
void TCaus_app::set_descr(int i, const char * dfi)
|
||||
{
|
||||
TToken_string& r = ss().row(i);
|
||||
r.add(dfi, 0);
|
||||
}
|
||||
|
||||
void TCaus_app::carica_righe_libere()
|
||||
{
|
||||
for (int i = ss().items(); i < 20; i++)
|
||||
set_descr(i);
|
||||
ss().force_update();
|
||||
}
|
||||
|
||||
// Cancella tutte le descrizioni delle righe
|
||||
void TCaus_app::clear_descr()
|
||||
{
|
||||
TArray& a = ss().rows_array();
|
||||
for (int i=0; i < a.items(); i++)
|
||||
{
|
||||
TToken_string& r = (TToken_string&)a[i];
|
||||
r.add("", 0);
|
||||
}
|
||||
app()._tipo_des = no_descr;
|
||||
}
|
||||
|
||||
void TCaus_app::causale_vendite()
|
||||
{
|
||||
if (_tipo_des == vendita)
|
||||
return;
|
||||
|
||||
clear_descr();
|
||||
_tipo_des = vendita;
|
||||
|
||||
int i=0;
|
||||
set_descr(i++, "C Clienti");
|
||||
set_descr(i++, "C Di ricavo");
|
||||
set_descr(i++, "C Iva vendite");
|
||||
set_descr(i++, "C Iva non detraibile");
|
||||
set_descr(i++, "C Imp. esenti");
|
||||
set_descr(i++, "C Imp. non imponibili");
|
||||
set_descr(i++, "C Imp. non soggetti");
|
||||
set_descr(i++, "C Ritenute fiscali");
|
||||
set_descr(i++, "C Ritenute soc.");
|
||||
carica_righe_libere();
|
||||
}
|
||||
|
||||
|
||||
void TCaus_app::causale_acquisti()
|
||||
{
|
||||
if (_tipo_des == acquisto)
|
||||
return;
|
||||
|
||||
clear_descr();
|
||||
_tipo_des = acquisto;
|
||||
|
||||
int i=0;
|
||||
set_descr( i++, "C Fornitori");
|
||||
set_descr(i++, "C Di costo");
|
||||
set_descr(i++, "C Iva acquisti");
|
||||
set_descr(i++, "C Iva non detraibile");
|
||||
set_descr(i++, "C Imp. esenti");
|
||||
set_descr(i++, "C Imp. non imponibili");
|
||||
set_descr(i++, "C Imp. non soggetti");
|
||||
set_descr(i++, "C Ritenute fiscali");
|
||||
set_descr(i++, "C Ritenute soc.");
|
||||
carica_righe_libere();
|
||||
}
|
||||
|
||||
void TCaus_app::causale_ritenute()
|
||||
{
|
||||
if (_tipo_des == ritenuta_occas)
|
||||
return;
|
||||
|
||||
clear_descr();
|
||||
_tipo_des = ritenuta_occas;
|
||||
|
||||
int i=0;
|
||||
set_descr (i++, "Costo");
|
||||
set_descr (i++, "Cassa/banca");
|
||||
set_descr (i++, "Erario");
|
||||
carica_righe_libere();
|
||||
}
|
||||
|
||||
void TCaus_app::causale_inc_pag()
|
||||
{
|
||||
const tipo_descr tipo_des = valuta() ? incasso_pagamento_gesval : incasso_pagamento;
|
||||
|
||||
if (_tipo_des == tipo_des)
|
||||
return;
|
||||
|
||||
clear_descr();
|
||||
_tipo_des = tipo_des;
|
||||
|
||||
int i=0;
|
||||
set_descr ( i++, "C Clienti/Fornitori");
|
||||
set_descr ( i++, "C Cassa o banca");
|
||||
set_descr ( i++, "C Tratta");
|
||||
set_descr ( i++, "C Ricevuta bancaria");
|
||||
set_descr ( i++, "C Cessione");
|
||||
set_descr ( i++, "C Paghero'");
|
||||
set_descr ( i++, "C Lettera di credito");
|
||||
set_descr ( i++, "C Abb. pass/sc.");
|
||||
set_descr ( i++, "C Abb. att/sc.");
|
||||
set_descr ( i++, "C Spese e rimborsi");
|
||||
set_descr ( i++, "C Ritenute fiscali");
|
||||
if (_tipo_des == incasso_pagamento_gesval)
|
||||
set_descr (i++, "C Differenza cambio");
|
||||
carica_righe_libere();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Handler della maschera principale
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
@ -303,7 +297,7 @@ bool TCaus_app::tipodoc_hndl (TMask_field& f, KEY k)
|
||||
if (val.not_empty() && val != "IN" && val != "PG" && val != "AN")
|
||||
{
|
||||
f.mask().hide(F_TIPO_MOV_2);
|
||||
if (salda_conto()) f.mask().show(F_TIPO_MOV_1);
|
||||
if (app().saldaconto()) f.mask().show(F_TIPO_MOV_1);
|
||||
|
||||
f.mask().enable(F_COD_REG);
|
||||
field_reg.check_type(CHECK_REQUIRED);
|
||||
@ -346,7 +340,7 @@ bool TCaus_app::tipodoc_hndl (TMask_field& f, KEY k)
|
||||
f.mask().disable(F_COD_REG);
|
||||
|
||||
f.mask().hide(F_TIPO_MOV_1);
|
||||
if (salda_conto())
|
||||
if (app().saldaconto())
|
||||
f.mask().show(F_TIPO_MOV_2);
|
||||
}
|
||||
|
||||
@ -354,10 +348,10 @@ bool TCaus_app::tipodoc_hndl (TMask_field& f, KEY k)
|
||||
const TString16 codreg(f.mask().get(F_COD_REG));
|
||||
if (codreg.not_empty())
|
||||
{
|
||||
TRegistro registro(codreg, anno_iva());
|
||||
TRegistro registro(codreg, app().anno_iva());
|
||||
if (registro.name().empty())
|
||||
return f.error_box("Non esiste il registro %s per l'anno %d",
|
||||
(const char *)codreg, anno_iva());
|
||||
(const char *)codreg, app().anno_iva());
|
||||
}
|
||||
|
||||
app().mostra_campi(f);
|
||||
@ -421,14 +415,14 @@ bool TCaus_app::mostra_campi(TMask_field& f)
|
||||
m.show(F_OP_FINE_ANNO);
|
||||
m.show(F_COLL_CESP);
|
||||
m.show(F_M_770);
|
||||
if (salda_conto()) m.hide(F_MOV_VALU);
|
||||
if (saldaconto()) m.hide(F_MOV_VALU);
|
||||
m.hide(F_MOV_SEZ);
|
||||
break;
|
||||
case 3:
|
||||
case 5:
|
||||
case 6:
|
||||
if (gestione_valuta()) m.show(F_MOV_VALU);
|
||||
if (salda_conto()) m.show(F_MOV_SEZ);
|
||||
if (valuta()) m.show(F_MOV_VALU);
|
||||
if (saldaconto()) m.show(F_MOV_SEZ);
|
||||
m.show(F_M_770);
|
||||
m.hide(F_OP_FINE_ANNO);
|
||||
m.hide(F_COLL_CESP);
|
||||
@ -441,8 +435,8 @@ bool TCaus_app::mostra_campi(TMask_field& f)
|
||||
{ // codreg non vuoto
|
||||
m.hide(F_OP_FINE_ANNO);
|
||||
m.hide(F_MOV_SEZ);
|
||||
if (gestione_valuta()) m.show(F_MOV_VALU);
|
||||
if (!salda_conto())
|
||||
if (valuta()) m.show(F_MOV_VALU);
|
||||
if (!saldaconto())
|
||||
m.show(F_COD_CAUS_IM);
|
||||
m.show(F_AUTO_FAT);
|
||||
m.show(F_ALLEGAT);
|
||||
@ -473,7 +467,7 @@ bool TCaus_app::cod_reg_hndl (TMask_field& f, KEY k)
|
||||
if (tpd.not_empty())
|
||||
{
|
||||
TipoIVA i = nessuna_iva;
|
||||
TRegistro grog(codreg, anno_iva());
|
||||
TRegistro grog(codreg, app().anno_iva());
|
||||
TTable tabtpd("%TPD");
|
||||
tabtpd.put("CODTAB", tpd);
|
||||
if (tabtpd.read() == NOERR)
|
||||
@ -496,6 +490,39 @@ bool TCaus_app::cod_reg_hndl (TMask_field& f, KEY k)
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Handler della maschera dello spreadsheet
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
bool TCaus_app::ss_notify(int r, KEY k)
|
||||
{
|
||||
if (k == K_ENTER)
|
||||
{
|
||||
TToken_string &riga = app().ss().row(r);
|
||||
const int g = riga.get_int(3);
|
||||
if (g == 0) // riga azzerata
|
||||
app().clear(r); // pulisco la riga anche nell'array
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TCaus_app::sezione_hndl (TMask_field& f, KEY k)
|
||||
{
|
||||
if (k == K_ENTER)
|
||||
{
|
||||
if (f.mask().get(SS_GRUPPO).not_empty())
|
||||
{
|
||||
if (f.get().empty())
|
||||
{
|
||||
const int riga = app().ss().selected();
|
||||
if (riga == 0 || riga == 8)
|
||||
return f.error_box("E' necessario specificare la sezione D/A");
|
||||
}
|
||||
}
|
||||
else
|
||||
f.reset();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TCaus_app::conto_hndl (TMask_field& f, KEY k)
|
||||
{
|
||||
if (k == K_ENTER)
|
||||
@ -503,7 +530,7 @@ bool TCaus_app::conto_hndl (TMask_field& f, KEY k)
|
||||
char scarta = 'Z';
|
||||
int ultima = 8;
|
||||
|
||||
const TipoIVA tpr = (TipoIVA)app().main_mask()->get_int(F_TIPO_REG);
|
||||
const TipoIVA tpr = (TipoIVA)app().curr_mask().get_int(F_TIPO_REG);
|
||||
|
||||
switch (tpr)
|
||||
{
|
||||
@ -528,7 +555,8 @@ bool TCaus_app::conto_hndl (TMask_field& f, KEY k)
|
||||
char sezione = toupper(sez.get()[0]);
|
||||
if (sezione != 'A' && sezione != 'D') sezione = ' ';
|
||||
char sezione_consigliata = ' ';
|
||||
const bool full = f.get().not_empty();
|
||||
|
||||
const bool full = f.mask().get(SS_GRUPPO).not_empty();
|
||||
|
||||
const int riga = app().ss().selected();
|
||||
if (tpr != nessuna_iva && riga <= ultima)
|
||||
@ -560,22 +588,19 @@ bool TCaus_app::conto_hndl (TMask_field& f, KEY k)
|
||||
"%s non valido con registro %s", cf == 'C' ? "Cliente" : "Fornitore", iva2name(tpr));
|
||||
}
|
||||
|
||||
if (sezione == ' ')
|
||||
if (sezione == ' ' && sezione_consigliata != ' ')
|
||||
{
|
||||
const char sc[2] = { sezione_consigliata, '\0' };
|
||||
sez.set(sc);
|
||||
if (full && sezione_consigliata == ' ')
|
||||
return sez.error_box("E' necessario specificare la sezione D/A");
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
// 1. Se specifico il sottoconto devono essere non vuoti gruppo e conto
|
||||
// 2. g-c-s devono esistere
|
||||
bool TCaus_app::sottoconto_hndl (TMask_field& f, KEY k)
|
||||
bool TCaus_app::sottoconto_hndl(TMask_field& f, KEY k)
|
||||
{
|
||||
if (k == K_ENTER && f.get().not_empty())
|
||||
{
|
||||
@ -586,155 +611,80 @@ bool TCaus_app::sottoconto_hndl (TMask_field& f, KEY k)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Funzioni che caricano le varie descrizioni fisse nell'array
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
void TRighe_rcaus::CausaleVendite()
|
||||
{
|
||||
int i=0;
|
||||
TConto tc();
|
||||
app()._tipo_des = vendita;
|
||||
// set_descr(i++, "C Clienti", 'C');
|
||||
set_descr(i++, "C Clienti"); // Lascio scelta libera
|
||||
set_descr(i++, "C Di ricavo");
|
||||
set_descr(i++, "C Iva vendite");
|
||||
set_descr(i++, "C Iva non detraibile");
|
||||
set_descr(i++, "C Imp. esenti");
|
||||
set_descr(i++, "C Imp. non imponibili");
|
||||
set_descr(i++, "C Imp. non soggetti");
|
||||
set_descr(i++, "C Ritenute fiscali");
|
||||
set_descr(i++, "C Ritenute soc.");
|
||||
CaricaRigheLibere();
|
||||
}
|
||||
|
||||
|
||||
void TRighe_rcaus::CausaleAcquisti()
|
||||
{
|
||||
int i=0;
|
||||
app()._tipo_des = acquisto;
|
||||
// set_descr( i++, "C Fornitori", 'F');
|
||||
set_descr( i++, "C Fornitori");
|
||||
set_descr(i++, "C Di costo");
|
||||
set_descr(i++, "C Iva acquisti");
|
||||
set_descr(i++, "C Iva non detraibile");
|
||||
set_descr(i++, "C Imp. esenti");
|
||||
set_descr(i++, "C Imp. non imponibili");
|
||||
set_descr(i++, "C Imp. non soggetti");
|
||||
set_descr(i++, "C Ritenute fiscali");
|
||||
set_descr(i++, "C Ritenute soc.");
|
||||
CaricaRigheLibere();
|
||||
}
|
||||
|
||||
void TRighe_rcaus::CausaleRitenutaOccas()
|
||||
{
|
||||
int i=0;
|
||||
app()._tipo_des = ritenuta_occas;
|
||||
set_descr (i++, "Costo");
|
||||
set_descr (i++, "Cassa/banca");
|
||||
set_descr (i++, "Erario");
|
||||
CaricaRigheLibere();
|
||||
}
|
||||
|
||||
void TRighe_rcaus::CaricaRigheLibere()
|
||||
{
|
||||
for (int i = items(); i < 20; i++)
|
||||
set_descr(i);
|
||||
}
|
||||
|
||||
void TRighe_rcaus::CausaleIncassoPagamento()
|
||||
{
|
||||
int i=0;
|
||||
app()._tipo_des = incasso_pagamento;
|
||||
set_descr ( i++, "C Clienti/Fornitori");
|
||||
set_descr ( i++, "C Cassa o banca");
|
||||
set_descr ( i++, "C Tratta");
|
||||
set_descr ( i++, "C Ricevuta bancaria");
|
||||
set_descr ( i++, "C Cessione");
|
||||
set_descr ( i++, "C Paghero'");
|
||||
set_descr ( i++, "C Lettera di credito");
|
||||
set_descr ( i++, "C Abb. pass/sc.");
|
||||
set_descr ( i++, "C Abb. att/sc.");
|
||||
set_descr ( i++, "C Spese e rimborsi");
|
||||
set_descr ( i++, "C Ritenute fiscali");
|
||||
if (gestione_valuta())
|
||||
{
|
||||
set_descr (i++, "C Differenza cambio");
|
||||
app()._tipo_des = incasso_pagamento_gesval;
|
||||
}
|
||||
CaricaRigheLibere();
|
||||
}
|
||||
|
||||
void TCaus_app::compilaarray(const TString& tpd, int tpm, int tpr, int m770)
|
||||
void TCaus_app::compila_array(const TString& tpd, int tpm, int tpr, int m770)
|
||||
{
|
||||
_forcedCopy = FALSE;
|
||||
if (tpd.empty() || tpd == "IN" || tpd == "AN" || tpd == "PG")
|
||||
{
|
||||
if (salda_conto())
|
||||
if (saldaconto())
|
||||
{
|
||||
switch (tpm) {
|
||||
case 3:
|
||||
case 5:
|
||||
case 6:
|
||||
_righe_rcaus.CausaleIncassoPagamento();
|
||||
causale_inc_pag();
|
||||
break;
|
||||
case 0:
|
||||
if (m770 == 6)
|
||||
_righe_rcaus.CausaleRitenutaOccas();
|
||||
else {
|
||||
{
|
||||
causale_ritenute();
|
||||
}
|
||||
else
|
||||
{
|
||||
_forcedCopy = TRUE;
|
||||
_righe_rcaus.clear_descr();
|
||||
_righe_rcaus.CaricaRigheLibere();
|
||||
clear_descr();
|
||||
carica_righe_libere();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
_forcedCopy = TRUE;
|
||||
_righe_rcaus.clear_descr();
|
||||
_righe_rcaus.CaricaRigheLibere();
|
||||
clear_descr();
|
||||
carica_righe_libere();
|
||||
break;
|
||||
}
|
||||
}
|
||||
else { // NO saldaconto
|
||||
else
|
||||
{ // NO saldaconto
|
||||
_forcedCopy = TRUE;
|
||||
_righe_rcaus.clear_descr();
|
||||
_righe_rcaus.CaricaRigheLibere();
|
||||
clear_descr();
|
||||
carica_righe_libere();
|
||||
}
|
||||
}
|
||||
else // C'e' il tipodoc.
|
||||
{
|
||||
if (tpr == 1)
|
||||
_righe_rcaus.CausaleVendite();
|
||||
causale_vendite();
|
||||
else
|
||||
if (tpr == 2)
|
||||
_righe_rcaus.CausaleAcquisti();
|
||||
causale_acquisti();
|
||||
else
|
||||
{
|
||||
_forcedCopy = TRUE;
|
||||
_righe_rcaus.clear_descr();
|
||||
_righe_rcaus.CaricaRigheLibere();
|
||||
clear_descr();
|
||||
carica_righe_libere();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool TCaus_app::fill_sheet(TMask& m)
|
||||
{
|
||||
descr2array(m, TRUE);
|
||||
array2sheet();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Relapp functions
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
int TCaus_app::read(TMask& m)
|
||||
{
|
||||
m.autoload(_rel);
|
||||
descr2array(m, FALSE);
|
||||
array2sheet();
|
||||
read_rcaus(m);
|
||||
fill_sheet(m);
|
||||
return NOERR;
|
||||
}
|
||||
|
||||
void TCaus_app::add_riga(int numrig, char sz, TConto& tc, const TString& d, const TString& da)
|
||||
{
|
||||
TToken_string& riga = ss().row(numrig);
|
||||
riga = " ";
|
||||
riga = riga.get(0); // Lascia invariata la descrizione ...
|
||||
if (riga.empty()) riga = " "; // ... se esiste gia'
|
||||
riga.add(sz);
|
||||
riga.add(tc.string(0x3));
|
||||
riga.add(d);
|
||||
@ -752,7 +702,6 @@ void TCaus_app::read_rcaus(TMask& m)
|
||||
TString80 da;
|
||||
|
||||
_righe_gia_presenti.reset();
|
||||
// _righe_rcaus.destroy();
|
||||
|
||||
rcaus.zero();
|
||||
rcaus.put(RCA_CODCAUS, cod);
|
||||
@ -784,63 +733,17 @@ void TCaus_app::read_rcaus(TMask& m)
|
||||
}
|
||||
}
|
||||
|
||||
// ricopio l'array Righe_rcaus nello sheet
|
||||
void TCaus_app::array2sheet()
|
||||
{
|
||||
TString80 dfi;
|
||||
_items = _righe_rcaus.items();
|
||||
bool update = FALSE;
|
||||
|
||||
for (int i = 0; i < _items; i++)
|
||||
{
|
||||
TToken_string& riga = ss().row(i);
|
||||
TToken_string* r = (TToken_string*)_righe_rcaus.objptr(i);
|
||||
|
||||
dfi = r->get(0);
|
||||
// Ricopio la descrizione solo se non vuota
|
||||
if (_forcedCopy)
|
||||
{
|
||||
update = TRUE;
|
||||
riga.add(dfi,0);
|
||||
}
|
||||
else
|
||||
if (dfi.not_empty())
|
||||
{
|
||||
update = TRUE;
|
||||
riga.add(dfi,0);
|
||||
}
|
||||
}
|
||||
if (update) ss().force_update();
|
||||
}
|
||||
|
||||
bool TCaus_app::descr2array(TMask& m, bool fromHandler)
|
||||
bool TCaus_app::fill_sheet(TMask& m)
|
||||
{
|
||||
TLocalisamfile& caus = _rel->lfile();
|
||||
TString16 tpd, codreg;
|
||||
int tpm, m770, tpr;
|
||||
|
||||
// if (m.mode() == MODE_MOD && !fromHandler)
|
||||
if (fromHandler)
|
||||
{
|
||||
codreg = m.field(F_COD_REG).get();
|
||||
tpd = m.field(F_TIPO_DOC).get();
|
||||
tpm = m.get_int(F_TIPO_MOV);
|
||||
m770 = m.get_int(F_M_770);
|
||||
}
|
||||
else if (m.mode() == MODE_MOD)
|
||||
{
|
||||
codreg = caus.get("REG");
|
||||
tpd = caus.get("TIPODOC");
|
||||
tpm = caus.get_int("TIPOMOV");
|
||||
m770 = caus.get_int("M770");
|
||||
}
|
||||
else
|
||||
{ // sono in inserimento e prima di entrare negli handler
|
||||
codreg = m.field(F_COD_REG).get();
|
||||
tpd = m.field(F_TIPO_DOC).get();
|
||||
tpm = m.get_int(F_TIPO_MOV);
|
||||
m770 = m.get_int(F_M_770);
|
||||
}
|
||||
|
||||
TString16 chiave; chiave << anno_iva() << codreg;
|
||||
TTable reg("REG");
|
||||
@ -851,7 +754,7 @@ bool TCaus_app::descr2array(TMask& m, bool fromHandler)
|
||||
tpr = 0;
|
||||
|
||||
// carico le descrizioni fisse nell'array Righe_rcaus
|
||||
compilaarray(tpd,tpm,tpr,m770);
|
||||
compila_array(tpd,tpm,tpr,m770);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -870,7 +773,6 @@ void TCaus_app::togli_dal_file(const TString& cau)
|
||||
rcaus.zero();
|
||||
rcaus.put(RCA_CODCAUS,cau);
|
||||
rcaus.put(RCA_NRIGA, i);
|
||||
// if (rcaus.read() == NOERR)
|
||||
rcaus.remove();
|
||||
_righe_gia_presenti.reset(i);
|
||||
}
|
||||
@ -887,9 +789,9 @@ int TCaus_app::rewrite(const TMask& m)
|
||||
return re_write(m, TRUE);
|
||||
}
|
||||
|
||||
int TCaus_app::re_write(const TMask& m,bool rewrite)
|
||||
int TCaus_app::re_write(const TMask& m, bool re)
|
||||
{
|
||||
const TString16 cau(m.get(F_COD_CAUS));
|
||||
const TString16 codcau(m.get(F_COD_CAUS));
|
||||
TString16 coddesc;
|
||||
|
||||
TLocalisamfile& caus = _rel->lfile(LF_CAUSALI);
|
||||
@ -897,18 +799,15 @@ int TCaus_app::re_write(const TMask& m,bool rewrite)
|
||||
|
||||
m.autosave(_rel);
|
||||
|
||||
TSheet_field& cs = ss();
|
||||
// _items = _righe_rcaus.items();
|
||||
_items = cs.items();
|
||||
|
||||
for (int i = 0; i < _items; i++)
|
||||
for (int i = 0; i < ss().items(); i++)
|
||||
{
|
||||
TToken_string &riga = cs.row(i);
|
||||
if (riga.empty_items()) continue;
|
||||
TToken_string &riga = ss().row(i);
|
||||
|
||||
char sezione = riga.get_char(1);
|
||||
const char sezione = riga.get_char(1);
|
||||
const char tipo_cf = riga.get_char();
|
||||
const int g = riga.get_int();
|
||||
if (g == 0) continue;
|
||||
|
||||
const int c = riga.get_int();
|
||||
long s = riga.get_long();
|
||||
riga.get(); // Salta descrizione conto
|
||||
@ -917,16 +816,14 @@ int TCaus_app::re_write(const TMask& m,bool rewrite)
|
||||
if (g > 0)
|
||||
{
|
||||
rcaus.zero();
|
||||
rcaus.put (RCA_CODCAUS, cau);
|
||||
rcaus.put (RCA_CODCAUS, codcau);
|
||||
rcaus.put (RCA_NRIGA, i+1); // Numerare da uno!
|
||||
rcaus.put (RCA_SEZIONE, sezione);
|
||||
rcaus.put (RCA_TIPOCF, tipo_cf);
|
||||
rcaus.put (RCA_GRUPPO , g);
|
||||
rcaus.put (RCA_CONTO , c);
|
||||
rcaus.put (RCA_SOTTOCONTO, s);
|
||||
rcaus.put (RCA_CODDESC, (const char *)coddesc);
|
||||
if (rewrite)
|
||||
{
|
||||
rcaus.put (RCA_CODDESC, coddesc);
|
||||
if (_righe_gia_presenti[i+1])
|
||||
{
|
||||
rcaus.rewrite();
|
||||
@ -935,14 +832,11 @@ int TCaus_app::re_write(const TMask& m,bool rewrite)
|
||||
else
|
||||
rcaus.write();
|
||||
}
|
||||
else
|
||||
rcaus.write();
|
||||
}
|
||||
}
|
||||
|
||||
if (rewrite)
|
||||
if (re)
|
||||
{
|
||||
togli_dal_file(cau); // Elimina dal file le righe rimaste nel bitarray
|
||||
togli_dal_file(codcau); // Elimina dal file le righe rimaste nel bitarray
|
||||
return caus.rewrite();
|
||||
}
|
||||
else
|
||||
@ -971,17 +865,22 @@ bool TCaus_app::remove()
|
||||
return ok;
|
||||
}
|
||||
|
||||
void TCaus_app::init_mask(TMask& m)
|
||||
{
|
||||
m.set(F_ANNOES, _anno_iva);
|
||||
}
|
||||
|
||||
void TCaus_app::init_query_mode(TMask& m)
|
||||
{
|
||||
_righe_rcaus.destroy();
|
||||
read_firm_params();
|
||||
ss().reset();
|
||||
init_mask(m);
|
||||
}
|
||||
|
||||
void TCaus_app::init_insert_mode(TMask& m)
|
||||
{
|
||||
ss().reset();
|
||||
init_mask(m);
|
||||
_righe_gia_presenti.reset();
|
||||
}
|
||||
|
||||
void TCaus_app::init_modify_mode(TMask& m)
|
||||
@ -989,44 +888,40 @@ void TCaus_app::init_modify_mode(TMask& m)
|
||||
init_mask(m);
|
||||
}
|
||||
|
||||
void TCaus_app::init_mask(TMask& m)
|
||||
{
|
||||
// 27/06/94 Setto il campo nascosto F_ANNOES all'anno di liq. Iva
|
||||
// preso dai par.ditta
|
||||
const int anno = anno_iva();
|
||||
m.set(F_ANNOES, anno);
|
||||
}
|
||||
|
||||
void TCaus_app::read_firm_params()
|
||||
{
|
||||
TConfig conf(CONFIG_DITTA);
|
||||
|
||||
_saldaconto = conf.get_bool("GesSal");
|
||||
_valuta = conf.get_bool("GesVal");
|
||||
_anno_iva = (int)conf.get_long("AnLiIv", "cg");
|
||||
if (_anno_iva < 1900)
|
||||
{
|
||||
_anno_iva = TDate(TODAY).year();
|
||||
error_box("Nei parametri ditta manca l'anno liquidazione IVA: assumo %d", _anno_iva);
|
||||
conf.set("AnLiIv", _anno_iva);
|
||||
}
|
||||
}
|
||||
|
||||
bool TCaus_app::user_create()
|
||||
{
|
||||
_rel = new TRelation (LF_CAUSALI);
|
||||
_rel->add(LF_RCAUSALI, "CODCAUS=CODCAUS");
|
||||
|
||||
_conti = new TLocalisamfile (LF_PCON);
|
||||
|
||||
_msk = new TMask("cg0500a");
|
||||
_sheet = &(TSheet_field&)_msk->field(F_SHEET_GCS);
|
||||
|
||||
if (!salda_conto())
|
||||
{
|
||||
_msk->hide (F_MOV_SEZ);
|
||||
_msk->hide (F_TIPO_MOV_1);
|
||||
_msk->hide (F_TIPO_MOV_2);
|
||||
_msk->show (F_COD_CAUS_IM);
|
||||
}
|
||||
else
|
||||
{
|
||||
_msk->show (F_MOV_SEZ);
|
||||
_msk->hide (F_COD_CAUS_IM);
|
||||
}
|
||||
read_firm_params();
|
||||
|
||||
if (gestione_valuta())
|
||||
_msk->show (F_MOV_VALU);
|
||||
else
|
||||
_msk->hide (F_MOV_VALU);
|
||||
_msk->show(F_TIPO_MOV_1, saldaconto());
|
||||
_msk->show(F_TIPO_MOV_2, saldaconto());
|
||||
_msk->show (F_MOV_SEZ, saldaconto());
|
||||
_msk->show (F_COD_CAUS_IM, !saldaconto());
|
||||
_msk->show (F_MOV_VALU, valuta());
|
||||
|
||||
_msk->set_handler(F_TIPO_DOC, tipodoc_hndl);
|
||||
if (salda_conto())
|
||||
if (saldaconto())
|
||||
{
|
||||
_msk->set_handler(F_TIPO_MOV_1, tipomov_hndl);
|
||||
_msk->set_handler(F_TIPO_MOV_2, tipomov_hndl);
|
||||
@ -1036,8 +931,9 @@ bool TCaus_app::user_create()
|
||||
_msk->set_handler(F_M_770, m770_hndl);
|
||||
|
||||
TSheet_field& cs = ss();
|
||||
cs.set_notify(leggi_riga);
|
||||
cs.set_notify(ss_notify);
|
||||
|
||||
cs.sheet_mask().set_handler(SS_SEZIONE, sezione_hndl);
|
||||
cs.sheet_mask().set_handler(SS_CONTO, conto_hndl);
|
||||
cs.sheet_mask().set_handler(SS_SOTTOCONTO, sottoconto_hndl);
|
||||
cs.sheet_mask().set_handler(SS_SOTTOCONTO+100, sottoconto_hndl);
|
||||
@ -1052,7 +948,6 @@ bool TCaus_app::user_destroy()
|
||||
{
|
||||
delete _msk;
|
||||
delete _rel;
|
||||
delete _conti;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -1063,6 +958,3 @@ int cg0500(int argc, char* argv[])
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -45,6 +45,7 @@ BEGIN
|
||||
DISPLAY "Registro" REG
|
||||
DISPLAY "Movimento" TIPOMOV
|
||||
COPY OUTPUT F_COD_CAUS
|
||||
CHECKTYPE REQUIRED
|
||||
KEY 2
|
||||
HELP "Descrizione della causale"
|
||||
MESSAGE COPY, F_DESCR2
|
||||
@ -127,12 +128,12 @@ BEGIN
|
||||
FIELD LF_CAUSALI->M770
|
||||
HELP "Inserire il tipo di collegamento Mod.770"
|
||||
ITEM " |Nessuno"
|
||||
ITEM "1|Ricevuta e/o pagamento fattura percipipiente"
|
||||
ITEM "1|Ricevuta e/o pagamento fattura percipiente"
|
||||
ITEM "2|Versamento ritenute percipiente"
|
||||
ITEM "3|Versamento ritenute dipendente"
|
||||
ITEM "4|Versamento contributi dipendente"
|
||||
ITEM "5|Compensi non soggetti"
|
||||
ITEM "6|Ritenute per operazioni occasionali"
|
||||
ITEM "6|Ritenute per prestazioni occasionali"
|
||||
END
|
||||
|
||||
NUMBER F_ANNOES 4
|
||||
|
@ -138,6 +138,7 @@ BEGIN
|
||||
ITEM "A|Avere"
|
||||
FIELD LF_RCAUSALI->SEZIONE
|
||||
FLAGS "U"
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
// Descrizione normale
|
||||
@ -214,6 +215,7 @@ STRING 109 50
|
||||
BEGIN
|
||||
PROMPT 1 8 ""
|
||||
FLAGS "D"
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
|
@ -78,6 +78,7 @@ TMask* TPrimanota_application::load_mask(int n)
|
||||
ism.set_handler(209, sheet_clifo_handler);
|
||||
ism.set_handler(309, sheet_clifo_handler);
|
||||
}
|
||||
_iva_showed = FALSE;
|
||||
case 1:
|
||||
{
|
||||
m->set_handler(F_DATAREG, datareg_handler);
|
||||
@ -85,6 +86,7 @@ TMask* TPrimanota_application::load_mask(int n)
|
||||
m->set_handler(F_DESCR, descr_handler);
|
||||
m->set_handler(F_CODCAUS, caus_modify_handler);
|
||||
m->set_handler(F_SHEETCG, cg_handler);
|
||||
m->set_handler(F_CAMBIO, cambio_handler);
|
||||
m->set_handler(F_VISVAL, visval_handler);
|
||||
|
||||
TSheet_field& cg = (TSheet_field&)m->field(F_SHEETCG);
|
||||
@ -225,13 +227,14 @@ bool TPrimanota_application::changing_mask(int mode)
|
||||
{
|
||||
const bool flag = _mode != MODE_QUERY;
|
||||
|
||||
if (flag && _iva != nessuna_iva)
|
||||
if (flag && _iva != nessuna_iva && !_iva_showed)
|
||||
{
|
||||
WINDOW w = ivas().parent();
|
||||
show_window(w, TRUE);
|
||||
set_front_window(w);
|
||||
process_events();
|
||||
show_window(w, FALSE);
|
||||
_iva_showed = TRUE;
|
||||
}
|
||||
|
||||
return flag;
|
||||
@ -290,6 +293,7 @@ void TPrimanota_application::init_mask(TMask& m)
|
||||
|
||||
const bool intra = _causale.intra();
|
||||
const bool valintra = _causale.valintra();
|
||||
const bool corrisp = _causale.corrispettivi();
|
||||
|
||||
if (_iva != nessuna_iva)
|
||||
{
|
||||
@ -302,24 +306,28 @@ void TPrimanota_application::init_mask(TMask& m)
|
||||
else
|
||||
{
|
||||
forg = 'h';
|
||||
clig = causale().corrispettivi() ? 'h' : 's';
|
||||
clig = corrisp ? 'h' : 's';
|
||||
}
|
||||
m.send_key(K_SHIFT+K_CTRL+clig, -1); // group 1 (clienti)
|
||||
m.send_key(K_SHIFT+K_CTRL+forg, -2); // group 2 (fornitori)
|
||||
m.send_key(K_SHIFT+K_CTRL+clig, -1); // GROUP 1 (clienti)
|
||||
m.send_key(K_SHIFT+K_CTRL+forg, -2); // GROUP 2 (fornitori)
|
||||
if (corrisp) m.hide(F_STATOPAIV);
|
||||
|
||||
m.show(F_CORRLIRE, intra);
|
||||
|
||||
const bool corrval = intra && _causale.valintra();
|
||||
const bool corrval = intra && valintra;
|
||||
m.show(F_CORRVALUTA, corrval);
|
||||
|
||||
m.show(F_CODIVA, m.mode() == MODE_INS);
|
||||
}
|
||||
|
||||
// Show/Hide campi valuta: F_VALUTA, F_CAMBIO, F_VISVAL (GROUP 3)
|
||||
const bool valuta = _causale.valuta() || _causale.valintra();
|
||||
const bool valuta = valintra || (_ges_val && _causale.valuta());
|
||||
m.send_key(K_SHIFT+K_CTRL+(valuta ? 's' : 'h'), -3);
|
||||
if (valuta)
|
||||
m.set(F_VISVAL, "X");
|
||||
{
|
||||
const bool ok = m.get(F_VALUTA).not_empty();
|
||||
m.field(F_VISVAL).set(ok ? "X" : " ");
|
||||
}
|
||||
}
|
||||
|
||||
void TPrimanota_application::init_query_mode(TMask& m)
|
||||
@ -384,14 +392,6 @@ void TPrimanota_application::init_insert_mode(TMask& m)
|
||||
{
|
||||
const long protiva = causale().reg().protocol();
|
||||
m.set(F_PROTIVA, protiva+1);
|
||||
|
||||
TMask_field& vv = m.field(F_VISVAL);
|
||||
if (vv.active() && m.get(F_VALUTA).empty()) // Se e' un movimento in valuta
|
||||
{
|
||||
const bool ok = m.field(F_VALUTA).on_key(K_F9); // Richiedi valuta
|
||||
vv.set(ok ? "X" : " ");
|
||||
if (ok) vv.on_hit(); // Cambia decimali
|
||||
}
|
||||
}
|
||||
|
||||
if (m.get(F_CODCAUS).empty()) return;
|
||||
@ -475,20 +475,26 @@ int TPrimanota_application::read(TMask& m)
|
||||
{
|
||||
m.autoload(_rel);
|
||||
|
||||
cgs().reset();
|
||||
|
||||
if (_iva != nessuna_iva)
|
||||
{
|
||||
ivas().reset();
|
||||
|
||||
const TString16 occode(_rel->lfile().get("OCFPI"));
|
||||
occas_mask().set(O_CODICE, occode);
|
||||
|
||||
const char clifo = toupper(m.get(F_CLIFO)[0]);
|
||||
real cambio(_rel->lfile().get("CAMBIO"));
|
||||
if (cambio < 1.0) cambio = 1.0;
|
||||
m.set_exchange(FALSE, cambio);
|
||||
|
||||
const char clifo = toupper(m.get(F_CLIFO)[0]);
|
||||
if (_iva == iva_acquisti && clifo == 'C')
|
||||
error_box("Registrazione di acquisto attribuita ad un cliente"); else
|
||||
if (_iva == iva_vendite && clifo == 'F')
|
||||
error_box("Registrazione di vendita attribuita ad un fornitore");
|
||||
}
|
||||
|
||||
cgs().reset();
|
||||
|
||||
_saldi.reset(); // Azzera saldi
|
||||
_saldi.set_movprovv(_rel->lfile().get_bool("PROVVIS"));
|
||||
@ -543,8 +549,6 @@ int TPrimanota_application::read(TMask& m)
|
||||
m.set(F_SOLAIVA, solaiva ? "X" : " ");
|
||||
m.field(F_SOLAIVA).on_hit();
|
||||
|
||||
ivas().reset();
|
||||
|
||||
const bool to_swap = test_swap(FALSE);
|
||||
if (to_swap)
|
||||
{
|
||||
@ -583,9 +587,6 @@ int TPrimanota_application::read(TMask& m)
|
||||
ivas().row(i) = riga;
|
||||
}
|
||||
|
||||
TMask_field& vv = m.field(F_VISVAL);
|
||||
if (vv.active()) vv.on_hit();
|
||||
|
||||
return _rel->status();
|
||||
}
|
||||
|
||||
@ -852,11 +853,13 @@ void TPrimanota_application::genera_incasso(const char* causimm)
|
||||
inc.lfile().put("REG", caus.reg().name()); // Registro
|
||||
|
||||
const int annoes = m.get_int(F_ANNOES);
|
||||
const TString16 datareg = m.get(F_DATAREG);
|
||||
|
||||
TRectype& r = inc.cg(0);
|
||||
r.zero();
|
||||
r.put("NUMREG", _lastreg);
|
||||
r.put("NUMRIG", 1);
|
||||
r.put("DATAREG", datareg);
|
||||
r.put("ANNOES", annoes);
|
||||
r.put("SEZIONE", m.get(I_SEZIONE1));
|
||||
r.put("IMPORTO", m.get(F_TOTALE));
|
||||
@ -891,6 +894,7 @@ void TPrimanota_application::genera_incasso(const char* causimm)
|
||||
r.put("IMPORTO", imp);
|
||||
r.put("NUMREG", _lastreg);
|
||||
r.put("NUMRIG", i);
|
||||
r.put("DATAREG", datareg);
|
||||
r.put("ANNOES", annoes);
|
||||
r.put("SEZIONE", m.get(sid));
|
||||
r.put("TIPOC", ' ');
|
||||
|
166
cg/cg2100c.uml
166
cg/cg2100c.uml
@ -124,6 +124,7 @@ BEGIN
|
||||
OUTPUT F_DESCAGG CODTAB
|
||||
OUTPUT F_DESCR S0
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Descrizione assente"
|
||||
END
|
||||
|
||||
STRING F_DESCR 50
|
||||
@ -234,7 +235,6 @@ BEGIN
|
||||
OUTPUT F_CONTORIC CONTORIC
|
||||
OUTPUT F_SOTTOCONTORIC SOTTOCRIC
|
||||
OUTPUT F_CODPAG CODPAG
|
||||
OUTPUT F_VALUTA CODVAL
|
||||
OUTPUT F_STATOPAIV STATOPAIV
|
||||
OUTPUT F_PIVACLIENTE PAIV
|
||||
OUTPUT F_OCCASIONALE OCCAS
|
||||
@ -265,7 +265,6 @@ BEGIN
|
||||
OUTPUT F_SOTTOCONTORIC SOTTOCRIC
|
||||
OUTPUT F_OCCASIONALE OCCAS
|
||||
OUTPUT F_CODPAG CODPAG
|
||||
OUTPUT F_VALUTA CODVAL
|
||||
OUTPUT F_STATOPAIV STATOPAIV
|
||||
OUTPUT F_PIVAFORNITORE PAIV
|
||||
MESSAGE COPY,F_CLIENTE
|
||||
@ -381,86 +380,9 @@ BEGIN
|
||||
WARNING "Codice pagamento assente"
|
||||
END
|
||||
|
||||
NUMBER F_TOTALE 15
|
||||
BEGIN
|
||||
PROMPT 1 12 "Totale documento "
|
||||
FIELD TOTDOC
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
NUMBER F_RITFIS 15
|
||||
BEGIN
|
||||
PROMPT 1 13 "Ritenute fiscali "
|
||||
FIELD RITFIS
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
NUMBER F_RITSOC 15
|
||||
BEGIN
|
||||
PROMPT 1 14 "Ritenute sociali "
|
||||
FIELD LF_MOV->RITSOC
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
STRING F_CODIVA 4
|
||||
BEGIN
|
||||
PROMPT 60 12 "Codice IVA "
|
||||
FLAGS "U"
|
||||
USE %IVA
|
||||
INPUT CODTAB F_CODIVA
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "%@6" R0
|
||||
DISPLAY "Tipo" S1
|
||||
OUTPUT F_CODIVA CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
DATE F_DATA74TER
|
||||
BEGIN
|
||||
PROMPT 54 13 "Data 74/ter "
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD DATA74TER
|
||||
END
|
||||
|
||||
NUMBER F_ANNORIF 4
|
||||
BEGIN
|
||||
PROMPT 45 14 "Rif.partita "
|
||||
FLAGS "A"
|
||||
HELP "Anno di riferimento partita"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_NUMRIF 7
|
||||
BEGIN
|
||||
PROMPT 68 14 "/ "
|
||||
HELP "Numero documento (o protocollo IVA) di riferimento"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_CORRLIRE 15
|
||||
BEGIN
|
||||
PROMPT 1 15 "Corrispettivo Lire "
|
||||
FIELD LF_MOV->CORRLIRE
|
||||
FLAGS "R"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
NUMBER F_CORRVALUTA 15
|
||||
BEGIN
|
||||
PROMPT 45 15 "Corrisp. valuta "
|
||||
FIELD LF_MOV->CORRVALUTA
|
||||
FLAGS "R"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
|
||||
STRING F_VALUTA 3
|
||||
BEGIN
|
||||
PROMPT 1 16 "Valuta "
|
||||
PROMPT 1 12 "Valuta "
|
||||
FIELD LF_MOV->CODVAL
|
||||
FLAGS "U"
|
||||
GROUP 3
|
||||
@ -473,11 +395,12 @@ BEGIN
|
||||
OUTPUT F_VALUTA CODTAB
|
||||
OUTPUT F_CAMBIO R10
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice valuta assente"
|
||||
END
|
||||
|
||||
NUMBER F_CAMBIO 15 5
|
||||
NUMBER F_CAMBIO 12 5
|
||||
BEGIN
|
||||
PROMPT 20 16 "Cambio "
|
||||
PROMPT 20 12 "Cambio "
|
||||
FIELD LF_MOV->CAMBIO
|
||||
FLAGS "RU"
|
||||
GROUP 3
|
||||
@ -486,10 +409,87 @@ END
|
||||
|
||||
BOOLEAN F_VISVAL
|
||||
BEGIN
|
||||
PROMPT 47 16 "Visualizza importi in valuta"
|
||||
PROMPT 47 12 "Visualizza importi in valuta"
|
||||
GROUP 3
|
||||
END
|
||||
|
||||
NUMBER F_TOTALE 15
|
||||
BEGIN
|
||||
PROMPT 1 13 "Totale documento "
|
||||
FIELD TOTDOC
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
NUMBER F_RITFIS 15
|
||||
BEGIN
|
||||
PROMPT 1 14 "Ritenute fiscali "
|
||||
FIELD RITFIS
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
NUMBER F_RITSOC 15
|
||||
BEGIN
|
||||
PROMPT 1 15 "Ritenute sociali "
|
||||
FIELD LF_MOV->RITSOC
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
STRING F_CODIVA 4
|
||||
BEGIN
|
||||
PROMPT 60 13 "Codice IVA "
|
||||
FLAGS "U"
|
||||
USE %IVA
|
||||
INPUT CODTAB F_CODIVA
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "%@6" R0
|
||||
DISPLAY "Tipo" S1
|
||||
OUTPUT F_CODIVA CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice IVA assente"
|
||||
END
|
||||
|
||||
DATE F_DATA74TER
|
||||
BEGIN
|
||||
PROMPT 54 14 "Data 74/ter "
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD DATA74TER
|
||||
END
|
||||
|
||||
NUMBER F_ANNORIF 4
|
||||
BEGIN
|
||||
PROMPT 45 15 "Rif.partita "
|
||||
FLAGS "A"
|
||||
HELP "Anno di riferimento partita"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_NUMRIF 7
|
||||
BEGIN
|
||||
PROMPT 68 15 "/ "
|
||||
HELP "Numero documento (o protocollo IVA) di riferimento"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_CORRLIRE 15
|
||||
BEGIN
|
||||
PROMPT 1 16 "Corrispettivo Lire "
|
||||
FIELD LF_MOV->CORRLIRE
|
||||
FLAGS "R"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
NUMBER F_CORRVALUTA 15
|
||||
BEGIN
|
||||
PROMPT 45 16 "Corrisp. valuta "
|
||||
FIELD LF_MOV->CORRVALUTA
|
||||
FLAGS "R"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "IVA" -1 -1 77 20
|
||||
|
@ -653,7 +653,7 @@ bool TPrimanota_application::codiva_handler(TMask_field& f, KEY key)
|
||||
|
||||
bool TPrimanota_application::detrazione_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_SPACE && app().iva() == iva_acquisti)
|
||||
if (key == K_TAB && f.dirty() && app().iva() == iva_acquisti)
|
||||
{
|
||||
TMask_field& ci = f.mask().field(101);
|
||||
ci.set_dirty();
|
||||
@ -1299,12 +1299,29 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
app().add_cgs_tot(m);
|
||||
|
||||
TLocalisamfile& clifo = ((TEdit_field&)f).browse()->cursor()->file();
|
||||
const int alleg = clifo.get_int(CLI_ALLEG);
|
||||
TEdit_field& upi = m.efield(F_RIEPILOGO);
|
||||
upi.check_type(alleg == 3 ? CHECK_REQUIRED : CHECK_NORMAL);
|
||||
|
||||
if (clifo.get_bool(CLI_OCCAS))
|
||||
m.send_key(K_SPACE, F_OCCASEDIT); // Lancia maschera occasionali
|
||||
|
||||
if (m.field(F_VISVAL).active())
|
||||
{
|
||||
const TString16 valuta(clifo.get("CODVAL"));
|
||||
if (valuta.not_empty() && valuta != m.get(F_VALUTA))
|
||||
{
|
||||
TTable val("%val");
|
||||
val.put("CODTAB", valuta);
|
||||
if (val.read() == NOERR)
|
||||
{
|
||||
m.set(F_VALUTA, valuta);
|
||||
m.set(F_CAMBIO, val.get("R0"), TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
@ -1342,19 +1359,22 @@ bool TPrimanota_application::main_codiva_handler(TMask_field& f, KEY key)
|
||||
if (key == K_TAB && f.get().not_empty())
|
||||
{
|
||||
const real imp(app().ivas().row(1).get(0)); // Se il totale non e' stato spezzato
|
||||
if (imp == ZERO)
|
||||
if (imp.is_zero())
|
||||
{
|
||||
TToken_string& row = app().ivas().row(0);
|
||||
|
||||
TMask& m = f.mask();
|
||||
iva_notify(0, K_SPACE);
|
||||
|
||||
const TCodiceIVA iva(f.get());
|
||||
const bool corr = app().causale().corrispettivi();
|
||||
real tot = app().totale_documento();
|
||||
real imposta;
|
||||
if (!corr)
|
||||
const bool acq3 = (app().iva() == iva_acquisti) && (row.get_int(2) == 3);
|
||||
|
||||
real tot = app().totale_documento(); // Calcola totale documento
|
||||
real imposta; // Calcola imposta
|
||||
if (!corr && !acq3)
|
||||
imposta = app().scorpora(tot, iva.percentuale());
|
||||
|
||||
TToken_string& row = app().ivas().row(0);
|
||||
row.add(tot.string(), 0); // imponibile
|
||||
row.add(imposta.string(), 3); // imposta
|
||||
|
||||
@ -1440,22 +1460,29 @@ bool TPrimanota_application::ritsoc_handler(TMask_field& f, KEY key)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TPrimanota_application::cambio_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_TAB && f.focusdirty())
|
||||
{
|
||||
if (f.get().empty())
|
||||
f.set(f.mask().exchange().string());
|
||||
else
|
||||
f.mask().field(F_VISVAL).on_hit();
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
// Handler of F_VISVAL
|
||||
// Certified 90%
|
||||
// Certified 99%
|
||||
bool TPrimanota_application::visval_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_SPACE)
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
const real e(f.get() == "X" ? m.get(F_CAMBIO) : "1");
|
||||
if (e > ZERO)
|
||||
m.set_exchange(e);
|
||||
else
|
||||
{
|
||||
error_box("Impostare un valore maggiore di zero per il cambio");
|
||||
f.reset();
|
||||
}
|
||||
const bool on = f.get().not_empty();
|
||||
const real e(f.mask().get(F_CAMBIO));
|
||||
m.set_exchange(on, e);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -42,6 +42,7 @@ class TPrimanota_application : public TRelation_application
|
||||
bool _ges_val, _ges_sal; // Gestione valuta e saldaconto
|
||||
bool _rif_par; // Riferimento parita (NUM_DOC | PROTIVA)
|
||||
bool _savenew; // Registra e nuovo
|
||||
bool _iva_showed; // Lo sheet IVA e' gia' stato visualizzato una volta?
|
||||
|
||||
TSaldo_agg _saldi; // Saldi da aggiornare
|
||||
|
||||
@ -65,6 +66,7 @@ class TPrimanota_application : public TRelation_application
|
||||
static bool ritfis_handler(TMask_field& f, KEY key);
|
||||
static bool ritsoc_handler(TMask_field& f, KEY key);
|
||||
static bool main_codiva_handler(TMask_field& f, KEY key);
|
||||
static bool cambio_handler(TMask_field& f, KEY key);
|
||||
static bool visval_handler(TMask_field& f, KEY key);
|
||||
static bool occas_code_handler(TMask_field& f, KEY key);
|
||||
static bool occas_handler(TMask_field& f, KEY key);
|
||||
|
Loading…
x
Reference in New Issue
Block a user