Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :


git-svn-id: svn://10.65.10.50/trunk@20611 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2010-06-22 09:36:11 +00:00
parent 4606bde1e0
commit b93d973499
3 changed files with 120 additions and 127 deletions

@ -130,6 +130,18 @@ void TFatturazione_bolle::elabora_riga(TRiga_documento& r, TDocumento& doc_out,
if (rin.is_attrezzatura() || rin.is_risorsa())
rin.cost2revenue();
const bool delete_spese_aut = r.doc().tipo().spese_aut() && doc_out.rows() > 0;
if (delete_spese_aut)
{
if (rin.is_generata() && rin.get("GENTIPO").empty() && rin.is_spese())
{
const TSpesa_prest& sp = rin.spesa();
if (sp.tipo() == 'P')
return;
}
} //if(delete_spese_aut)..
if (usa_dcons)
{
TDate data_cons = rin.get(RDOC_DATACONS);
@ -185,14 +197,11 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
}
#endif
// TTipo_documento tf(tipo_finale());
const TDate dcons = doc_in.get_date(DOC_DATACONS);
const TDate ddoc = doc_out.get_date(DOC_DATADOC);
const bool usa_dcons = usa_data_consegna();
const int doc_out_rows = doc_out.physical_rows();
const bool delete_spese_aut = doc_in.tipo().spese_aut() && doc_out_rows() > 0;
if (usa_dcons)
{
bool da_elaborare = FALSE;
@ -205,9 +214,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
}
if (!da_elaborare)
return FALSE;
}
//***vecchio posto cambio stato
}
if (gestione_riferimenti())
{
@ -226,8 +233,8 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
rout.forza_sola_descrizione();
rout.put(RDOC_DESCR, dest);
}
}
}
} //if(indsped)...
} //if(change_clifo)...
// Determina ed eventualmente crea la riga di riferimento
const bool rif_testa = riferimenti_in_testa();
@ -293,7 +300,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
rout.put(RDOC_DESCLUNGA, true);
}
}
else
else //else if(rif_packed)...
{
if (rout.get(RDOC_DESCR).empty())
rout.put(RDOC_DESCR, riferimento);
@ -306,59 +313,15 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
memo << '\n' << riferimento;
rout.put(RDOC_DESCEST, memo);
}
}
}
} //if(rif_packed)..
} //if(gestione_riferimenti)...
const bool ignora_desc = ignora_descrizioni() && !doc_in.clifor().vendite().get_bool(CFV_RIFDOC);;
const bool ignora_desc = ignora_descrizioni() && !doc_in.clifor().vendite().get_bool(CFV_RIFDOC);
TToken_string campi_riga(80);
campi_raggruppamento_righe(campi_riga);
const bool ragg_rig = campi_riga.full();
for (int r = 1; r <= doc_in.physical_rows(); r++)
{
TRiga_documento & rin = doc_in[r];
const bool rindesc = rin.sola_descrizione(); // La riga di input e' descrittiva
if (ignora_desc && rindesc)
continue;
if (delete_spese_aut)
{
if (rin.is_generata() && rin.get("GENTIPO").empty() && rin.is_spese())
{
const TSpesa_prest & sp = rin.spesa();
if (sp.tipo() == 'P')
continue;
}
}
if (usa_dcons)
{
TDate data_cons = rin.get(RDOC_DATACONS);
if (!data_cons.ok())
data_cons = dcons;
if (ddoc < data_cons || rin.get_bool(RDOC_RIGAEVASA))
continue;
const TString& q = rin.get(RDOC_QTA);
rin.put(RDOC_QTAEVASA, q);
rin.put(RDOC_RIGAEVASA, true);
}
bool elaborata = false;
// Raggruppo le righe se e' settato il flag di raggruppamento e
// se la riga non contiene solo una descrizione
if (ragg_rig && !rindesc) // Se devo raggruppare le righe ...
{
const int last = doc_out.physical_rows();
for (int o = 1; o <= last; o++) // ... cerca una riga compatibile
{
TRiga_documento& rout = doc_out[o];
if (rout.sola_descrizione()) // Ignora le righe descrittive
continue;
FOR_EACH_PHYSICAL_RDOC(doc_in, r, rin)
FOR_EACH_PHYSICAL_RDOC(doc_in, r, rin)
elabora_riga(*rin, doc_out, usa_dcons, ragg_rig, ignora_desc, campi_riga, dcons, ddoc);
//cambio stato documento
@ -386,7 +349,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
if (usa_dcons)
doc_in.rewrite();
return TRUE;
return true;
}
bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,

@ -1514,7 +1514,7 @@ error_type TContabilizzazione::compile_head_mov_re(TDocumento& doc)
if (!short_rif)
{
doc.riferimento(descr);
if (descr.empty()) descr = tipo.descrizione();
if (descr.empty()) descr = doc.tipo().descrizione();
if (descr.full())
descr << ' ';
}

@ -19,7 +19,7 @@ protected:
public:
void doc2mask(const TDocumento& doc, const TString & articolo);
TConsegna_mask(int header_code = 0, bool per_codice = false, bool ignora_descrizioni = false);
TConsegna_mask(TConfig & c,int header_code = 0, bool per_codice = false, bool ignora_descrizioni = false);
virtual ~TConsegna_mask() { }
};
@ -169,6 +169,7 @@ void TConsegna_mask::doc2mask(const TDocumento& doc, const TString & articolo)
TSheet_field& s = sfield(F_ROWS);
s.destroy();
const int rows = doc.physical_rows();
int rowno = 0;
for (int i = 0; i < rows; i++)
{
const TRiga_documento& rec = doc[i+1];
@ -189,8 +190,8 @@ void TConsegna_mask::doc2mask(const TDocumento& doc, const TString & articolo)
r.add(" "); // Da evadere
if (evasa)
{
s.disable_cell(i, -1); // Disbilita tutta la riga ...
s.enable_cell(i, 0); // ... tranne il flag di consegna
s.disable_cell(rowno, -1); // Disbilita tutta la riga ...
s.enable_cell(rowno, 0); // ... tranne il flag di consegna
r.add("X"); // La considera evasa
}
else
@ -211,13 +212,14 @@ void TConsegna_mask::doc2mask(const TDocumento& doc, const TString & articolo)
r.add(rec.get(RDOC_NRIGA),s.cid2index(S_NUMRIGA));
r.add(rec.get(RDOC_CODAGG1),s.cid2index(S_CODAGG1));
r.add(rec.get(RDOC_CODAGG2),s.cid2index(S_CODAGG2));
rowno++;
}
}
if (_ordina_per_codice)
s.sort(rows_sort_func);
}
TConsegna_mask::TConsegna_mask(int header_code, bool per_codice, bool ignora_descrizioni)
TConsegna_mask::TConsegna_mask(TConfig & c, int header_code, bool per_codice, bool ignora_descrizioni)
: TAutomask("velib04d") , _ordina_per_codice(per_codice), _doc(NULL),
_ignora_descrizioni(ignora_descrizioni)
{
@ -248,8 +250,6 @@ TConsegna_mask::TConsegna_mask(int header_code, bool per_codice, bool ignora_des
s.sheet_mask().field(S_QTADAEVADERE).set_prompt("Da evadere ");
}
TConfig c(CONFIG_DITTA, "ve");
if (c.exist("CODAGG1"))
{
TString80 codagg1 = c.get("CODAGG1");
@ -327,7 +327,9 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o
const int header_code = intestazioni_sheet();
TConsegna_mask m(header_code, ordina_per_codice(), get_bool("B3"));
TConfig c(CONFIG_DITTA, "ve");
const bool ordina_per_doc = c.get_bool("ORDINA_PER_DOC", "ve", -1, true);
TConsegna_mask m(c, header_code, ordina_per_codice(), get_bool("B3"));
const int items_max = items_in > items_out ? items_in : items_out;
@ -362,39 +364,27 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o
if (rout.get_bool(RDOC_DESCLUNGA))
memo << rout.get(RDOC_DESCEST);
// Costruisce la stringa di riferimento
TString riferimento;
indoc.riferimento(riferimento);
if (riferimento.empty())
riferimento = indoc.tipo().descrizione();
TString80 nrif = indoc.get(DOC_NUMDOCRIF);
if (nrif.blank())
nrif = indoc.get(DOC_DOC1);
if (nrif.blank())
nrif = indoc.get(DOC_DOC2);
if (nrif.blank())
nrif = indoc.get(DOC_DOC3);
if (usa_doc_rif() && nrif.full())
{
riferimento << " n. " << nrif;
riferimento << " del " << indoc.get(DOC_DATADOCRIF);
}
else
{
riferimento << " n. " << indoc.numero();
riferimento << " del " << indoc.data().string();
}
if (memo.full())
memo << '\n';
memo << riferimento;
TString rifrow(indoc.tipo().descrizione());
TString rifext;
indoc.riferimento(rifext);
const int posrif = rifext.find("[RIF]");
if (rifext.full() && posrif < 0)
{
rifrow = rifext;
rifext.cut(0);
}
const TString4 numrif = num_riferimenti_in();
if (numrif.full())
{
riferimento.cut(0);
{
TSheet_field& s = m.sfield(F_ROWS);
TAssoc_array doc_rows;
TString riferimenti;
FOR_EACH_SHEET_ROW(s, n, row)
{
@ -451,35 +441,71 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o
rif << " n. " << d.numero();
rif << " del " << d.data().string();
}
riferimento << rif << '\n';
}
if (riferimenti.full())
riferimenti << '\n';
riferimenti << rif; }
doc_rows.add(doc_key);
}
}
}
}
memo.insert(riferimento);
}
memo.insert(riferimenti);
}
TString80 nrif = indoc.get(DOC_NUMDOCRIF);
if (nrif.blank())
nrif = indoc.get(DOC_DOC1);
if (nrif.blank())
nrif = indoc.get(DOC_DOC2);
if (nrif.blank())
nrif = indoc.get(DOC_DOC3);
if (usa_doc_rif() && nrif.full())
{
rifrow << " n. " << nrif;
rifrow << " del " << indoc.get(DOC_DATADOCRIF);
}
else
{
rifrow << " n. " << indoc.numero();
rifrow << " del " << indoc.data().string();
}
if (memo.full())
memo << '\n';
if (rifext.blank())
memo << rifrow;
else
{
if (posrif >= 0)
{
int i ;
for (i = 0; rifext[posrif + i + 5] != '\0'; i++)
rifext[posrif + i] = rifext[posrif + i + 5];
rifext[posrif + i] = '\0';
rifext.insert(rifrow, posrif);
}
memo << rifext;
}
rout.put(RDOC_DESCLUNGA, memo.len() > 50);
rout.put(RDOC_DESCR, memo.left(50));
rout.put(RDOC_DESCEST, memo.mid(50));
rout.put("RIFR", "X");
}
TToken_string campi_riga(80);
const bool ragg_rig = raggruppa_righe();
if (ragg_rig)
{
campi_riga = "CODART|LIVELLO|UMQTA"; // Uguali sempre
// Uguali opzionalmente
if (riga_uguale(0)) campi_riga.add("CODMAG");
if (riga_uguale(1)) campi_riga.add("CODIVA");
if (riga_uguale(2)) campi_riga.add("PREZZO|SCONTO");
}
rout.put(RDOC_DESCLUNGA, memo.len() > 50);
rout.put(RDOC_DESCR, memo.left(50));
rout.put(RDOC_DESCEST, memo.mid(50));
}
TToken_string campi_riga(80);
const bool ragg_rig = raggruppa_righe();
if (ragg_rig)
{
campi_riga = "CODART|LIVELLO|UMQTA"; // Uguali sempre
// Uguali opzionalmente
if (riga_uguale(0)) campi_riga.add("CODMAG");
if (riga_uguale(1)) campi_riga.add("CODIVA");
if (riga_uguale(2)) campi_riga.add("PREZZO|SCONTO");
}
const bool evadi = outdoc.tipo().da_evadere();
const bool evadi = outdoc.tipo().da_evadere();
TAssoc_array scarti;
TSheet_field& s = m.sfield(F_ROWS);
@ -490,7 +516,7 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o
{
TRiga_documento& inrec = indoc[r];
const real daeva = row->get(S_QTADAEVADERE - FIRST_FIELD);
const bool eva = row->get_char(S_RIGAEVASA-FIRST_FIELD) > ' ';
const bool eva = row->get_char(S_RIGAEVASA - FIRST_FIELD) > ' ';
if (evadi && (daeva > ZERO || eva))
{
const char* fqe = inrec.field_qtaevasa();
@ -562,16 +588,20 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o
if (!elaborata) // Se la riga non e' stata gia' sommata ...
{
int j = outdoc.physical_rows();
TToken_string key = inrec.get_rdoc_key();
key.add("",4);
for (; j >= 1; j--)
{
TToken_string keyrow = outdoc[j].get_original_rdoc_key();
keyrow.add("",4);
if (ordina_per_doc)
{
TToken_string key = inrec.get_rdoc_key();
if (key == keyrow)
break;
key.add("",4);
for (; j >= 1; j--)
{
TToken_string keyrow = outdoc[j].get_original_rdoc_key();
keyrow.add("",4);
if (key == keyrow)
break;
}
}
const TString4 tiporiga = inrec.get(RDOC_TIPORIGA);
TRiga_documento& outrec = j < 1 || j >= outdoc.physical_rows() ? outdoc.new_row(tiporiga) : outdoc.insert_row(j + 1, tiporiga);
@ -634,7 +664,7 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o
}
}
const int last_row = outdoc.physical_rows();
if (gestione_riferimenti() && j > 0 && last_row > 0 && outdoc[last_row].tipo().tipo() == RIGA_DESCRIZIONI)
if (gestione_riferimenti() && j > 0 && last_row > 0 && outdoc[last_row].tipo().tipo() == RIGA_DESCRIZIONI && outdoc[last_row].get("RIFR").full())
outdoc.destroy_row(last_row, true);
}
}