Corretto calcolo colonne stampa bolle di lavanderia

git-svn-id: svn://10.65.10.50/branches/R_10_00@23108 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2015-06-09 09:20:50 +00:00
parent 89918b05cd
commit d654c82c04
2 changed files with 63 additions and 59 deletions

View File

@ -16,11 +16,11 @@ class TRiepBolle_recordset: public TCSV_recordset
TArray _max_cli_col; TArray _max_cli_col;
public: public:
void first_loop() { _loop = 0;} void first_loop() { _loop = 0; }
void prev_loop() { --_loop;} void prev_loop() { --_loop; }
void next_loop() { ++_loop;} void next_loop() { ++_loop; }
void set_loop(int l) { _loop = l;} void set_loop(int l) { _loop = l; }
unsigned int loops() const { return (_max_column - 4 )/_lst_column + 1; } unsigned int loops() const { return (_max_column-5)/_lst_column + 1; }
unsigned int get_curr_max_column() const ; unsigned int get_curr_max_column() const ;
void set_max_column(unsigned int column); void set_max_column(unsigned int column);
virtual const TVariant& get(unsigned int column) const; virtual const TVariant& get(unsigned int column) const;
@ -32,31 +32,32 @@ void TRiepBolle_recordset::set_max_column(unsigned int column)
{ {
const long codcli = get(0).as_int(); const long codcli = get(0).as_int();
if (_max_column < column) _max_column = column; if (_max_column < column)
real * r = (real *) _max_cli_col.objptr(codcli); _max_column = column;
real* r = (real *) _max_cli_col.objptr(codcli);
if (r == NULL) if (r == NULL)
{ {
r = new real; r = new real;
_max_cli_col.add(r, codcli); _max_cli_col.add(r, codcli);
} }
if ((unsigned int )r->integer() < column) *r = column; if ((unsigned int)r->integer() < column)
*r = column;
} }
unsigned int TRiepBolle_recordset::get_curr_max_column() const unsigned int TRiepBolle_recordset::get_curr_max_column() const
{ {
const long codcli = get(0).as_int(); const long codcli = get(0).as_int();
real * r = (real *) _max_cli_col.objptr(codcli); const real* r = (const real*)_max_cli_col.objptr(codcli);
return r == NULL ? 0 : (int) r->integer(); return r == NULL ? 0u : (unsigned int)r->integer();
} }
const TVariant& TRiepBolle_recordset::get(unsigned int column) const const TVariant& TRiepBolle_recordset::get(unsigned int column) const
{ {
static TVariant __s(""); if (column < 4)
if (column < 4) return TCSV_recordset::get(column);
return TCSV_recordset::get( column);
if (column + _loop * _lst_column >= get_curr_max_column()) if (column + _loop * _lst_column >= get_curr_max_column())
return __s; return NULL_VARIANT;
return TCSV_recordset::get(column + _loop * _lst_column); return TCSV_recordset::get(column + _loop * _lst_column);
} }
@ -64,8 +65,9 @@ class TRiepBolle_mask: public TAutomask
{ {
protected: protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public: public:
TRiepBolle_mask():TAutomask("lv2700a"){} TRiepBolle_mask() : TAutomask("lv2700a") {}
}; };
bool TRiepBolle_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TRiepBolle_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
@ -101,16 +103,15 @@ public:
bool TRiepBolle_report::get_usr_val(const TString& name, TVariant& var) const bool TRiepBolle_report::get_usr_val(const TString& name, TVariant& var) const
{ {
if (name == "#TOT") if (name == "#TOT")
{ {
TRecordset* recset = recordset(); TRecordset* recset = recordset();
if (recset != NULL) if (recset != NULL)
{ {
TVariant * v = (TVariant *) _tot.objptr(recset->current_row()); TVariant * v = (TVariant *) _tot.objptr(recset->current_row());
var = v != NULL ? *v : NULL_VARIANT; var = v != NULL ? *v : NULL_VARIANT;
return true; return true;
} }
return false; return false;
} }
return TDocument_report::get_usr_val(name, var); return TDocument_report::get_usr_val(name, var);
@ -146,6 +147,7 @@ class TRiepBolle_app: public TSkeleton_application
{ {
protected: protected:
void elabora(const TMask& mask) const; void elabora(const TMask& mask) const;
public: public:
virtual void main_loop(); virtual void main_loop();
}; };
@ -220,58 +222,60 @@ void TRiepBolle_app::elabora(const TMask& mask)const
TRiepBolle_recordset* riep_set = new TRiepBolle_recordset(last_col); TRiepBolle_recordset* riep_set = new TRiepBolle_recordset(last_col);
((TReport &)rep).set_recordset(riep_set); ((TReport &)rep).set_recordset(riep_set);
if (docsi > 0) int count = 1;
for(bool ok = docs.move_first(); ok; ok = docs.move_next())
{ {
TProgress_monitor pi_art(docsi, TR("Estrazione articoli")); const TDocumento d = docs.cursor()->curr();
int count = 1;
for(bool ok = docs.move_first(); ok && pi_art.add_status(); ok = docs.move_next()) int id = -1;
FOR_EACH_PHYSICAL_RDOC(d, r, rdoc)
{ {
const TDocumento d(docs.cursor()->curr()); const TRiga_documento& row = *rdoc;
const TDate data = d.get_date(DOC_DATADOC); const TCodice_articolo articolo = row.get(RDOC_CODARTMAG);
const TString8 numero = d.get(DOC_NDOC); if (articolo.blank())
const int nrows = d.physical_rows(); continue;
const int id = nbolle.add(numero);
TString8 ggmm; ggmm.format("%02d-%02d", data.day(), data.month());
datebolle.add(ggmm, id); //se la causale è di reso devo leggere il ritirato e non il consegnato
const TCausale_lavanderie& cau = cached_causale_lavanderie(row.get(RDOC_CODAGG1));
real qta;
for (int r = 1; r <= nrows; r++) if (cau.is_reso())
{ {
const TRiga_documento & row = d[r]; if (print_resi)
const TString articolo = row.get(RDOC_CODARTMAG);
//se la causale è di reso devo leggere il ritirato e non il consegnato
TCausale_lavanderie & cau = cached_causale_lavanderie(row.get(RDOC_CODAGG1));
real qta;
if (print_resi && cau.is_reso())
qta = row.get_real(RDOC_QTAGG1); qta = row.get_real(RDOC_QTAGG1);
else }
else
{
const TCausale_magazzino& caumag = cached_causale_magazzino(cau.get("S2"));
if (!print_da_fatt || caumag.get("S2").mid(36, 2) == "+1")
qta = row.get_real(RDOC_QTA);
}
if (!qta.is_zero())
{
if (id < 0)
{ {
TCausale_magazzino & caumag = cached_causale_magazzino(cau.get("S2")); const TString8 numero = d.get(DOC_NDOC);
if (!print_da_fatt || caumag.get("S2").mid(36, 2) == "+1") id = nbolle.add(numero);
qta = row.get_real(RDOC_QTA);
const TDate data = d.get_date(DOC_DATADOC);
TString8 ggmm; ggmm.format("%02d-%02d", data.day(), data.month());
datebolle.add(ggmm, id);
} }
if (qta != ZERO)
{
TArray * riep_row = (TArray *) riepilogo.objptr(articolo);
if(riep_row == NULL) TArray* riep_row = (TArray*)riepilogo.objptr(articolo);
riepilogo.add(articolo, riep_row = new TArray); if (riep_row == NULL)
real * q = (real *) riep_row->objptr(id); riepilogo.add(articolo, riep_row = new TArray);
real* q = (real*)riep_row->objptr(id);
if (q == NULL) if (q == NULL)
riep_row->add(q = new real, id); riep_row->add(q = new real, id);
*q += qta;
*q += qta;
}
} }
} }
} }
if (!riepilogo.empty()) if (!riepilogo.empty())
{ {
TProgress_monitor pi(riepilogo.items(), TR("Costruzione report"));
int maxpos = 0L; int maxpos = 0L;
const int cols = nbolle.items(); const int cols = nbolle.items();
TString_array keys; TString_array keys;
@ -281,7 +285,7 @@ void TRiepBolle_app::elabora(const TMask& mask)const
riep_set->first_loop(); riep_set->first_loop();
FOR_EACH_ARRAY_ROW(keys, r, key)//scandisce clienti e tiene buoni solo quelli valorizzati FOR_EACH_ARRAY_ROW(keys, r, key)//scandisce clienti e tiene buoni solo quelli valorizzati
{ {
TArray * row = (TArray *) riepilogo.objptr(*key); TArray * row = (TArray*)riepilogo.objptr(*key);
int col = 0; int col = 0;
riep_set->new_rec(); riep_set->new_rec();
@ -313,8 +317,6 @@ void TRiepBolle_app::elabora(const TMask& mask)const
for (int i = 0 ; i < loops; i++, riep_set->next_loop()) for (int i = 0 ; i < loops; i++, riep_set->next_loop())
b.add(rep); b.add(rep);
} }
if (!pi.add_status())
break;
} }
} }
if (b.pages() > 0) if (b.pages() > 0)

View File

@ -72,6 +72,7 @@ END
DATE F_DATA_DA DATE F_DATA_DA
BEGIN BEGIN
PROMPT 2 6 "Da Data " PROMPT 2 6 "Da Data "
FIELD #F_DATA_FROM
END END
DATE F_DATA_A DATE F_DATA_A
@ -80,6 +81,7 @@ BEGIN
FLAGS "A" FLAGS "A"
VALITATE DATE_CMP_FUNC >= F_DATA_DA VALITATE DATE_CMP_FUNC >= F_DATA_DA
WARNING "La data finale deve essere successiva a quella iniziale" WARNING "La data finale deve essere successiva a quella iniziale"
FIELD #F_DATA_TO
END END
GROUPBOX DLG_NULL 78 3 GROUPBOX DLG_NULL 78 3