Patch level :10.0 1000!!
Files correlati : Ricompilazione Demo : [ ] Commento : Aggiunta trattazione al rendiconto delle parcelle che, in base allo stato, devono essere considerate come bolle o fatture. git-svn-id: svn://10.65.10.50/branches/R_10_00@22125 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
b3a87f898d
commit
ce2750e446
@ -111,7 +111,7 @@ void TConf_Analitica::config_loader(TSheet_field& sf, TConfig& config, TString4
|
||||
row.add(num_doc.get(0));
|
||||
row.add("");
|
||||
row.add(num_doc.get(1));
|
||||
if (tipo == "ND")
|
||||
if (tipo == "ND" || tipo == "PA")
|
||||
{
|
||||
row.add(num_doc.get(2));
|
||||
row.add(num_doc.get(3));
|
||||
@ -135,7 +135,7 @@ void TConf_Analitica::config_setter(TSheet_field& sf, TConfig& config, TString4
|
||||
{
|
||||
TToken_string num_doc;
|
||||
num_doc.add(row->get(0));
|
||||
if (tipo == "ND")
|
||||
if (tipo == "ND" || tipo == "PA")
|
||||
{
|
||||
num_doc.add(row->get(2));
|
||||
num_doc.add(row->get(3));
|
||||
@ -150,6 +150,7 @@ bool TConf_Analitica::preprocess_config (TMask& mask, TConfig& config)
|
||||
config_loader(mask.sfield(F_RIGHE_NUM), config, "ND");
|
||||
config_loader(mask.sfield(F_RIGHE_FDR), config, "NF");
|
||||
config_loader(mask.sfield(F_RIGHE_RER), config, "RR");
|
||||
config_loader(mask.sfield(F_RIGHE_PAR), config, "PA");
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -158,6 +159,7 @@ bool TConf_Analitica::postprocess_config (TMask& mask, TConfig& config)
|
||||
config_setter(mask.sfield(F_RIGHE_NUM), config, "ND");
|
||||
config_setter(mask.sfield(F_RIGHE_FDR), config, "NF");
|
||||
config_setter(mask.sfield(F_RIGHE_RER), config, "RR");
|
||||
config_setter(mask.sfield(F_RIGHE_PAR), config, "PA");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -49,9 +49,11 @@
|
||||
#define F_PDCREQ 143
|
||||
#define F_SEZRIF 144
|
||||
|
||||
//pagina con le regole del rendiconto
|
||||
#define F_RIGHE_NUM 170
|
||||
#define F_RIGHE_FDR 171
|
||||
#define F_RIGHE_RER 172
|
||||
#define F_RIGHE_PAR 173
|
||||
|
||||
//elementi dello sheet dei documenti da escludere dal rendiconto
|
||||
#define SN_CODNUM 101
|
||||
@ -66,4 +68,9 @@
|
||||
|
||||
//elementi dello sheet delle causali per ratei e risconti
|
||||
#define SR_CODNUM 101
|
||||
#define SR_DESCR 102
|
||||
#define SR_DESCR 102
|
||||
|
||||
//elementi dello sheet degli stati numerazione parcella
|
||||
#define SP_CODNUM 101
|
||||
#define SP_DESCR 102
|
||||
#define SP_STATOFATT 103
|
||||
|
@ -405,14 +405,14 @@ END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Regole rendiconto" -1 -1 78 20
|
||||
PAGE "Regole rendiconto" -1 -1 78 23
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 1 1 "@bNumerazioni documenti da escludere nel rendiconto"
|
||||
END
|
||||
|
||||
SPREADSHEET F_RIGHE_NUM -1 4
|
||||
SPREADSHEET F_RIGHE_NUM -1 3
|
||||
BEGIN
|
||||
PROMPT 1 2 ""
|
||||
ITEM "Numerazione"
|
||||
@ -424,28 +424,41 @@ END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 1 7 "@bNumerazioni documenti per le fatture da ricevere nel rendiconto"
|
||||
PROMPT 1 6 "@bNumerazioni documenti per le fatture da ricevere nel rendiconto"
|
||||
END
|
||||
|
||||
SPREADSHEET F_RIGHE_FDR -1 4
|
||||
SPREADSHEET F_RIGHE_FDR -1 3
|
||||
BEGIN
|
||||
PROMPT 1 8 ""
|
||||
PROMPT 1 7 ""
|
||||
ITEM "Numerazione"
|
||||
ITEM "Descrizione@50"
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 1 13 "@bCausali per ratei e risconti"
|
||||
PROMPT 1 11 "@bCausali per ratei e risconti"
|
||||
END
|
||||
|
||||
SPREADSHEET F_RIGHE_RER -1 4
|
||||
SPREADSHEET F_RIGHE_RER -1 3
|
||||
BEGIN
|
||||
PROMPT 1 14 ""
|
||||
PROMPT 1 12 ""
|
||||
ITEM "Causale"
|
||||
ITEM "Descrizione@50"
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 1 16 "@bRegole su numerazioni Parcella"
|
||||
END
|
||||
|
||||
SPREADSHEET F_RIGHE_PAR -1 3
|
||||
BEGIN
|
||||
PROMPT 1 17 ""
|
||||
ITEM "Numerazione"
|
||||
ITEM "Descrizione@50"
|
||||
ITEM "Stato fattura"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
@ -522,7 +535,7 @@ ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "Riga numerazione per fatture da ricevere" -1 -1 78 8
|
||||
PAGE "Riga numerazione per fatture da ricevere" -1 -1 78 4
|
||||
|
||||
STRING SF_CODNUM 4
|
||||
BEGIN
|
||||
@ -540,7 +553,7 @@ END
|
||||
|
||||
STRING SF_DESCR 50
|
||||
BEGIN
|
||||
PROMPT 1 3 "Descrizione "
|
||||
PROMPT 1 2 "Descrizione "
|
||||
USE %NUM KEY 2
|
||||
INPUT S0 SF_DESCR
|
||||
DISPLAY "Descrizione@50" S0
|
||||
@ -571,7 +584,7 @@ ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "Riga causali per ratei e risconti" -1 -1 78 8
|
||||
PAGE "Riga causali per ratei e risconti" -1 -1 78 4
|
||||
|
||||
STRING SR_CODNUM 4
|
||||
BEGIN
|
||||
@ -588,7 +601,7 @@ END
|
||||
|
||||
STRING SR_DESCR 50
|
||||
BEGIN
|
||||
PROMPT 1 3 "Descrizione "
|
||||
PROMPT 1 2 "Descrizione "
|
||||
USE LF_CAUSALI
|
||||
KEY 2
|
||||
SELECT MOVIND!=''
|
||||
@ -620,3 +633,58 @@ END
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "Riga numerazioni di tipo Parcella" -1 -1 78 6
|
||||
|
||||
STRING SP_CODNUM 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "Codice numerazione "
|
||||
USE %NUM
|
||||
CHECKTYPE REQUIRED
|
||||
INPUT CODTAB SP_CODNUM
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT SP_CODNUM CODTAB
|
||||
OUTPUT SP_DESCR S0
|
||||
KEY 1
|
||||
FLAGS "UZ"
|
||||
END
|
||||
|
||||
STRING SP_DESCR 50
|
||||
BEGIN
|
||||
PROMPT 1 2 "Descrizione "
|
||||
USE %NUM KEY 2
|
||||
INPUT S0 SP_DESCR
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
COPY OUTPUT SP_CODNUM
|
||||
END
|
||||
|
||||
STRING SP_STATOFATT 1
|
||||
BEGIN
|
||||
PROMPT 1 3 "Stato da cui considerare il documento come fattura "
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -13 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 10 2
|
||||
BEGIN
|
||||
PROMPT -23 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 10 2
|
||||
BEGIN
|
||||
PROMPT -33 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
@ -331,6 +331,7 @@ class TPrint_rendiconto_ca_recordset : public TISAM_recordset
|
||||
TString _prefix;
|
||||
TAssoc_array _ratrisc;
|
||||
TString_array _num_fdr;
|
||||
TString_array _num_par;
|
||||
TRiclass _ricl;
|
||||
|
||||
protected:
|
||||
@ -360,7 +361,8 @@ protected:
|
||||
int sort_indbil(int indbil) const;
|
||||
const TString& riclassifica(const TBill& zio, TRectype& tmpcurr) const;
|
||||
const TString& riclassifica(const TString& contone, TRectype& tmpcurr) const;
|
||||
bool is_causale_rateo_risconto(const char* codcaus);
|
||||
bool is_causale_rateo_risconto(const char* codcaus) const;
|
||||
int ricava_tipo_documento (const TDocumento& doc) const;
|
||||
|
||||
public: //da libreria
|
||||
virtual const TVariant& get(const char* column_name) const;
|
||||
@ -400,6 +402,15 @@ TPrint_rendiconto_ca_recordset::TPrint_rendiconto_ca_recordset(const TString& sq
|
||||
break;
|
||||
_num_fdr.add(codfdr);
|
||||
}
|
||||
|
||||
//TString_array contenente le numerazioni delle parcelle e lo stato da cui considerarle fatture
|
||||
for (int j = 0;;j++)
|
||||
{
|
||||
TToken_string num_par(config.get("PA", NULL, j)); //scansione delle righe PA(i)=.. sul paragrafo di configurazione CA
|
||||
if (num_par.empty_items())
|
||||
break;
|
||||
_num_par.add(num_par);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -712,11 +723,39 @@ static int bill2indbil(const TString& codconto, bool is_anal)
|
||||
}
|
||||
|
||||
//controlla se la causale passata e' di tipo rateo/risconto
|
||||
bool TPrint_rendiconto_ca_recordset::is_causale_rateo_risconto(const char* codcaus)
|
||||
bool TPrint_rendiconto_ca_recordset::is_causale_rateo_risconto(const char* codcaus) const
|
||||
{
|
||||
return _ratrisc.objptr(codcaus) != NULL;
|
||||
}
|
||||
|
||||
int TPrint_rendiconto_ca_recordset::ricava_tipo_documento (const TDocumento& doc) const
|
||||
{
|
||||
int tipo_documento = doc.tipo_riclassificato();
|
||||
|
||||
if (tipo_documento == TTipo_documento::_fattura)
|
||||
{
|
||||
//attenzione! se il documento fosse una ignorantissima parcella, il tipo documento verrebbe..
|
||||
//..deciso in base allo stato del documento stesso, secondo la regola data nella configurazione del..
|
||||
//..rendiconto
|
||||
const TString4 codnum = doc.numerazione();
|
||||
const TString4 stato = doc.get(DOC_STATO);
|
||||
|
||||
FOR_EACH_ARRAY_ROW(_num_par, r, riga)
|
||||
{
|
||||
const TString4 par_codnum = riga->get(0);
|
||||
if (par_codnum == codnum)
|
||||
{
|
||||
const TString4 par_stato = riga->get(1);
|
||||
if (stato < par_stato)
|
||||
tipo_documento = TTipo_documento::_bolla;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return tipo_documento;
|
||||
}
|
||||
|
||||
//compila i campi del file temporaneo che sara' poi stampato
|
||||
void TPrint_rendiconto_ca_recordset::scrive_riga(TLocalisamfile& tmp, const TRectype& rmovana, const TRectype& movana,
|
||||
const TDocumento* doc, TLog_report& log)
|
||||
@ -790,16 +829,16 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(TLocalisamfile& tmp, const TRec
|
||||
#endif
|
||||
|
||||
//serve un documento da cui ricavare i parametri di stampa
|
||||
TDocumento* newdoc = (TDocumento*)doc;
|
||||
TDocumento* original_doc = (TDocumento*)doc;
|
||||
bool should_delete = false;
|
||||
if (newdoc == NULL && movana.get_long(MOVANA_DNDOC) > 0)
|
||||
if (original_doc == NULL && movana.get_long(MOVANA_DNDOC) > 0)
|
||||
{
|
||||
const TString4 dacodnum = movana.get(MOVANA_DCODNUM);
|
||||
newdoc = new TDocumento('D', movana.get_int(MOVANA_DANNO), dacodnum, movana.get_long(MOVANA_DNDOC));
|
||||
original_doc = new TDocumento('D', movana.get_int(MOVANA_DANNO), dacodnum, movana.get_long(MOVANA_DNDOC));
|
||||
should_delete = true; //settato true per cancellare il doc al termine del metodo(sennò addio memoria!)
|
||||
}
|
||||
|
||||
const bool dadoc = newdoc != NULL;
|
||||
const bool dadoc = original_doc != NULL;
|
||||
//i movimenti possono essere normali o generati da documento...
|
||||
if (dadoc) //movimento generato da documento
|
||||
{
|
||||
@ -807,7 +846,7 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(TLocalisamfile& tmp, const TRec
|
||||
tmpcurr.put("CODNUM", codnum); //codnum del documento che origina il movana
|
||||
tmpcurr.put("ANNO", movana.get(MOVANA_DANNO)); //anno del doc di origine
|
||||
tmpcurr.put("NUMRD", movana.get(MOVANA_DNDOC)); //numero del doc che origina movana
|
||||
tmpcurr.put("DATA", newdoc->get(DOC_DATADOC)); //data del documento che genera movana..
|
||||
tmpcurr.put("DATA", original_doc->get(DOC_DATADOC)); //data del documento che genera movana..
|
||||
} //..non esiste il campo in movana
|
||||
else //movimento normale (senza documento)
|
||||
{
|
||||
@ -821,25 +860,26 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(TLocalisamfile& tmp, const TRec
|
||||
const int anno_caus = movana.get_date(MOVANA_DATAREG).year();
|
||||
const TCausale caus(movana.get(MOVANA_CODCAUS), anno_caus); //la causale serve un po' ovunque...
|
||||
|
||||
//caso in cui il movimento derivi da un documento
|
||||
//ricerca del mitico documento padre della riga documento attuale!
|
||||
if (newdoc != NULL)
|
||||
if (original_doc != NULL)
|
||||
{
|
||||
tmpcurr.put("NUMDOCRIF", newdoc->get(DOC_NUMDOCRIF)); //docrif del documento originante il movana
|
||||
tmpcurr.put("DATADOCRIF", newdoc->get(DOC_DATADOCRIF)); //datadocrif del documento originante il movana
|
||||
tmpcurr.put("NUMDOCRIF", original_doc->get(DOC_NUMDOCRIF)); //docrif del documento originante il movana
|
||||
tmpcurr.put("DATADOCRIF", original_doc->get(DOC_DATADOCRIF)); //datadocrif del documento originante il movana
|
||||
|
||||
//procedura per ottenere i campi del documento
|
||||
//deve tener conto del vero tipo del documento,nel caso sia classificato come _altro;in questo
|
||||
int tipo_babbo = TTipo_documento::_altro;
|
||||
//deve tener conto del vero tipo del documento,nel caso sia classificato come _altro; in questo..
|
||||
//..caso si deve accorgere se e' in realta' una bolla o una fattura (utilizza la tipo_riclassificato())
|
||||
const int tipo_documento = newdoc->tipo_riclassificato();
|
||||
int tipo_babbo = TTipo_documento::_altro;
|
||||
const int tipo_documento = ricava_tipo_documento(*original_doc);
|
||||
|
||||
TToken_string riferimento(20, '\n'); //tokenstring su cui scrivere gli estremi dei docs padri (se li trova!)
|
||||
TString80 rif; //stringa di lavoro su cui viene scritto un doc originale
|
||||
const int rows = newdoc->physical_rows(); //righe del doc attuale
|
||||
const int rows = original_doc->physical_rows(); //righe del doc attuale
|
||||
|
||||
for (int i = 1; i <= rows; i++) //scandisce tutte le righe del doc..
|
||||
{
|
||||
const TRiga_documento& riga = (*newdoc)[i];
|
||||
const TRiga_documento& riga = (*original_doc)[i];
|
||||
//commessa e fase della riga documento
|
||||
const TString codcms_rigadoc = riga.codice_commessa();
|
||||
const TString codfase_rigadoc = riga.fase_commessa();
|
||||
@ -966,7 +1006,7 @@ F=IMF*/
|
||||
break;
|
||||
}
|
||||
|
||||
} //if(newdoc != NULL)
|
||||
} //if(original_doc != NULL)
|
||||
else //movimenti puri di analitica (no documento di origine!)
|
||||
{
|
||||
if (is_causale_rateo_risconto(caus.codice())) //movimenti con causali "rateo/risconto"
|
||||
@ -979,7 +1019,7 @@ F=IMF*/
|
||||
selettore |= MATURATO;
|
||||
selettore |= IMPEGNATO;
|
||||
}
|
||||
} //if(newdoc != NULL)
|
||||
} //if(original_doc != NULL)
|
||||
|
||||
//riempie i record del file temporaneo nel caso di rmovana con documento di origine
|
||||
char sezione = rmovana.get_char(RMOVANA_SEZIONE);
|
||||
@ -1014,9 +1054,9 @@ F=IMF*/
|
||||
}
|
||||
else
|
||||
{ //iva errata -> non ha causali -> cerca di capire se cliente o fornitore
|
||||
if (newdoc != NULL)
|
||||
if (original_doc != NULL)
|
||||
{
|
||||
if (newdoc->get_char(DOC_TIPOCF) == 'C')
|
||||
if (original_doc->get_char(DOC_TIPOCF) == 'C')
|
||||
sezione_normale = 'A';
|
||||
else
|
||||
sezione_normale = 'D';
|
||||
@ -1070,7 +1110,7 @@ F=IMF*/
|
||||
tmpcurr.put("CODFASE", rmovana.get(RMOVANA_CODFASE)); //codice fase
|
||||
|
||||
if (should_delete)
|
||||
delete newdoc;
|
||||
delete original_doc;
|
||||
|
||||
//I movimenti di budget (preventivi e variazioni) vanno nascosti nei body!!! Devono essere considerati in..
|
||||
//..quanto servono per sapere quali conti sono stati movimentati per i budget, in modo che per ogni conto..
|
||||
|
@ -2344,7 +2344,7 @@ bool TAnal_mov::save_saldi(const int annoes)
|
||||
saldi.put(SALDANA_FASE, key.get(4));
|
||||
saldi.put(SALDANA_CONTO, key.get(5));
|
||||
|
||||
int err = saldi.read(_isequal, _testandlock);
|
||||
int err = saldi.read(_isequal, _lock);
|
||||
if (err != NOERR)
|
||||
{
|
||||
//Richiesta specifica del nostro Fuhrer! I saldi appartenenti ad esercizi futuri NON ancora aperti vanno..
|
||||
@ -2359,6 +2359,8 @@ bool TAnal_mov::save_saldi(const int annoes)
|
||||
saldi.put(SALDANA_FASE, key.get(4));
|
||||
saldi.put(SALDANA_CONTO, key.get(5));
|
||||
err = saldi.write();
|
||||
if (err != NOERR)
|
||||
cantwrite_box(saldi.name());
|
||||
}
|
||||
// else
|
||||
// continue; // NON devo dare errori fuorvianti causa saldi nel futuro che ci saranno ma non vanno scritti
|
||||
|
Loading…
x
Reference in New Issue
Block a user