Patch level : 10.0 patch 493

Files correlati     : lv3
Ricompilazione Demo : [ ]
Commento            :
8.	Nell’evasione dei buoni di prelievo, quando inserisco tutte le quantità e di fatto il buono di prelievo è evaso , il programma si deve accorgere che tutte le righe sono saldate e generare il buono di consegna  proponendomi prima la domanda “ vuoi stampare il buono di Consegna”


git-svn-id: svn://10.65.10.50/trunk@19551 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2009-10-30 10:00:15 +00:00
parent 51b412c7b7
commit 594e9524ec

View File

@ -17,40 +17,6 @@
#include "lv3200a.h"
////////////////////////////////
//// TPOSIZIONE_ARRAY ////
////////////////////////////////
//classe TPosizione_array
class TPosizione_array: public TObject
{
TAssoc_array _pos;
public:
void aggiungi(const char* key, int pos);
int posizione(const char* key);
TPosizione_array(){};
};
//AGGIUNGI: metodo che aggiunge una coppia di valori all'array
void TPosizione_array::aggiungi(const char* key, const int pos)
{
real tmp = pos;
_pos.add(key, tmp);
}
//POSIZIONE: metodo che data una chiave restituisce la posizione (-1 se non esiste)
int TPosizione_array::posizione(const char* key)
{
long posizione = -1;
if (_pos.is_key(key))
{
real& tmp = *(real*)_pos.objptr(key);
posizione = tmp.integer();
}
return posizione;
}
/////////////////////////////
//// TEVASIONE_MSK ////
/////////////////////////////
@ -58,12 +24,11 @@ int TPosizione_array::posizione(const char* key)
//classe TEvasione_msk
class TEvasione_msk: public TAutomask
{
TDocumento _buonori;
TPosizione_array _posizioni;
int _ndoc;
TString4 _tpev;
TAssoc_array _pacchi;
TDocumento _buonori;
int _ndoc;
TString4 _tpev;
int _righevase;
TAssoc_array _pacchi;
protected:
void setta_campi_data();
@ -240,6 +205,8 @@ void TEvasione_msk::setta_campi_cliente()
//CARICA_RIGHE: metodo che carica sullo sheet le righe di un documento selezionato
void TEvasione_msk::carica_righe()
{
_righevase = 0;
TDoc_key kdoc(get_int(F_ANNO), get(F_CODNUM), get_long(F_NDOC));
TBuono_prelievo doc(kdoc);
@ -269,21 +236,6 @@ void TEvasione_msk::carica_righe()
}
TSheet_field& sheet = sfield(F_RIGHE);
sheet.row(-1);
//preparo l'array delle posizioni dei campi nello sheet
_posizioni.aggiungi("evaso", sheet.cid2index(S_EVASO));
_posizioni.aggiungi("codart", sheet.cid2index(S_CODART));
_posizioni.aggiungi("desrart", sheet.cid2index(S_ARTDESCR));
_posizioni.aggiungi("causale", sheet.cid2index(S_CAUSALE));
_posizioni.aggiungi("ritirato", sheet.cid2index(S_RITIRATO));
_posizioni.aggiungi("dacons", sheet.cid2index(S_DACONS));
_posizioni.aggiungi("consegnato", sheet.cid2index(S_CONSEGNATO));
_posizioni.aggiungi("pacchi", sheet.cid2index(S_PACCHI));
_posizioni.aggiungi("congpre", sheet.cid2index(S_CONGPRE));
_posizioni.aggiungi("congatt", sheet.cid2index(S_CONGATT));
_posizioni.aggiungi("rifbcon", sheet.cid2index(S_RIFBCON));
_posizioni.aggiungi("rifbrit", sheet.cid2index(S_RIFBRIT));
sheet.destroy();
for(int i = 1; i <= doc.rows(); i++)
{
@ -293,29 +245,32 @@ void TEvasione_msk::carica_righe()
if (rdoc.qta_dacons() > 0)
{
TToken_string& riga = sheet.row(-1);
riga.add(rdoc.evaso() ? "X" : "", _posizioni.posizione("evaso"));
riga.add(rdoc.codart(), _posizioni.posizione("codart"));
riga.add(rdoc.desart(), _posizioni.posizione("artdescr"));
riga.add(rdoc.causale(), _posizioni.posizione("causale"));
riga.add(rdoc.qta_ritirata(), _posizioni.posizione("ritirato"));
riga.add(rdoc.qta_dacons(), _posizioni.posizione("dacons"));
riga.add(rdoc.qta_consegnata(), _posizioni.posizione("consegnato"));
riga.add(rdoc.evaso() ? "X" : "", sheet.cid2index(S_EVASO));
if(rdoc.evaso())
_righevase++;
riga.add(rdoc.codart(), sheet.cid2index(S_CODART));
riga.add(rdoc.desart(), sheet.cid2index(S_ARTDESCR));
riga.add(rdoc.causale(), sheet.cid2index(S_CAUSALE));
riga.add(rdoc.qta_ritirata(), sheet.cid2index(S_RITIRATO));
riga.add(rdoc.qta_dacons(), sheet.cid2index(S_DACONS));
riga.add(rdoc.qta_consegnata(), sheet.cid2index(S_CONSEGNATO));
const TRectype& anamag = cache().get(LF_ANAMAG, rdoc.codart());
//recupero i dati di interesse dall'anagrafica di magazzino
const long ppconf = anamag.get_long(ANAMAG_PPCONF);
if (ppconf > 0)
riga.add(rdoc.num_pacchi(), _posizioni.posizione("pacchi"));
riga.add(rdoc.num_pacchi(), sheet.cid2index(S_PACCHI));
else
{
riga.add(0, _posizioni.posizione("pacchi"));
sheet.disable_cell(i, _posizioni.posizione("pacchi"));
riga.add(0, sheet.cid2index(S_PACCHI));
sheet.disable_cell(i, sheet.cid2index(S_PACCHI));
}
riga.add(rdoc.cong_pre(), _posizioni.posizione("congpre"));
riga.add(rdoc.cong_att(), _posizioni.posizione("congatt"));
riga.add(rdoc.rifbcon(), _posizioni.posizione("rifbcon"));
riga.add(rdoc.rifbrit(), _posizioni.posizione("rifbrit"));
riga.add(rdoc.cong_pre(), sheet.cid2index(S_CONGPRE));
riga.add(rdoc.cong_att(), sheet.cid2index(S_CONGATT));
riga.add(rdoc.rifbcon(), sheet.cid2index(S_RIFBCON));
riga.add(rdoc.rifbrit(), sheet.cid2index(S_RIFBRIT));
}
else
rdoc.set_evaso(true);
@ -521,8 +476,8 @@ void TEvasione_msk::genera_documento()
//EVADI_TUTTO: metodo che forza a "evaso" tutte le righe e lancia la generazione del buono di consegna associato
void TEvasione_msk::evadi_tutto()
{
const int posevaso = _posizioni.posizione("evaso");
TSheet_field& sheet = sfield(F_RIGHE);
const int posevaso = sheet.cid2index(S_EVASO);
FOR_EACH_SHEET_ROW(sheet, r, riga)
{
@ -538,20 +493,20 @@ void TEvasione_msk::spezza_riga()
FOR_EACH_SHEET_ROW_BACK(sheet, r, riga1)
{
char flgev = riga1->get_char(_posizioni.posizione("evaso"));
char flgev = riga1->get_char(sheet.cid2index(S_EVASO));
if (flgev != 'X')
{
TToken_string& riga2 = sheet.row(-1);
riga2 = *riga1;
const int dacons2 = riga2.get_int(_posizioni.posizione("ritirato")) - riga2.get_int(_posizioni.posizione("consegnato"));
riga2.add(dacons2, _posizioni.posizione("dacons"));
riga2.add(0L, _posizioni.posizione("consegnato"));
riga2.add(0L, _posizioni.posizione("pacchi"));
const int dacons2 = riga2.get_int(sheet.cid2index(S_RITIRATO)) - riga2.get_int(sheet.cid2index(S_CONSEGNATO));
riga2.add(dacons2, sheet.cid2index(S_DACONS));
riga2.add(0L, sheet.cid2index(S_CONSEGNATO));
riga2.add(0L, sheet.cid2index(S_PACCHI));
const int dacons1 = riga1->get_int(_posizioni.posizione("ritirato")) - riga1->get_int(_posizioni.posizione("consegnato"));
riga1->add(dacons1, _posizioni.posizione("dacons"));
riga1->add("X", _posizioni.posizione("evaso"));
const int dacons1 = riga1->get_int(sheet.cid2index(S_RITIRATO)) - riga1->get_int(sheet.cid2index(S_CONSEGNATO));
riga1->add(dacons1, sheet.cid2index(S_DACONS));
riga1->add("X", sheet.cid2index(S_EVASO));
}
}
sheet.sort(sort_by_codart);
@ -587,7 +542,7 @@ void TEvasione_msk::salva()
TRiga_documento& row = doc.new_row("21");
TBuono_prelievo_row rdoc(row);
const char flgev = riga->get(_posizioni.posizione("evaso"))[0];
const char flgev = riga->get(sheet.cid2index(S_EVASO))[0];
bool flag;
if (flgev == 'X')
flag = true;
@ -595,17 +550,17 @@ void TEvasione_msk::salva()
flag = false;
rdoc.set_evaso(flag);
rdoc.set_codart(riga->get(_posizioni.posizione("codart")));
rdoc.set_desart(riga->get(_posizioni.posizione("artdescr")));
rdoc.set_causale(riga->get(_posizioni.posizione("causale")));
rdoc.set_qta_ritirata(riga->get_int(_posizioni.posizione("ritirato")));
rdoc.set_qta_dacons(riga->get_int(_posizioni.posizione("dacons")));
rdoc.set_qta_consegnata(riga->get_int(_posizioni.posizione("consegnato")));
rdoc.set_num_pacchi(riga->get_int(_posizioni.posizione("pacchi")));
rdoc.set_cong_att(riga->get_int(_posizioni.posizione("congpre")));
rdoc.set_cong_pre(riga->get_int(_posizioni.posizione("congatt")));
rdoc.set_rifbcon(riga->get(_posizioni.posizione("rifbcon")));
rdoc.set_rifbrit(riga->get(_posizioni.posizione("rifbrit")));
rdoc.set_codart(riga->get(sheet.cid2index(S_CODART)));
rdoc.set_desart(riga->get(sheet.cid2index(S_ARTDESCR)));
rdoc.set_causale(riga->get(sheet.cid2index(S_CAUSALE)));
rdoc.set_qta_ritirata(riga->get_int(sheet.cid2index(S_RITIRATO)));
rdoc.set_qta_dacons(riga->get_int(sheet.cid2index(S_DACONS)));
rdoc.set_qta_consegnata(riga->get_int(sheet.cid2index(S_CONSEGNATO)));
rdoc.set_num_pacchi(riga->get_int(sheet.cid2index(S_PACCHI)));
rdoc.set_cong_att(riga->get_int(sheet.cid2index(S_CONGPRE)));
rdoc.set_cong_pre(riga->get_int(sheet.cid2index(S_CONGATT)));
rdoc.set_rifbcon(riga->get(sheet.cid2index(S_RIFBCON)));
rdoc.set_rifbrit(riga->get(sheet.cid2index(S_RIFBRIT)));
}
doc.rewrite();
}
@ -626,29 +581,29 @@ void TEvasione_msk::annulla_operazioni()
TBuono_prelievo_row rdoc(row);
TToken_string& riga = sheet.row(-1);
riga.add(rdoc.evaso() ? "X" : "", _posizioni.posizione("evaso"));
riga.add(rdoc.codart(), _posizioni.posizione("codart"));
riga.add(rdoc.desart(), _posizioni.posizione("artdescr"));
riga.add(rdoc.causale(), _posizioni.posizione("causale"));
riga.add(rdoc.qta_ritirata(), _posizioni.posizione("ritirato"));
riga.add(rdoc.qta_dacons(), _posizioni.posizione("dacons"));
riga.add(rdoc.qta_consegnata(), _posizioni.posizione("consegnato"));
riga.add(rdoc.evaso() ? "X" : "", sheet.cid2index(S_EVASO));
riga.add(rdoc.codart(), sheet.cid2index(S_CODART));
riga.add(rdoc.desart(), sheet.cid2index(S_ARTDESCR));
riga.add(rdoc.causale(), sheet.cid2index(S_CAUSALE));
riga.add(rdoc.qta_ritirata(), sheet.cid2index(S_RITIRATO));
riga.add(rdoc.qta_dacons(), sheet.cid2index(S_DACONS));
riga.add(rdoc.qta_consegnata(), sheet.cid2index(S_CONSEGNATO));
const TRectype& anamag = cache().get(LF_ANAMAG, rdoc.codart());
//recupero i dati di interesse dall'anagrafica di magazzino
const long ppconf = anamag.get_long(ANAMAG_PPCONF);
if (ppconf > 0)
riga.add(rdoc.num_pacchi(), _posizioni.posizione("pacchi"));
riga.add(rdoc.num_pacchi(), sheet.cid2index(S_PACCHI));
else
{
riga.add(0, _posizioni.posizione("pacchi"));
sheet.disable_cell(i, _posizioni.posizione("pacchi"));
riga.add(0, sheet.cid2index(S_PACCHI));
sheet.disable_cell(i, sheet.cid2index(S_PACCHI));
}
riga.add(rdoc.cong_pre(), _posizioni.posizione("congpre"));
riga.add(rdoc.cong_att(), _posizioni.posizione("congatt"));
riga.add(rdoc.rifbcon(), _posizioni.posizione("rifbcon"));
riga.add(rdoc.rifbrit(), _posizioni.posizione("rifbrit"));
riga.add(rdoc.cong_pre(), sheet.cid2index(S_CONGPRE));
riga.add(rdoc.cong_att(), sheet.cid2index(S_CONGATT));
riga.add(rdoc.rifbcon(), sheet.cid2index(S_RIFBCON));
riga.add(rdoc.rifbrit(), sheet.cid2index(S_RIFBRIT));
}
sheet.force_update();
}
@ -662,7 +617,7 @@ bool TEvasione_msk::controlla()
FOR_EACH_SHEET_ROW(sheet, r, row)
{
const char flgev = row->get(_posizioni.posizione("evaso"))[0];
const char flgev = row->get(sheet.cid2index(S_EVASO))[0];
if (flgev != 'X')
evaso = false;
}
@ -733,13 +688,13 @@ void TEvasione_msk::evadi_da_barcode()
//cerco la prima riga non evasa di quell'articolo
FOR_EACH_SHEET_ROW(sheet, r, riga)
{
if (riga->get(_posizioni.posizione("codart")) == codart && riga->get(_posizioni.posizione("evaso")) != "X")
if (riga->get(sheet.cid2index(S_CODART)) == codart && riga->get(sheet.cid2index(S_EVASO)) != "X")
{
int pacchi = riga->get_int(_posizioni.posizione("pacchi")); pacchi += 1;
int qtacon = riga->get_int(_posizioni.posizione("consegnato")); qtacon += qtapacco;
int pacchi = riga->get_int(sheet.cid2index(S_PACCHI)); pacchi += 1;
int qtacon = riga->get_int(sheet.cid2index(S_CONSEGNATO)); qtacon += qtapacco;
riga->add(pacchi, _posizioni.posizione("pacchi"));
riga->add(qtacon, _posizioni.posizione("consegnato"));
riga->add(pacchi, sheet.cid2index(S_PACCHI));
riga->add(qtacon, sheet.cid2index(S_CONSEGNATO));
trovato = true;
@ -756,13 +711,13 @@ void TEvasione_msk::evadi_da_barcode()
{
FOR_EACH_SHEET_ROW(sheet, r, riga)
{
if (riga->get(_posizioni.posizione("codart")) == codart)
if (riga->get(sheet.cid2index(S_CODART)) == codart)
{
int pacchi = riga->get_int(_posizioni.posizione("pacchi")); pacchi += 1;
int qtacon = riga->get_int(_posizioni.posizione("consegnato")); qtacon += qtapacco;
int pacchi = riga->get_int(sheet.cid2index(S_PACCHI)); pacchi += 1;
int qtacon = riga->get_int(sheet.cid2index(S_CONSEGNATO)); qtacon += qtapacco;
riga->add(pacchi, _posizioni.posizione("pacchi"));
riga->add(qtacon, _posizioni.posizione("consegnato"));
riga->add(pacchi, sheet.cid2index(S_PACCHI));
riga->add(qtacon, sheet.cid2index(S_CONSEGNATO));
trovato = true;
if (_pacchi.is_key(codpacco))
@ -871,16 +826,27 @@ bool TEvasione_msk::on_field_event(TOperable_field& f, TField_event e, long joll
{
if (e == fe_modify)
{
TMask& msk = sfield(F_RIGHE).sheet_mask();
TSheet_field& sheet = sfield(F_RIGHE);
TMask& msk = sheet.sheet_mask();
//la riga risulta evasa se la quantità consegnata è maggiore o uguale alla quantità da consegnare
if(msk.get_long(S_CONSEGNATO) > msk.get_long(S_DACONS))
{
warning_box(TR("ATTENZIONE: stai consegnando un quantitativo maggiore al dovuto"));
msk.set(S_EVASO, "X");
TToken_string& riga = sheet.row(sheet.selected());
riga.add("X", sheet.cid2index(S_EVASO));
}
else if (msk.get_long(S_CONSEGNATO) == msk.get_long(S_DACONS))
{
msk.set(S_EVASO, "X");
TToken_string& riga = sheet.row(sheet.selected());
riga.add("X", sheet.cid2index(S_EVASO));
}
sistema_pacchi();
if (controlla())
genera_documento();
}
}
break;