campo-sirio/ve/velib04d.cpp
alex 1df67d66c8 Patch level :
Files correlati     :
Ricompilazione Demo : [ ]
Commento            : Riportata la verione 98.01.04 sul main trunk


git-svn-id: svn://10.65.10.50/trunk@6986 c028cbd2-c16b-5b4b-a496-9718f37d4682
1998-08-25 18:07:30 +00:00

188 lines
4.8 KiB
C++
Executable File

#include <automask.h>
#include "velib.h"
#include "velib04d.h"
#include <doc.h>
#include <rdoc.h>
///////////////////////////////////////////////////////////
// TConsegna ordini mask
///////////////////////////////////////////////////////////
class TConsegna_mask : public TAutomask
{
protected:
virtual bool on_field_event(class TOperable_field& f, TField_event e, long jolly);
public:
void doc2mask(const TDocumento& doc);
TConsegna_mask() : TAutomask("velib04d") { }
virtual ~TConsegna_mask() { }
};
bool TConsegna_mask::on_field_event(class TOperable_field& f, TField_event e, long jolly)
{
switch (f.dlg())
{
case S_QTADAEVADERE:
if (e == fe_modify)
{
TMask& m = f.mask();
const real qta_residua = m.get_real(S_QTARESIDUA);
const real qta_daevadere = m.get_real(S_QTADAEVADERE);
if (qta_daevadere > ZERO)
{
m.set(S_RIGACONSEGNATA, "X");
if (qta_daevadere >= qta_residua)
{
m.set(S_RIGAEVASA, "X");
m.disable(S_RIGAEVASA);
}
else
m.enable(S_RIGAEVASA);
}
else
{
m.set(S_RIGAEVASA, " ");
m.enable(S_RIGAEVASA);
}
}
break;
case F_CONSEGNA:
if (e == fe_button)
{
TSheet_field& s = sfield(F_ROWS);
FOR_EACH_SHEET_ROW(s, n, row)
{
const real residuo = row->get(S_QTARESIDUA-FIRST_FIELD);
const real evaso = row->get(S_QTADAEVADERE-FIRST_FIELD);
if (evaso == ZERO && residuo > ZERO)
{
row->add(residuo.string(), S_QTADAEVADERE-FIRST_FIELD);
row->add("X", S_RIGAEVASA-FIRST_FIELD);
s.disable_cell(n, S_RIGAEVASA-FIRST_FIELD);
}
row->add("X", S_RIGACONSEGNATA-FIRST_FIELD);
}
s.force_update();
}
break;
case F_ROWS:
if (e == se_query_add || e == se_query_del)
return FALSE;
default:break;
}
return TRUE;
}
void TConsegna_mask::doc2mask(const TDocumento& doc)
{
for (int n = fields()-1; n >= 0; n--)
{
TMask_field& f = fld(n);
const TFieldref* fr = f.field();
if (fr)
{
const TString& val = doc.get(fr->name());
f.set(val);
}
}
TSheet_field& s = sfield(F_ROWS);
s.destroy();
const int rows = doc.physical_rows();
for (int i = 0; i < rows; i++)
{
const TRiga_documento& rec = doc[i+1];
TToken_string& r = s.row(i);
r = " ";
bool evasa = rec.get_bool(RDOC_RIGAEVASA);
const real residuo = rec.get_real(RDOC_QTA) - rec.get_real(RDOC_QTAEVASA);
if (residuo <= ZERO)
{
r.add(" ");
evasa = TRUE;
}
else
r.add(residuo.string());
r.add(" "); // Da evadere
if (evasa)
{
s.disable_cell(i, -1);
r.add("X");
}
else
r.add(" ");
r.add(rec.get(RDOC_CODMAG).left(3));
r.add(rec.get(RDOC_CODMAG).mid(3));
r.add(rec.get(RDOC_CODART));
r.add(rec.get(RDOC_DESCR));
r.add(rec.get(RDOC_TIPORIGA));
}
}
///////////////////////////////////////////////////////////
// TConsegna ordini
///////////////////////////////////////////////////////////
TConsegna_ordini::TConsegna_ordini(const char* cod)
: TElaborazione(cod)
{
}
bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo)
{
const int items_in = doc_in.items();
const int items_out = doc_out.items();
CHECK(items_in > 0, "Nessun documento da elaborare");
CHECK(items_out> 0, "Nessun documento da generare");
CHECK(items_in == 1 || items_out == 1 || items_out == items_in,
"Numero di documenti da elborare 'strano'");
bool ok = TRUE;
TConsegna_mask m;
const int items_max = items_in > items_out ? items_in : items_out;
for (int d = 0; d < items_max && ok; d++)
{
TDocumento& indoc = doc_in[d < items_in ? d : 0];
TDocumento& outdoc = doc_out[d < items_out ? d : 0];
m.doc2mask(indoc);
ok = m.run() == K_ENTER;
if (ok)
{
TSheet_field& s = m.sfield(F_ROWS);
FOR_EACH_SHEET_ROW(s, n, row) if (*row->get(0) > ' ')
{
TRiga_documento& inrec = indoc[n+1];
const real daeva = row->get(S_QTADAEVADERE - FIRST_FIELD);
if (daeva > ZERO)
{
const real qtaevasa = inrec.get_real(RDOC_QTAEVASA) + daeva;
inrec.put(RDOC_QTAEVASA, qtaevasa);
inrec.put(RDOC_RIGAEVASA, row->get(S_RIGAEVASA - FIRST_FIELD));
}
const TString16 tiporiga = inrec.get(RDOC_TIPORIGA);
TRiga_documento& outrec = outdoc.new_row(tiporiga);
outrec = inrec;
outrec.set_numero(outdoc.physical_rows());
outrec.put(RDOC_QTA, daeva);
outrec.zero(RDOC_QTAEVASA);
outrec.zero(RDOC_RIGAEVASA);
}
}
if (indoc.is_evaso())
{
indoc.stato(stato_finale()[0]);
}
}
return ok;
}