Generazione automatica descrizioni saldaconto in prima nota

git-svn-id: svn://10.65.10.50/branches/R_10_00@22858 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2013-05-06 09:00:09 +00:00
parent f2dfd50a0b
commit 649be11f1e
10 changed files with 177 additions and 22 deletions

View File

@ -15,7 +15,6 @@ int main(int argc, char** argv)
case 6: cg0700(argc,argv); break; // Clienti/Fornitori occasionali case 6: cg0700(argc,argv); break; // Clienti/Fornitori occasionali
default: cg0100(argc,argv); break; // Piano dei conti default: cg0100(argc,argv); break; // Piano dei conti
} }
exit(0);
return 0; return 0;
} }

View File

@ -1979,12 +1979,113 @@ bool TGame_mask::edit_pagamento(TPartita& p, int nriga, int nrata, int nrigp) co
// Edit delle partite // Edit delle partite
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
static bool genera_riferimento(int riga, TString& rif)
{
TToken_string& row = app().cgs().row(riga);
const char tipocf = row.get_char(CG_TIPO - 101);
if (tipocf != 'C' && tipocf != 'F')
return false;
rif = ini_get_string(CONFIG_DITTA, "cg", tipocf == 'C' ? "DescInc" : "DescPag");
if (rif.blank())
return false;
const TMask& mov_mask = app().curr_mask();
bool ok = true;
for (int p = rif.find('{'); p >= 0; p = rif.find('{'))
{
char conn = ' ';
int q = p + 1;
if (rif[q] == '\\' || rif[q] == '&' || rif[q] == '|')
conn = rif[q++];
const int last = rif.find('}', p);
const TString16 field_name(rif.sub(q, last));
const TFieldref field(field_name, LF_MOV);
if (last < 0)
rif.cut(p);
else
{
const int len = rif.len() - last;
for (int i = 0; i <= len; i++)
rif[p + i] = rif[last + i + 1];
}
TString val;
if (field.file() == LF_MOV)
{
const TMask_field* mf = mov_mask.find_by_fieldname(field.name());
if (mf != NULL)
{
val = mf->get();
if (field.to() > 0)
val = val.sub(field.from(), field.to());
rif.insert(val, p);
}
} else
if (field.file() == LF_RMOV)
{
TMask& row_mask = app().cgs().sheet_row_mask(riga);
const TMask_field* rf = row_mask.find_by_fieldname(field.name());
if (rf != NULL)
{
val = rf->get();
if (field.to() > 0)
val = val.sub(field.from(), field.to());
rif.insert(val, p);
}
} else
if (field.file() == LF_PARTITE)
{
TToken_string lista(50,',');
TPartite_array& games = app().partite();
const long nreg = mov_mask.insert_mode() ? 999999 : mov_mask.get_long(F_NUMREG);
for (TPartita* game = games.first(); game; game = games.next())
{
int nriga = game->mov2rig(nreg, riga+1);
if (nriga > 0)
{
nriga = game->prima_fattura();
if (nriga > 0)
{
val = field.read(game->riga(nriga));
if (val.full() && lista.get_pos(val) < 0)
lista.add(val);
}
}
}
val = lista;
rif.insert(val, p);
}
switch (conn)
{
case '\\' :
ok = val.full();
break;
case '&' :
ok &= val.full();
break;
case '|' :
ok |= val.full();
break;
default :
break;
}
}
if (!ok)
rif.cut(0);
return ok;
}
bool TPrimanota_application::edit_partite(const TMask& m, int riga) bool TPrimanota_application::edit_partite(const TMask& m, int riga)
{ {
const char tipo = m.get(CG_TIPO)[0]; const char tipo = m.get(CG_TIPO)[0];
const char rt = m.get(CG_ROWTYPE)[0]; const char rt = m.get(CG_ROWTYPE)[0];
if (rt == 'T' && tipo <= ' ') // Nelle note di credito DEVE essere un clifo if (rt == 'T' && tipo <= ' ') // Nelle note di credito DEVE essere un clifo
return FALSE; return false;
const int gruppo = m.get_int(CG_GRUPPO); const int gruppo = m.get_int(CG_GRUPPO);
const int conto = m.get_int(CG_CONTO); const int conto = m.get_int(CG_CONTO);
@ -2031,6 +2132,23 @@ bool TPrimanota_application::edit_partite(const TMask& m, int riga)
if (changed) if (changed)
{ {
if (m.field(CG_DESCR).empty())
{
TString descr;
if (genera_riferimento(riga, descr))
{
TSheet_field& s = cgs();
s.row(riga).add(descr, CG_DESCR-101);
TBill conto; conto.get(s.row(riga), 2, 0x3);
for (int r = riga+1; r < s.items(); r++)
{
TBill contro; contro.get(s.row(r), 9, 0x3);
if (conto == contro)
s.row(r).add(descr, CG_DESCR-101);
}
}
}
cgs().force_update(); // Aggiornamento righe contabili cgs().force_update(); // Aggiornamento righe contabili
calcola_saldo(); calcola_saldo();
_sal_dirty = true; _sal_dirty = true;

View File

@ -1914,7 +1914,7 @@ void TMastrini_grid::cell_request(long rec, short id, TGrid_cell& cell)
} }
} }
TString80 cms; TString cms;
for (int h = hits.first_one(); h >= 0 && h <= last_rmovana; h++) if (hits[h]) for (int h = hits.first_one(); h >= 0 && h <= last_rmovana; h++) if (hits[h])
{ {
const TRectype& r = rmovana.row(h); const TRectype& r = rmovana.row(h);
@ -1928,6 +1928,8 @@ void TMastrini_grid::cell_request(long rec, short id, TGrid_cell& cell)
if (cms.not_empty()) if (cms.not_empty())
cms << ' '; cms << ' ';
cms << cod; cms << cod;
if (cms.len() >= cell.size())
break;
} }
if (cms.len() >= cell.size()) if (cms.len() >= cell.size())
cms.cut(cell.size()-1); cms.cut(cell.size()-1);

View File

@ -1187,9 +1187,20 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
id.put(MOV_DATAREG, _mov->get(MOV_DATADOC)); id.put(MOV_DATAREG, _mov->get(MOV_DATADOC));
id.put(RMI_CODIVA, _rmoviva->get(RMI_CODIVA)); id.put(RMI_CODIVA, _rmoviva->get(RMI_CODIVA));
id.put("SEZIONE", sezfat); id.put("SEZIONE", sezfat);
id.put("IMPORTO", imponibile_orig+imposta_orig); id.put("IMPORTO", imponibile_orig+imposta_orig);
id.put(RMI_IMPONIBILE, imponibile_orig); id.put(RMI_IMPONIBILE, imponibile_orig);
id.put(RMI_IMPOSTA, imposta_orig);
if (percind > ZERO) // Nel caso di IVA indetraibile memorizza solo la parte detraibile!
{
real imp_det, iva_det, imp_ind, iva_ind;
analizza_IVA(imponibile_orig, imposta_orig, percind, corrisp, false, codiva,
imp_det, iva_det, imp_ind, iva_ind);
id.put(RMI_IMPOSTA, iva_det);
}
else
id.put(RMI_IMPOSTA, imposta_orig);
id.write_rewrite(); id.write_rewrite();
} }

View File

@ -16,6 +16,7 @@ int main(int argc,char** argv)
case 6: cg5600(argc,argv); break; // Ripristino liquidazione case 6: cg5600(argc,argv); break; // Ripristino liquidazione
case 7: cg5700(argc,argv); break; // Comunicazione annuale dati IVA case 7: cg5700(argc,argv); break; // Comunicazione annuale dati IVA
case 8: cg5800(argc,argv); break; // Quadro VT case 8: cg5800(argc,argv); break; // Quadro VT
case 9: cg5900(argc,argv); break; // Stampa Prorata
default: cg5000(argc,argv); break; // Parametri Studio default: cg5000(argc,argv); break; // Parametri Studio
} }
return 0; return 0;

View File

@ -7,3 +7,4 @@ int cg5500 (int argc, char* argv[]);
int cg5600 (int argc, char* argv[]); int cg5600 (int argc, char* argv[]);
int cg5700 (int argc, char* argv[]); int cg5700 (int argc, char* argv[]);
int cg5800 (int argc, char* argv[]); int cg5800 (int argc, char* argv[]);
int cg5900 (int argc, char* argv[]);

View File

@ -19,6 +19,8 @@
#define FLD_DATSAL 119 #define FLD_DATSAL 119
#define CHK_EASYSAL 120 #define CHK_EASYSAL 120
#define CHK_DIFFCAM 121 #define CHK_DIFFCAM 121
#define FLD_DES_INC 122
#define FLD_DES_PAG 123
#define FLD_CSBICHS 217 #define FLD_CSBICHS 217
#define FLD_CSBICHG 218 #define FLD_CSBICHG 218

View File

@ -45,7 +45,7 @@ END
GROUPBOX DLG_NULL 76 6 GROUPBOX DLG_NULL 76 6
BEGIN BEGIN
PROMPT 2 6 "@bParametri contabilita'" PROMPT 2 6 "@bParametri contabilità"
END END
BOOLEAN CHK_GSLBCN BOOLEAN CHK_GSLBCN
@ -88,7 +88,7 @@ BEGIN
GROUP GROUP_CONTABILITA GROUP GROUP_CONTABILITA
END END
GROUPBOX DLG_NULL 76 8 GROUPBOX DLG_NULL 76 10
BEGIN BEGIN
PROMPT 2 12 "@bParametri saldaconto" PROMPT 2 12 "@bParametri saldaconto"
END END
@ -200,6 +200,20 @@ BEGIN
FLAGS "H" // Per ora Vladimiro non lo vuole FLAGS "H" // Per ora Vladimiro non lo vuole
END END
STRING FLD_DES_INC 50 47
BEGIN
PROMPT 4 19 "Descrizione incassi "
FIELD DescInc
GROUP GROUP_SALDACONTO
END
STRING FLD_DES_PAG 50 47
BEGIN
PROMPT 4 20 "Descrizione pagamenti "
FIELD DescPag
GROUP GROUP_SALDACONTO
END
ENDPAGE ENDPAGE
@ -267,7 +281,7 @@ END
STRING FLD_COCACH 3 STRING FLD_COCACH 3
BEGIN BEGIN
PROMPT 1 4 "Codice causale chiusura " PROMPT 1 4 "Codice causale chiusura "
HELP "Codice della causale di chiusura che generera' il movimento" HELP "Codice della causale di chiusura che genererà il movimento"
USE LF_CAUSALI SELECT MOVAP="C" USE LF_CAUSALI SELECT MOVAP="C"
INPUT CODCAUS FLD_COCACH INPUT CODCAUS FLD_COCACH
DISPLAY "Codice" CODCAUS DISPLAY "Codice" CODCAUS
@ -284,7 +298,7 @@ END
STRING FLD_DCOCACH 50 35 STRING FLD_DCOCACH 50 35
BEGIN BEGIN
PROMPT 40 4 "" PROMPT 40 4 ""
HELP "Codice della causale di chiusura che generera' il movimento" HELP "Codice della causale di chiusura che genererà il movimento"
USE LF_CAUSALI KEY 2 SELECT MOVAP="C" USE LF_CAUSALI KEY 2 SELECT MOVAP="C"
INPUT DESCR FLD_DCOCACH INPUT DESCR FLD_DCOCACH
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
@ -298,7 +312,7 @@ END
STRING FLD_COCAAP 3 STRING FLD_COCAAP 3
BEGIN BEGIN
PROMPT 1 5 "Codice causale apertura " PROMPT 1 5 "Codice causale apertura "
HELP "Codice della causale di apertura che generera' il movimento" HELP "Codice della causale di apertura che genererà il movimento"
FLAGS "UZ" FLAGS "UZ"
USE LF_CAUSALI SELECT MOVAP="A" USE LF_CAUSALI SELECT MOVAP="A"
INPUT CODCAUS FLD_COCAAP INPUT CODCAUS FLD_COCAAP
@ -314,7 +328,7 @@ END
STRING FLD_DCOCAAP 50 35 STRING FLD_DCOCAAP 50 35
BEGIN BEGIN
PROMPT 40 5 "" PROMPT 40 5 ""
HELP "Codice della causale di apertura che generera' il movimento" HELP "Codice della causale di apertura che genererà il movimento"
USE LF_CAUSALI KEY 2 SELECT MOVAP="A" USE LF_CAUSALI KEY 2 SELECT MOVAP="A"
INPUT DESCR FLD_DCOCAAP INPUT DESCR FLD_DCOCAAP
COPY DISPLAY FLD_DCOCACH COPY DISPLAY FLD_DCOCACH
@ -830,7 +844,7 @@ END
STRING FLD_RRCCRA 3 STRING FLD_RRCCRA 3
BEGIN BEGIN
PROMPT 2 7 "Causale " PROMPT 2 7 "Causale "
HELP "Codice causale dei ratei per movimento di contabilita'" HELP "Codice causale dei ratei per movimento di contabilità"
FLAGS "UZ" FLAGS "UZ"
USE LF_CAUSALI USE LF_CAUSALI
INPUT CODCAUS FLD_RRCCRA INPUT CODCAUS FLD_RRCCRA
@ -846,7 +860,7 @@ END
STRING FLD_DRRCCRA 50 52 STRING FLD_DRRCCRA 50 52
BEGIN BEGIN
PROMPT 22 7 "" PROMPT 22 7 ""
HELP "Descrizione causale dei ratei per movimento di contabilita'" HELP "Descrizione causale dei ratei per movimento di contabilità"
USE LF_CAUSALI KEY 2 USE LF_CAUSALI KEY 2
INPUT DESCR FLD_DRRCCRA INPUT DESCR FLD_DRRCCRA
COPY DISPLAY FLD_DCOCACH COPY DISPLAY FLD_DCOCACH
@ -919,7 +933,7 @@ END
STRING FLD_RRCCRI 3 STRING FLD_RRCCRI 3
BEGIN BEGIN
PROMPT 2 12 "Causale " PROMPT 2 12 "Causale "
HELP "Codice causale dei risconti per movimento di contabilita'" HELP "Codice causale dei risconti per movimento di contabilità"
FLAGS "UZ" FLAGS "UZ"
COPY USE FLD_RRCCRA COPY USE FLD_RRCCRA
INPUT CODCAUS FLD_RRCCRI INPUT CODCAUS FLD_RRCCRI
@ -935,7 +949,7 @@ END
STRING FLD_DRRCCRI 50 52 STRING FLD_DRRCCRI 50 52
BEGIN BEGIN
PROMPT 22 12 "" PROMPT 22 12 ""
HELP "Descrizione causale dei risconti per movimento di contabilita'" HELP "Descrizione causale dei risconti per movimento di contabilità"
USE LF_CAUSALI KEY 2 USE LF_CAUSALI KEY 2
INPUT DESCR FLD_DRRCCRI INPUT DESCR FLD_DRRCCRI
COPY DISPLAY FLD_DCOCACH COPY DISPLAY FLD_DCOCACH

View File

@ -170,7 +170,7 @@ bool TRic_archivi::leggi_marker()
return error_box(FR("File marker non presente in %s: impossibile proseguire"), (const char*)_pathname); return error_box(FR("File marker non presente in %s: impossibile proseguire"), (const char*)_pathname);
} }
const int size = 64; const size_t size = 64;
TString80 buffer; TString80 buffer;
FILE* i = fopen(_marker,"r+t"); // Perche' non semplicemente "rb"? FILE* i = fopen(_marker,"r+t"); // Perche' non semplicemente "rb"?
@ -179,14 +179,19 @@ bool TRic_archivi::leggi_marker()
const size_t letti = fread(buffer.get_buffer(),1,size,i); const size_t letti = fread(buffer.get_buffer(),1,size,i);
fclose(i); fclose(i);
if (letti < size) if (letti < size)
return error_box(TR("Errore di lettura del MARKER: impossibile proseguire")); {
if (letti < 34)
return error_box(TR("Errore di lettura del MARKER: lunghezza diversa da 64"));
else
warning_box(TR("Errore di lettura del MARKER: lunghezza diversa da 64"));
}
_progdisk = atoi(buffer.sub(31,33)); _progdisk = atoi(buffer.sub(31,33));
_numtotdisk = atoi(buffer.sub(29,31)); _numtotdisk = atoi(buffer.sub(29,31));
if (_numtotdisk == 0) if (_numtotdisk == 0)
{ {
message_box(TR("Il numero totale dischi su marker non e' significativo: impossibile proseguire")); message_box(TR("Il numero totale dischi su marker non è significativo: impossibile proseguire"));
return false; return false;
} }
@ -209,9 +214,11 @@ bool TRic_archivi::leggi_marker()
_totrectras = atol(buffer.sub(23,29)); _totrectras = atol(buffer.sub(23,29));
if (_numdisk > 1) //Va fatto solo dal disco 2 in poi if (_numdisk > 1) //Va fatto solo dal disco 2 in poi
if (_nomeid != _nomeidp || _dittainv != _dittainvp || _totrectras != _totrectrasp {
|| _numinv != _numinvp || _datatras != _datatrasp) if (_nomeid != _nomeidp || _dittainv != _dittainvp || _totrectras != _totrectrasp ||
_numinv != _numinvp || _datatras != _datatrasp)
return error_box(FR("I dati del marker del disco %d, non corrispondono ai dati del marker del disco 1"), _numdisk); return error_box(FR("I dati del marker del disco %d, non corrispondono ai dati del marker del disco 1"), _numdisk);
}
_nomeidp = _nomeid; _nomeidp = _nomeid;
_dittainvp = _dittainv; _dittainvp = _dittainv;
@ -226,7 +233,7 @@ bool TRic_archivi::leggi_marker()
if (_dittaric != 0) if (_dittaric != 0)
{ {
if (!prefix().exist(_dittaric)) if (!prefix().exist(_dittaric))
return error_box(FR("Libreria archivi ditta %ld non presente su disco"), _dittaric); return error_box(FR("Archivi ditta %ld non presente su disco"), _dittaric);
} }
else else
return error_box(FR("Codici NON PRESENTI in tabella ricezione:\ncaricare %s %ld e riprovare"), return error_box(FR("Codici NON PRESENTI in tabella ricezione:\ncaricare %s %ld e riprovare"),

View File

@ -1919,7 +1919,7 @@ TImporto TPartita::calcola_saldo_al(bool valuta,const TDate& al, const TDate & d
} }
real TPartita::calcola_scaduto_al(bool valuta,const TDate& al) const real TPartita::calcola_scaduto_al(bool valuta, const TDate& al) const
{ {
const int ultima = last(); const int ultima = last();
if (ultima > 0) if (ultima > 0)