Patch level : 10.0 patch 493
Files correlati : lv3 Ricompilazione Demo : [ ] Commento : 8. Nellevasione 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:
parent
51b412c7b7
commit
594e9524ec
198
lv/lv3200.cpp
198
lv/lv3200.cpp
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user