Prima versione funzionante del programma.
Manca ancora le gestione delle righe di spesa e sconti. git-svn-id: svn://10.65.10.50/trunk@3436 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
c137c3e4f8
commit
5ac0b14c3c
302
ve/ve6100.cpp
302
ve/ve6100.cpp
@ -44,6 +44,7 @@
|
||||
#include <rmov.h>
|
||||
#include <rmoviva.h>
|
||||
#include <clifo.h>
|
||||
#include <cfven.h>
|
||||
#include <occas.h>
|
||||
#include <scadenze.h>
|
||||
|
||||
@ -60,8 +61,10 @@ enum error_type {
|
||||
caus_error,
|
||||
register_error,
|
||||
change_error,
|
||||
val_error,
|
||||
codpag_error,
|
||||
row_type_error,
|
||||
no_rows_error,
|
||||
conto_error,
|
||||
movement_error,
|
||||
mov_write_error,
|
||||
@ -76,19 +79,21 @@ enum error_type {
|
||||
|
||||
class TMovimentoPN_VE : public TMovimentoPN
|
||||
{
|
||||
TCausale * _caus;
|
||||
|
||||
protected:
|
||||
// simula il K_SPACE di iva_notify
|
||||
void create_row(TCausale& caus, int i);
|
||||
void create_row(int i);
|
||||
// simula il K_ENTER di iva_notify
|
||||
void enter_row(TCausale& caus, int i);
|
||||
void enter_row(int i);
|
||||
// verifica se si tratta di iva indetraibile
|
||||
bool detraibile(TCausale& caus, TRectype& rec) const ;
|
||||
bool detraibile(TRectype& rec) const ;
|
||||
// cerca la prima tra quelle di contabilita' che corrisponde al tipo indicato
|
||||
int type2pos(char tipo);
|
||||
// Trova nelle righe contabili un conto nelle righe di tipo prescelto
|
||||
int bill2pos(const TBill& conto, char tipo);
|
||||
// trasforma un real in TImporto, in base al tipo riga
|
||||
TImporto real2imp(TCausale& caus, const real& r, char row_type);
|
||||
TImporto real2imp(const real& r, char row_type);
|
||||
// setta il record delle righe di contabilita'
|
||||
int set_cg_rec(int n, const TImporto& imp, TBill& conto, const char* desc, char tipo);
|
||||
// aggiunge l'importo indicato alla n-esima riga di contabilita'
|
||||
@ -103,19 +108,20 @@ public:
|
||||
bool movement_ok() ;
|
||||
// ricalcola le righe di contabilita' dalle righe iva presenti
|
||||
// e verifica la quadratura del movimento. Ritorna TRUE se il movimento e' scrivibile
|
||||
bool recalc_cg_rows();
|
||||
bool recalc_cg_rows(TCausale* caus = NULL);
|
||||
};
|
||||
|
||||
TImporto TMovimentoPN_VE::real2imp(TCausale& caus, const real& r, char row_type)
|
||||
TImporto TMovimentoPN_VE::real2imp(const real& r, char row_type)
|
||||
{
|
||||
CHECK(_caus,"Orgggssbb..._caus pointer is NULL!");
|
||||
bool dare;
|
||||
if (row_type == 'S')
|
||||
{
|
||||
dare = caus.sezione_ritsoc() == 'D';
|
||||
dare = _caus->sezione_ritsoc() == 'D';
|
||||
}
|
||||
else
|
||||
{
|
||||
dare = caus.sezione_clifo() == 'D';
|
||||
dare = _caus->sezione_clifo() == 'D';
|
||||
if (row_type != 'T' && row_type != 'F')
|
||||
dare = !dare;
|
||||
}
|
||||
@ -124,15 +130,16 @@ TImporto TMovimentoPN_VE::real2imp(TCausale& caus, const real& r, char row_type)
|
||||
return importo;
|
||||
}
|
||||
|
||||
bool TMovimentoPN_VE::detraibile(TCausale& caus, TRectype& rec) const
|
||||
bool TMovimentoPN_VE::detraibile(TRectype& rec) const
|
||||
{
|
||||
if (caus.iva() == iva_vendite)
|
||||
CHECK(_caus,"Orgggssbb..._caus pointer is NULL!");
|
||||
if (_caus->iva() == iva_vendite)
|
||||
return TRUE;
|
||||
|
||||
if (rec.get_int(RMI_TIPODET) != 0)
|
||||
return FALSE;
|
||||
|
||||
const real & p = caus.reg().prorata();
|
||||
const real & p = _caus->reg().prorata();
|
||||
return p < 100.0;
|
||||
}
|
||||
|
||||
@ -254,29 +261,30 @@ int TMovimentoPN_VE::set_cg_rec(int n, const TImporto& imp, TBill& conto,
|
||||
return n;
|
||||
}
|
||||
|
||||
void TMovimentoPN_VE::create_row(TCausale& caus, int i)
|
||||
void TMovimentoPN_VE::create_row(int i)
|
||||
{
|
||||
CHECK(_caus,"Orgggssbb..._caus pointer is NULL!");
|
||||
TRectype& cur = iva(i);
|
||||
real oldimp = cur.get_real(RMI_IMPONIBILE);
|
||||
real oldiva = cur.get_real(RMI_IMPOSTA);
|
||||
|
||||
if (oldiva.is_zero() && caus.corrispettivi()) // In caso di corrispettivi ...
|
||||
if (oldiva.is_zero() && _caus->corrispettivi()) // In caso di corrispettivi ...
|
||||
{
|
||||
const TString zanicchi(cur.get(RMI_CODIVA)); // Codice IVA
|
||||
const TCodiceIVA i(zanicchi);
|
||||
oldiva = i.scorpora(oldimp); // ... scorpora imposta dall'imponibile
|
||||
}
|
||||
|
||||
const char tipod = detraibile(caus,cur) ? 'D' : 'N';
|
||||
const char tipod = detraibile(cur) ? 'D' : 'N';
|
||||
|
||||
if (type2pos(tipod) < 0 && !oldiva.is_zero())
|
||||
{
|
||||
const int ri = tipod == 'D' ? 3 : 4; // Calcola riga causale per l'IVA
|
||||
TBill c; caus.bill(ri, c);
|
||||
TBill c; _caus->bill(ri, c);
|
||||
if (c.ok())
|
||||
{
|
||||
const TString80 d(caus.desc_agg(ri));
|
||||
set_cg_rec(-1, real2imp(caus, ZERO, 'I'), c, d, tipod);
|
||||
const TString80 d(_caus->desc_agg(ri));
|
||||
set_cg_rec(-1, real2imp(ZERO, 'I'), c, d, tipod);
|
||||
}
|
||||
else
|
||||
if (ri == 4) // Se non esiste il conto IVA indetraibile ...
|
||||
@ -295,19 +303,20 @@ void TMovimentoPN_VE::create_row(TCausale& caus, int i)
|
||||
{
|
||||
if (bill2pos(oldconto, 'I') < 0)
|
||||
{
|
||||
const TString d(caus.desc_agg(2));
|
||||
set_cg_rec(-1, real2imp(caus, ZERO, 'I'), oldconto, d, 'I');
|
||||
const TString d(_caus->desc_agg(2));
|
||||
set_cg_rec(-1, real2imp(ZERO, 'I'), oldconto, d, 'I');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TMovimentoPN_VE::enter_row(TCausale& caus, int i)
|
||||
void TMovimentoPN_VE::enter_row(int i)
|
||||
{
|
||||
CHECK(_caus,"Orgggssbb..._caus pointer is NULL!");
|
||||
TRectype& cur = iva(i);
|
||||
real imponibile = cur.get_real(RMI_IMPONIBILE);
|
||||
real imposta = cur.get_real(RMI_IMPOSTA);
|
||||
|
||||
if (imposta.is_zero() && caus.corrispettivi()) // In caso di corrispettivi ...
|
||||
if (imposta.is_zero() && _caus->corrispettivi()) // In caso di corrispettivi ...
|
||||
{
|
||||
const TString zanicchi(cur.get(RMI_CODIVA));
|
||||
const TCodiceIVA i(zanicchi);
|
||||
@ -323,11 +332,11 @@ void TMovimentoPN_VE::enter_row(TCausale& caus, int i)
|
||||
|
||||
int newpos = bill2pos(conto, 'I'); // Riga in cui andra' l'imponibile
|
||||
|
||||
const bool detrarre = detraibile(caus,cur); // Determina se IVA detraibile
|
||||
const bool detrarre = detraibile(cur); // Determina se IVA detraibile
|
||||
|
||||
// Calcola riga causale col conto opportuno
|
||||
const int ri = detrarre ? RIGA_IVA_DETRAIBILE : RIGA_IVA_NON_DETRAIBILE;
|
||||
TBill contoiva; caus.bill(ri, contoiva);
|
||||
TBill contoiva; _caus->bill(ri, contoiva);
|
||||
|
||||
if (ri == 4 && !contoiva.ok()) // Se non c'e' il conto IVA indetraibile ...
|
||||
{ // ... somma imponibile e imposta
|
||||
@ -338,16 +347,16 @@ void TMovimentoPN_VE::enter_row(TCausale& caus, int i)
|
||||
// Aggiorna conto sulla riga contabile
|
||||
if (newpos < 0) // conto non esistente: da inserire
|
||||
{
|
||||
const TImporto val(real2imp(caus,imponibile, 'I'));
|
||||
const TImporto val(real2imp(imponibile, 'I'));
|
||||
if (conto.ok() && !val.is_zero()) // Se c'e' imponibile ...
|
||||
{ // crea una nuova riga contabile
|
||||
const TString d(caus.desc_agg(2));
|
||||
const TString d(_caus->desc_agg(2));
|
||||
set_cg_rec(-1, val, conto, d, 'I');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TImporto val(real2imp(caus,imponibile, 'I'));
|
||||
TImporto val(real2imp(imponibile, 'I'));
|
||||
add_cg_rec(newpos, val);
|
||||
}
|
||||
|
||||
@ -360,14 +369,14 @@ void TMovimentoPN_VE::enter_row(TCausale& caus, int i)
|
||||
{
|
||||
if (!imposta.is_zero()) // Se c'e' imposta ...
|
||||
{ // ... crea nuova riga per l'IVA
|
||||
const TImporto val(real2imp(caus,imposta, 'I'));
|
||||
const TString d(caus.desc_agg(ri));
|
||||
const TImporto val(real2imp(imposta, 'I'));
|
||||
const TString d(_caus->desc_agg(ri));
|
||||
set_cg_rec(-1, val, contoiva, d, tipod);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const TImporto val(real2imp(caus,imposta, 'I'));
|
||||
const TImporto val(real2imp(imposta, 'I'));
|
||||
add_cg_rec(newposiva, val);
|
||||
}
|
||||
}
|
||||
@ -392,17 +401,29 @@ bool TMovimentoPN_VE::movement_ok()
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TMovimentoPN_VE::recalc_cg_rows()
|
||||
bool TMovimentoPN_VE::recalc_cg_rows(TCausale* caus)
|
||||
{
|
||||
const int righe = iva_items();
|
||||
TRectype& head = lfile().curr();
|
||||
TString16 codcau(head.get(MOV_CODCAUS));
|
||||
int year = head.get_int(MOV_ANNOIVA);
|
||||
TCausale caus(codcau,year);
|
||||
bool external_caus = TRUE;
|
||||
if (caus == NULL)
|
||||
{
|
||||
external_caus = FALSE;
|
||||
TRectype& head = lfile().curr();
|
||||
TString16 codcau(head.get(MOV_CODCAUS));
|
||||
int year = head.get_int(MOV_ANNOIVA);
|
||||
_caus = new TCausale (codcau,year);
|
||||
}
|
||||
else
|
||||
_caus = caus;
|
||||
for (int i=0; i<righe; i++)
|
||||
{
|
||||
create_row(caus, i);
|
||||
enter_row(caus, i);
|
||||
create_row(i);
|
||||
enter_row(i);
|
||||
}
|
||||
if (!external_caus)
|
||||
{
|
||||
delete _caus;
|
||||
_caus = NULL;
|
||||
}
|
||||
return movement_ok();
|
||||
}
|
||||
@ -452,12 +473,19 @@ class TContabilizzazione_app : public TApplication
|
||||
bool _can_write; // se TRUE e' abilitata la scrittura. Non appena rileva un errore rimane a FALSE for this instance
|
||||
bool _nump_cfg; // se TRUE prende il numero rif. partita dal numero protocollo
|
||||
TMask *_msk; // maschera di selezione dati
|
||||
TLocalisamfile *_clifo, // file dei clienti e fornitori
|
||||
TRelation *_clifo; // relazione dei clienti e fornitori + cfven
|
||||
TLocalisamfile *_attiv, // file delle attivita' (per far funzionare TRegistro)
|
||||
*_fcaus, // file delle causale (per far funzionare TCausale)
|
||||
*_frcaus, // file delle righe causali (per far funzionare TCausale)
|
||||
*_part, // file delle partite (per far funzionare TPartita)
|
||||
*_scad, // file delle scadenze (per far funzionare TPartita)
|
||||
*_pags, // file dei pagamenti (per far funzionare TPartita)
|
||||
*_anamag; // file delle anagrafiche di magazzino
|
||||
TTable *_cpg, // tabella condizioni di pagamento
|
||||
*_gmc, // tabella gruppi/sottogruppi merceologici
|
||||
*_rfa, // tabella raggruppamenti fiscali
|
||||
*_cve, // tabella categorie di vendita
|
||||
*_val, // tabella valute estere
|
||||
*_tri, // tabella tipi di riga
|
||||
*_caa, // tabella categorie acquisto articoli
|
||||
*_cra, // tabella categorie ricavo articoli
|
||||
@ -701,13 +729,21 @@ bool TContabilizzazione_app::create()
|
||||
_doc = new TDocumentoEsteso;
|
||||
_cpg = new TTable("%CPG");
|
||||
_tri = new TTable("%TRI");
|
||||
_val = new TTable("%VAL");
|
||||
_caa = new TTable("CAA");
|
||||
_cra = new TTable("CRA");
|
||||
_gmc = new TTable("GMC");
|
||||
_rfa = new TTable("RFA");
|
||||
_cve = new TTable("CVE");
|
||||
_cco = new TTable("CCO");
|
||||
_clifo = new TLocalisamfile(LF_CLIFO);
|
||||
_clifo = new TRelation(LF_CLIFO);
|
||||
_clifo->add(LF_CFVEN,"TIPOCF=TIPOCF|CODCF=CODCF");
|
||||
_fcaus = new TLocalisamfile(LF_CAUSALI);
|
||||
_frcaus = new TLocalisamfile(LF_RCAUSALI);
|
||||
_part = new TLocalisamfile(LF_PARTITE);
|
||||
_scad = new TLocalisamfile(LF_SCADENZE);
|
||||
_pags = new TLocalisamfile(LF_PAGSCA);
|
||||
_attiv = new TLocalisamfile(LF_ATTIV); // Altrimenti TRegistro non va!
|
||||
_anamag = new TLocalisamfile(LF_ANAMAG);
|
||||
TConfig conf(CONFIG_DITTA);
|
||||
TString val;
|
||||
@ -716,7 +752,7 @@ bool TContabilizzazione_app::create()
|
||||
// Attenzione! non esegue alcun controllo di consistenza sulla corretta sequenza
|
||||
// presuppone che il programma di configurazione abbia generato correttamente
|
||||
// il tutto.
|
||||
for (int i=0; i<8;i++)
|
||||
for (int i=0; i<5;i++)
|
||||
{
|
||||
val = conf.get("RICERCACR","ve",i+1);
|
||||
if (val.not_empty()) _search_seq.add(val);
|
||||
@ -740,13 +776,20 @@ bool TContabilizzazione_app::destroy()
|
||||
if (_doc) delete _doc;
|
||||
if (_cpg) delete _cpg;
|
||||
if (_tri) delete _tri;
|
||||
if (_val) delete _val;
|
||||
if (_gmc) delete _gmc;
|
||||
if (_rfa) delete _rfa;
|
||||
if (_cve) delete _cve;
|
||||
if (_cco) delete _cco;
|
||||
if (_caa) delete _caa;
|
||||
if (_cra) delete _cra;
|
||||
if (_fcaus) delete _fcaus;
|
||||
if (_frcaus) delete _frcaus;
|
||||
if (_part) delete _part;
|
||||
if (_scad) delete _scad;
|
||||
if (_pags) delete _pags;
|
||||
if (_clifo) delete _clifo;
|
||||
if (_attiv) delete _attiv;
|
||||
if (_anamag) delete _anamag;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
@ -768,11 +811,10 @@ bool TContabilizzazione_app::menu(MENU_TAG mt)
|
||||
error_type TContabilizzazione_app::search_costo_ricavo(TBill& conto, const TRiga_documento& r)
|
||||
{
|
||||
const int items = _search_seq.items();
|
||||
const TString tipocf(_doc->get("TIPOCF"));
|
||||
const bool is_cli = tipocf == "C";
|
||||
const long codcf = _doc->get_long("CODCF");
|
||||
TLocalisamfile & cli_file = _clifo->lfile();
|
||||
const bool is_cli = cli_file.get(CLI_TIPOCF) == "C";
|
||||
bool skip_art_related = FALSE;
|
||||
bool skip_clifo = FALSE;
|
||||
bool skip_clifo = _clifo->bad();
|
||||
TCodiceIVA codiva(r.get("CODIVA"));
|
||||
int gr,co;
|
||||
long so;
|
||||
@ -782,11 +824,6 @@ error_type TContabilizzazione_app::search_costo_ricavo(TBill& conto, const TRiga
|
||||
if (_anamag->read() != NOERR) // se non trova l'articolo saltera' anche gmc,smc,rfa.
|
||||
skip_art_related = TRUE;
|
||||
|
||||
_clifo->put(CLI_TIPOCF,tipocf);
|
||||
_clifo->put(CLI_CODCF,codcf);
|
||||
if (_clifo->read() != NOERR)
|
||||
skip_clifo = TRUE;
|
||||
|
||||
// Scorre la stringa di ricerca
|
||||
for (int i=0;good() && i<items;i++)
|
||||
{
|
||||
@ -794,9 +831,9 @@ error_type TContabilizzazione_app::search_costo_ricavo(TBill& conto, const TRiga
|
||||
if (tok == "CF")
|
||||
{
|
||||
if (skip_clifo) continue;
|
||||
gr = _clifo->get_int(CLI_GRUPPORIC);
|
||||
co = _clifo->get_int(CLI_CONTORIC);
|
||||
so = _clifo->get_long(CLI_SOTTOCRIC);
|
||||
gr = cli_file.get_int(CLI_GRUPPORIC);
|
||||
co = cli_file().get_int(CLI_CONTORIC);
|
||||
so = cli_file().get_long(CLI_SOTTOCRIC);
|
||||
conto.set(gr,co,so);
|
||||
if (conto.ok()) break; // se lo trova esce (tutti != 0)
|
||||
}
|
||||
@ -854,11 +891,11 @@ error_type TContabilizzazione_app::search_costo_ricavo(TBill& conto, const TRiga
|
||||
const bool is_cve = tok == "CV";
|
||||
if (is_cve && !is_cli) continue; // se e' un fornitore salta questa condizione
|
||||
TTable* t = is_cve ? _cve : _cco;
|
||||
TString cod(is_cve ? _doc->get("CATVEN") : "CATCO");
|
||||
TString cod(is_cve ? _doc->get("CATVEN") : "");
|
||||
if (cod.empty())
|
||||
{
|
||||
if (skip_clifo) continue; // se non aveva trovato il cliente salta al prossimo
|
||||
cod = _clifo->get(is_cve ? CLI_CATVEN : CLI_CODCATC);
|
||||
cod = _clifo->lfile(LF_CFVEN).get(is_cve ? CFV_CATVEN : CFV_CODCATC);
|
||||
}
|
||||
t->put("CODTAB",cod);
|
||||
if (t->read() == NOERR)
|
||||
@ -935,7 +972,7 @@ error_type TContabilizzazione_app::compile_head_mov()
|
||||
|
||||
// reperisce l'ultimo numero di registrazione disponibile
|
||||
mov.last();
|
||||
int numreg = mov.get_int(MOV_NUMREG) + 1;
|
||||
const long numreg = mov.get_int(MOV_NUMREG) + 1;
|
||||
if (mov.status() != NOERR || numreg < 1)
|
||||
{
|
||||
_error = nr_reg_error;
|
||||
@ -943,18 +980,19 @@ error_type TContabilizzazione_app::compile_head_mov()
|
||||
}
|
||||
|
||||
TCodice_numerazione cod_num(_doc->numerazione());
|
||||
TString numdoc;
|
||||
// calcola il numero documento aggiungendo l'eventuale prefisso/postfisso.
|
||||
numdoc = cod_num.complete_num(_doc->numero());
|
||||
TString numdoc(cod_num.complete_num(_doc->numero()));
|
||||
if (numdoc.empty() || cod_num.status() != NOERR)
|
||||
{
|
||||
_error = nr_doc_error;
|
||||
return _error;
|
||||
}
|
||||
|
||||
numdoc.upper(); // Il numero documento e' uppercase!
|
||||
|
||||
// Istanzia la causale del documento corrente...
|
||||
const TTipo_documento& tipo = _doc->tipo();
|
||||
_caus = new TCausale(tipo.causale(),data_reg.year());
|
||||
const TString codcaus(tipo.causale());
|
||||
_caus = new TCausale(codcaus,data_reg.year());
|
||||
if (!_caus->ok())
|
||||
{
|
||||
_error = caus_error;
|
||||
@ -988,10 +1026,25 @@ error_type TContabilizzazione_app::compile_head_mov()
|
||||
// Reperisce la valuta
|
||||
TDate datacam(_doc->get_date("DATACAMBIO"));
|
||||
TString codval(_doc->valuta());
|
||||
codval.trim();
|
||||
// Reperisce il cambio
|
||||
real cambio(_doc->cambio());
|
||||
if (cambio != 1.0 && codval.empty())
|
||||
codval.trim();
|
||||
if (codval == "LIT")
|
||||
{
|
||||
codval = "";
|
||||
cambio = ZERO;
|
||||
}
|
||||
if (codval.not_empty())
|
||||
{
|
||||
_val->put("CODTAB",codval);
|
||||
if (_val->read() != NOERR)
|
||||
{
|
||||
_error = val_error;
|
||||
return _error;
|
||||
}
|
||||
}
|
||||
// Reperisce il cambio
|
||||
if ((cambio != ZERO && codval.empty()) ||
|
||||
cambio == ZERO && codval.not_empty())
|
||||
{
|
||||
_error = change_error;
|
||||
return _error;
|
||||
@ -1002,10 +1055,11 @@ error_type TContabilizzazione_app::compile_head_mov()
|
||||
long codcf = _doc->get_long("CODCF");
|
||||
TString occas;
|
||||
{
|
||||
_clifo->put(CLI_TIPOCF,tipocf); _clifo->put(CLI_CODCF,codcf);
|
||||
if (_clifo->read() == NOERR)
|
||||
TLocalisamfile& cli_file = _clifo->lfile();
|
||||
cli_file.put(CLI_TIPOCF,tipocf); cli_file.put(CLI_CODCF,codcf);
|
||||
if (_clifo->read(_isequal) == NOERR) // posiziona il cliente una volta per tutte
|
||||
{
|
||||
if (_clifo->get_bool(CLI_OCCAS))
|
||||
if (cli_file.get_bool(CLI_OCCAS))
|
||||
{
|
||||
occas = _doc->get("OCFPI");
|
||||
TLocalisamfile ocf(LF_OCCAS);
|
||||
@ -1043,7 +1097,8 @@ error_type TContabilizzazione_app::compile_head_mov()
|
||||
if (registro.agenzia_viaggi()) mov_rec.put(MOV_DATA74TER,data_reg);
|
||||
mov_rec.put(MOV_NUMDOC,numdoc); mov_rec.put(MOV_TIPODOC,_caus->tipo_doc());
|
||||
mov_rec.put(MOV_CODCAUS,_caus->codice()); mov_rec.put(MOV_DESCR,descr);
|
||||
mov_rec.put(MOV_TIPOMOV,_caus->tipomov()); mov_rec.put(MOV_ANNOIVA,data_reg.year());
|
||||
mov_rec.put(MOV_TIPOMOV,_caus->tipomov()+'0'); mov_rec.put(MOV_ANNOIVA,data_reg.year());
|
||||
mov_rec.put(MOV_REG,registro.name());
|
||||
mov_rec.put(MOV_PROTIVA,ult_prot); mov_rec.put(MOV_CODVAL,codval);
|
||||
mov_rec.put(MOV_CAMBIO,cambio); mov_rec.put(MOV_TIPO,tipocf);
|
||||
mov_rec.put(MOV_DATACAM,datacam);
|
||||
@ -1103,11 +1158,10 @@ error_type TContabilizzazione_app::create_iva_rows()
|
||||
TString16 codiva;
|
||||
TBill conto;
|
||||
|
||||
int annoes = head.get_int(MOV_ANNOES);
|
||||
long numreg = head.get_long(MOV_NUMREG);
|
||||
real cambio = 1.0;
|
||||
const int annoes = head.get_int(MOV_ANNOES);
|
||||
const long numreg = head.get_long(MOV_NUMREG);
|
||||
real cambio = head.get_real(MOV_CAMBIO);
|
||||
real imponibile,imposta;
|
||||
if (in_valuta) cambio = head.get_real(MOV_CAMBIO);
|
||||
|
||||
for (int i = 0; i<items && cur != NULL;i++)
|
||||
{
|
||||
@ -1132,7 +1186,7 @@ error_type TContabilizzazione_app::create_iva_rows()
|
||||
TRectype& rec_iva = _movimento->iva(i);
|
||||
rec_iva.put(RMI_ANNOES,annoes);
|
||||
rec_iva.put(RMI_NUMREG,numreg);
|
||||
rec_iva.put(RMI_NUMRIG,i);
|
||||
rec_iva.put(RMI_NUMRIG,i+1); // La numerazione comincia da 1
|
||||
rec_iva.put(RMI_CODIVA,codiva);
|
||||
rec_iva.put(RMI_IMPONIBILE,imponibile);
|
||||
rec_iva.put(RMI_IMPOSTA,imposta);
|
||||
@ -1152,30 +1206,28 @@ error_type TContabilizzazione_app::create_total_doc_row()
|
||||
{
|
||||
TRectype& rec_cg = _movimento->cg(0);
|
||||
TRectype& head = _movimento->lfile().curr();
|
||||
int annoes = head.get_int(MOV_ANNOES);
|
||||
long numreg = head.get_long(MOV_NUMREG);
|
||||
const int annoes = head.get_int(MOV_ANNOES);
|
||||
const long numreg = head.get_long(MOV_NUMREG);
|
||||
TDate datareg(head.get_date(MOV_DATAREG));
|
||||
real totdoc(head.get_real(MOV_TOTDOC));
|
||||
char rowtype = 'T';
|
||||
TString16 tipocf(_doc->get("TIPOCF"));
|
||||
const long codcf = _doc->get_long("CODCF");
|
||||
TLocalisamfile& cli_file = _clifo->lfile();
|
||||
TString16 tipocf(cli_file.get(CLI_TIPOCF));
|
||||
const long codcf = cli_file.get_long(CLI_CODCF);
|
||||
int gruppo = 0, conto = 0;
|
||||
|
||||
// Trova il mastro del cliente/fornitore
|
||||
_clifo->put(CLI_TIPOCF,tipocf);
|
||||
_clifo->put(CLI_CODCF,codcf);
|
||||
|
||||
// cerca prima sul record
|
||||
if (_clifo->read() == NOERR)
|
||||
// cerca prima sul record del cliente/fornitore
|
||||
if (_clifo->good())
|
||||
{
|
||||
gruppo = _clifo->get_int(CLI_GRUPPO);
|
||||
conto = _clifo->get_int(CLI_CONTO);
|
||||
gruppo = cli_file.get_int(CLI_GRUPPO);
|
||||
conto = cli_file.get_int(CLI_CONTO);
|
||||
}
|
||||
|
||||
// poi sulla categoria di vendita (solo per i clienti)
|
||||
if ((_clifo->bad() || gruppo == 0 || conto == 0) && tipocf == "C")
|
||||
if ((gruppo == 0 || conto == 0) && tipocf == "C")
|
||||
{
|
||||
TString16 cod_cve(_clifo->get(CLI_CATVEN));
|
||||
TString16 cod_cve(_clifo->lfile(LF_CFVEN).get(CFV_CATVEN));
|
||||
_cve->put("CODTAB",cod_cve);
|
||||
if (_cve->read() == NOERR)
|
||||
{
|
||||
@ -1218,12 +1270,13 @@ error_type TContabilizzazione_app::create_total_doc_row()
|
||||
error_type TContabilizzazione_app::compile_rows_mov()
|
||||
// Compila le righe
|
||||
{
|
||||
_doc->compile_summary(); // Calcola imposta/imponibile per riga
|
||||
// A questo punto il documento e' gia stato calcolato, percio' non c'e' bisogno di
|
||||
// chiamare la compile_summary() del documento.
|
||||
const int rows = _doc->rows();
|
||||
const TArray& sum_arr = _doc->summary_array();
|
||||
|
||||
_righe_iva.destroy(); // resetta l'assoc_array delle righe di iva
|
||||
for (int i=0; good() && i<rows; i++) // browse all this fucked document rows
|
||||
for (int i=1; good() && i<=rows; i++) // browse all this fucked document rows
|
||||
{
|
||||
const TRiga_documento& r= (*_doc)[i];
|
||||
TString16 tiporiga(r.get("TIPORIGA"));
|
||||
@ -1231,25 +1284,34 @@ error_type TContabilizzazione_app::compile_rows_mov()
|
||||
if (_tri->read() == NOERR) // controlla l'esistenza della riga
|
||||
{
|
||||
char s4 = _tri->get("S4")[0];
|
||||
if (s4 == 'D') continue; // salta le righe descrizione
|
||||
//TBI:
|
||||
// righe di (S)pese e s(C)onti
|
||||
|
||||
if (s4 == 'M') // queste sono le righe di merce. (! big elaboration !)
|
||||
switch (s4)
|
||||
{
|
||||
TBill conto;
|
||||
search_costo_ricavo(conto,r); // l'errore eventuale viene settato qui dentro
|
||||
if (good())
|
||||
case 'M': // righe merce
|
||||
{
|
||||
TRiepilogo_Iva& ri = (TRiepilogo_Iva&) sum_arr[i];
|
||||
add_iva_row(conto,ri);
|
||||
TBill conto;
|
||||
search_costo_ricavo(conto,r); // l'errore eventuale viene settato qui dentro
|
||||
if (good())
|
||||
{
|
||||
TRiepilogo_Iva& ri = (TRiepilogo_Iva&) sum_arr[i];
|
||||
add_iva_row(conto,ri);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'S': // righe spese (TBI)
|
||||
break;
|
||||
case 'C': // righe sconti (TBI)
|
||||
break;
|
||||
case 'D':
|
||||
default :
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
_error = row_type_error;
|
||||
}
|
||||
|
||||
if (good() && _righe_iva.items() == 0)
|
||||
_error = no_rows_error;
|
||||
// Crea le righe di IVA
|
||||
if (good())
|
||||
create_iva_rows();
|
||||
@ -1258,22 +1320,23 @@ error_type TContabilizzazione_app::compile_rows_mov()
|
||||
create_total_doc_row();
|
||||
// crea le righe di contabilita'
|
||||
if (good())
|
||||
if (!_movimento->recalc_cg_rows()) _error = movement_error;
|
||||
if (!_movimento->recalc_cg_rows(_caus)) _error = movement_error;
|
||||
return _error;
|
||||
}
|
||||
|
||||
void TContabilizzazione_app::calc_pagament()
|
||||
{
|
||||
TString16 codpag(_doc->get("CODPAG"));
|
||||
TRectype& head = _movimento->lfile().curr();
|
||||
TString16 codpag(head.get(MOV_CODPAG));
|
||||
TString16 data(_doc->get("DATAINSC"));
|
||||
_pagamento = new TPagamento(codpag, data);
|
||||
real totspese = _doc->tot_spese();
|
||||
real totimposte = _doc->tot_imposte();
|
||||
real totimponibili = _doc->tot_documento() - totimposte - totspese;
|
||||
const bool valuta = _doc->in_valuta();
|
||||
const bool valuta = head.get(MOV_CODVAL).not_empty();
|
||||
if (valuta)
|
||||
{
|
||||
const real change(_doc->cambio());
|
||||
const real change(head.get_real(MOV_CAMBIO));
|
||||
real val1 = totimponibili * change;
|
||||
real val2 = totimposte * change;
|
||||
real val3 = totspese * change;
|
||||
@ -1292,7 +1355,7 @@ error_type TContabilizzazione_app::write_scadenze()
|
||||
const TRectype& head = _movimento->lfile().curr();
|
||||
const long nreg = head.get_long(MOV_NUMREG);
|
||||
const int anno = head.get_int(MOV_ANNOIVA);
|
||||
const TString numpart(_nump_cfg ? MOV_PROTIVA : MOV_NUMDOC);
|
||||
const TString numpart(head.get(_nump_cfg ? MOV_PROTIVA : MOV_NUMDOC));
|
||||
|
||||
//TPartita* oldgame = partite().first();
|
||||
TPartita* newgame = NULL;
|
||||
@ -1393,7 +1456,7 @@ error_type TContabilizzazione_app::write_scadenze()
|
||||
delete newgame;
|
||||
}
|
||||
|
||||
if (_pagamento)
|
||||
if (_pagamento != NULL)
|
||||
{
|
||||
delete _pagamento;
|
||||
_pagamento = NULL;
|
||||
@ -1481,6 +1544,10 @@ void TContabilizzazione_app::display_error()
|
||||
msg.format("Rilevato un cambio senza valuta relativamente al documento %s/%ld."
|
||||
"Verificare la correttezza delle informazioni inserite.",(const char*)_doc->numerazione(),_doc->numero());
|
||||
break;
|
||||
case val_error:
|
||||
msg.format("Rilevato un codice valuta inesistente relativamente al documento %s/%ld."
|
||||
"Verificare la correttezza della informazione inserita.",(const char*)_doc->numerazione(),_doc->numero());
|
||||
break;
|
||||
case codpag_error:
|
||||
msg.format("Rilevato un codice pagamento non esistente relativamente al documento %s/%ld."
|
||||
"Verificare l'esistenza del codice pagamento inserito.",(const char*)_doc->numerazione(),_doc->numero());
|
||||
@ -1489,6 +1556,10 @@ void TContabilizzazione_app::display_error()
|
||||
msg.format("Rilevato un codice tipo riga non esistente relativamente al documento %s/%ld."
|
||||
"Verificare l'esistenza dei vari codici riga inseriti.",(const char*)_doc->numerazione(),_doc->numero());
|
||||
break;
|
||||
case no_rows_error:
|
||||
msg.format("Nessuna riga iva contabile e' stata trovata relativamente al documento %s/%ld."
|
||||
"Verificare l'esistenza dei vari codici riga inseriti.",(const char*)_doc->numerazione(),_doc->numero());
|
||||
break;
|
||||
case conto_error:
|
||||
msg.format("Rilevato un conto di costo/ricavo inesistente relativamente al documento %s/%ld."
|
||||
"Verificare l'esistenza dei conti associati.",(const char*)_doc->numerazione(),_doc->numero());
|
||||
@ -1524,7 +1595,11 @@ void TContabilizzazione_app::contabilize_document()
|
||||
_total_docs++;
|
||||
change_doc_status();
|
||||
}
|
||||
delete _caus;
|
||||
if (_caus != NULL)
|
||||
{
|
||||
delete _caus;
|
||||
_caus = NULL;
|
||||
}
|
||||
delete _movimento;
|
||||
}
|
||||
|
||||
@ -1534,20 +1609,25 @@ void TContabilizzazione_app::contabilize()
|
||||
TLocalisamfile righe_doc(LF_RIGHEDOC);
|
||||
TRectype da(LF_DOC),a(LF_DOC);
|
||||
const long items = _num_sheet->items();
|
||||
TString16 codnum;
|
||||
TString msg;
|
||||
|
||||
|
||||
_total_docs = 0;
|
||||
for (long i=0L; i<items;i++) // Scorre per tutte le numerazioni dello sheet
|
||||
if (_num_sheet->checked(i)) // Se la numerazione corrente e' stata selezionata
|
||||
{ // istanzia un cursore per la numerazione corrente, con i limiti di data
|
||||
TString16 codnum(_num_sheet->row(i).get(1));
|
||||
codnum = _num_sheet->row(i).get(1);
|
||||
da.put("DATADOC",_data_ini);
|
||||
da.put("CODNUM",codnum);
|
||||
a.put("DATADOC",_data_fine);
|
||||
da.put("CODNUM",codnum);
|
||||
a.put("CODNUM",codnum);
|
||||
TCursor doc_cur(&doc_rel,"",3,&da,&a);
|
||||
const long cur_items = doc_cur.items(); // Scorre tutti i documenti che rientrano nell'intervallo selezionato
|
||||
TString msg;
|
||||
msg.format("Contabilizzazione documenti %s dal %s al %s",(const char*)codnum,(const char*) _data_ini, (const char*) _data_fine);
|
||||
msg = "Contabilizzazione documenti ";
|
||||
msg << codnum << " dal ";
|
||||
msg << _data_ini.string() << " al ";
|
||||
msg << _data_fine.string();
|
||||
#ifdef DBG
|
||||
TProgind p(cur_items,msg,TRUE,TRUE,1);
|
||||
#else
|
||||
@ -1562,11 +1642,17 @@ void TContabilizzazione_app::contabilize()
|
||||
{
|
||||
p.setstatus(j+1);
|
||||
doc_cur = j;
|
||||
_doc->read(doc_cur.curr()); // istanzia il documento
|
||||
_doc->read(doc_cur.curr()); // legge il documento
|
||||
if (doc_tipo_stato_ok()) // controlla che il tipo documento e lo stato siano coerenti con la ELD selezionata
|
||||
contabilize_document();
|
||||
else
|
||||
_error = elaboration_error;
|
||||
{
|
||||
// ATTENZIONE!: se non ha ancora cominciato a contabilizzare, eventuali
|
||||
// documenti con tipo o stato differenti vengono semplicemente scartati
|
||||
// senza segnalare errori
|
||||
if (_total_docs > 0)
|
||||
_error = elaboration_error;
|
||||
}
|
||||
if (!good())
|
||||
display_error();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user