Patch level : 10.0 patch 501
Files correlati : lv3 lvlib(->lv2) Ricompilazione Demo : [ ] Commento : Aggiunta la gestione dei codici pagamento e magazzino in testata documenti e IVA sulle righe Aggiunta gestione evasione dei buoni da barcode Corretto metodo read della classe TRiga_pacco git-svn-id: svn://10.65.10.50/trunk@19577 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
854e5f28de
commit
c675dcd8f6
238
lv/lv3200.cpp
238
lv/lv3200.cpp
@ -24,11 +24,15 @@
|
||||
//classe TEvasione_msk
|
||||
class TEvasione_msk: public TAutomask
|
||||
{
|
||||
TDocumento _buonori;
|
||||
TDocumento _buonori;
|
||||
|
||||
int _ndoc;
|
||||
int _autoselect;
|
||||
|
||||
TString4 _tpev;
|
||||
int _righevase;
|
||||
|
||||
TAssoc_array _pacchi;
|
||||
|
||||
|
||||
protected:
|
||||
void setta_campi_data();
|
||||
@ -48,6 +52,7 @@ protected:
|
||||
|
||||
void evadi_da_barcode();
|
||||
|
||||
virtual void on_idle();
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
public:
|
||||
@ -205,8 +210,6 @@ 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);
|
||||
|
||||
@ -245,9 +248,7 @@ void TEvasione_msk::carica_righe()
|
||||
if (rdoc.qta_dacons() > 0)
|
||||
{
|
||||
TToken_string& riga = sheet.row(-1);
|
||||
riga.add(rdoc.evaso() ? "X" : "", sheet.cid2index(S_EVASO));
|
||||
if(rdoc.evaso())
|
||||
_righevase++;
|
||||
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));
|
||||
@ -336,6 +337,15 @@ void TEvasione_msk::genera_documento()
|
||||
consegne.move_first();
|
||||
const TDate dataprco = consegne.get(LVRCONSPLAN_DTCONS).as_date();
|
||||
const int coditi = consegne.get(LVRCONSPLAN_CODITI).as_int();
|
||||
|
||||
//recupero il codpag
|
||||
TToken_string key;
|
||||
key.add('C');
|
||||
key.add(codcf);
|
||||
const TString4 codpag = cache().get(LF_CLIFO, key, CLI_CODPAG);
|
||||
|
||||
//reupero la cuasale di magazzino di testata
|
||||
const TString16 causmag = cache().get("%TIP", tipodoc, "S9");
|
||||
|
||||
//preparo la testata del documento
|
||||
TDocumento doc('D', kdoc.anno(), codnum, ++_ndoc);
|
||||
@ -345,6 +355,8 @@ void TEvasione_msk::genera_documento()
|
||||
doc.put(DOC_TIPOCF, 'C');
|
||||
doc.put(DOC_CODCF, codcf);
|
||||
doc.put(DOC_CODCONT, codcont);
|
||||
doc.put(DOC_CODPAG, codpag);
|
||||
doc.put(DOC_CAUSMAG, causmag);
|
||||
doc.put("DATAGEN", datagen); //data generazione del documento
|
||||
doc.put("DATAPRCO", dataprco); //data prevista consegna
|
||||
doc.put("CODITI", coditi); //codice itinerario
|
||||
@ -525,6 +537,7 @@ void TEvasione_msk::salva()
|
||||
{
|
||||
TDoc_key kdoc(get_int(F_ANNO), get(F_CODNUM), get_long(F_NDOC));
|
||||
TBuono_prelievo doc(kdoc);
|
||||
TDate datadoc = doc.get_date(DOC_DATADOC);
|
||||
|
||||
TLaundry_contract cont(get_long(F_CODCF), get_long(F_CODCONT));
|
||||
|
||||
@ -605,6 +618,60 @@ void TEvasione_msk::salva()
|
||||
rdoc.set_magc(magazzinoc);
|
||||
}
|
||||
doc.rewrite();
|
||||
|
||||
//se sto evadendo tramite barcode quando salvo salvo anche tutti i pacchi associati
|
||||
//generando i movimenti di magazzino di scarico
|
||||
if (_tpev == "B")
|
||||
{
|
||||
TLocalisamfile pacchi(LF_PACCHI);
|
||||
TLocalisamfile movi(LF_MOVMAG);
|
||||
|
||||
//cerco l'ultimo numero di chiave in movmag
|
||||
TISAM_recordset mov("USE MOVMAG");
|
||||
long nummov = 0;
|
||||
|
||||
if(mov.move_last())
|
||||
nummov += mov.get(MOVMAG_NUMREG).as_int();
|
||||
|
||||
const TCausale_magazzino causale((ini_get_string(CONFIG_DITTA, "lv", "CAUSCARMAG")));
|
||||
TString8 magazzino;
|
||||
magazzino << ini_get_string(CONFIG_DITTA, "lv", "CODMAG") << ini_get_string(CONFIG_DITTA, "lv", "CODMAGP");
|
||||
|
||||
TEsercizi_contabili es;
|
||||
int annoes = es.date2esc(datadoc);
|
||||
|
||||
TMov_mag movmag(++nummov);
|
||||
movmag.put(MOVMAG_ANNOES, annoes);
|
||||
movmag.put(MOVMAG_DATAREG, datadoc);
|
||||
movmag.put(MOVMAG_CODCAUS, causale.codice());
|
||||
|
||||
FOR_EACH_ASSOC_OBJECT(_pacchi, o, codpacco, rifdoc)
|
||||
{
|
||||
TDoc_key kdoc = *(TToken_string*)rifdoc;
|
||||
|
||||
TRiga_pacco rp(codpacco);
|
||||
const TString80 codart = rp.articolo();
|
||||
const long qta = rp.quantita().integer();
|
||||
|
||||
//recupero l'unità di misura principale di quest'articolo
|
||||
TToken_string key;
|
||||
key.add(codart);
|
||||
key.add(1);
|
||||
const TString4 um = cache().get(LF_UMART, key, UMART_UM);
|
||||
|
||||
rp.set_rigabolla(kdoc.anno(), kdoc.codnum(), kdoc.ndoc(), 0); //SOLUZIONE MOMENTANEA PER VEDERE SE FUNZIONA TUTTO
|
||||
rp.rewrite(pacchi);
|
||||
|
||||
//faccio la nuova riga del movimento di magazzino
|
||||
TRectype& rmovmag = movmag.new_row();
|
||||
rmovmag.put(RMOVMAG_CODMAG, magazzino);
|
||||
rmovmag.put(RMOVMAG_CODART, codart);
|
||||
|
||||
rmovmag.put(RMOVMAG_UM, um);
|
||||
rmovmag.put(RMOVMAG_QUANT, qta);
|
||||
}
|
||||
movmag.write(movi);
|
||||
}
|
||||
}
|
||||
|
||||
//ANNULLA_OPERAZIONI: metodo elimina tutte le quantità scritte durante l'ultima evasione
|
||||
@ -612,6 +679,7 @@ void TEvasione_msk::salva()
|
||||
void TEvasione_msk::annulla_operazioni()
|
||||
{
|
||||
//ANNULLA PACCHI
|
||||
_pacchi.destroy();
|
||||
|
||||
//elimino lo sheet senza salvarlo
|
||||
TSheet_field& sheet = sfield(F_RIGHE);
|
||||
@ -716,63 +784,108 @@ void TEvasione_msk::evadi_da_barcode()
|
||||
|
||||
if (codpacco.full())
|
||||
{
|
||||
const TRiga_pacco rp(codpacco);
|
||||
const TString80 codart = rp.articolo();
|
||||
const long qtapacco = rp.quantita().integer();
|
||||
|
||||
TSheet_field& sheet = sfield(F_RIGHE);
|
||||
|
||||
TDoc_key kdoc(get_int(F_ANNO), get(F_CODNUM), get_int(F_NDOC));
|
||||
const int pospa = sheet.cid2index(S_PACCHI);
|
||||
const int posco = sheet.cid2index(S_CONSEGNATO);
|
||||
|
||||
TRiga_pacco rp(codpacco);
|
||||
TString80 codart = rp.articolo();
|
||||
int qtapacco = rp.quantita().integer();
|
||||
|
||||
bool trovato = false;
|
||||
|
||||
//cerco la prima riga non evasa di quell'articolo
|
||||
FOR_EACH_SHEET_ROW(sheet, r, riga)
|
||||
//se il pacco è già stato pistolettato lo tolgo dai pacchi da evadere, altrimenti cerco di sommarlo
|
||||
//a una riga documento esistente
|
||||
if (_pacchi.is_key(codpacco))
|
||||
{
|
||||
if (riga->get(sheet.cid2index(S_CODART)) == codart && riga->get(sheet.cid2index(S_EVASO)) != "X")
|
||||
_pacchi.remove(codpacco);
|
||||
FOR_EACH_SHEET_ROW(sheet, r, riga)
|
||||
{
|
||||
int pacchi = riga->get_int(sheet.cid2index(S_PACCHI)); pacchi += 1;
|
||||
int qtacon = riga->get_int(sheet.cid2index(S_CONSEGNATO)); qtacon += qtapacco;
|
||||
const TString80 scodart = riga->get(sheet.cid2index(S_CODART));
|
||||
const char sevaso = riga->get_char(sheet.cid2index(S_EVASO));
|
||||
|
||||
riga->add(pacchi, sheet.cid2index(S_PACCHI));
|
||||
riga->add(qtacon, sheet.cid2index(S_CONSEGNATO));
|
||||
|
||||
trovato = true;
|
||||
|
||||
if (_pacchi.is_key(codpacco))
|
||||
_pacchi.remove(codpacco);
|
||||
else
|
||||
_pacchi.add(codpacco, kdoc);
|
||||
}
|
||||
}
|
||||
|
||||
if (!trovato)
|
||||
{
|
||||
if(yesno_box(TR("Si desidera provare a sommare il pacco a una riga già evasa?")))
|
||||
{
|
||||
FOR_EACH_SHEET_ROW(sheet, r, riga)
|
||||
if (scodart == codart)
|
||||
{
|
||||
if (riga->get(sheet.cid2index(S_CODART)) == codart)
|
||||
{
|
||||
int pacchi = riga->get_int(sheet.cid2index(S_PACCHI)); pacchi += 1;
|
||||
int qtacon = riga->get_int(sheet.cid2index(S_CONSEGNATO)); qtacon += qtapacco;
|
||||
int qtadacon = riga->get_int(sheet.cid2index(S_DACONS));
|
||||
int pacchi = riga->get_int(pospa); pacchi -= 1;
|
||||
int qtacon = riga->get_int(posco); qtacon -= qtapacco;
|
||||
|
||||
riga->add(pacchi, sheet.cid2index(S_PACCHI));
|
||||
riga->add(qtacon, sheet.cid2index(S_CONSEGNATO));
|
||||
riga->add(pacchi, pospa);
|
||||
riga->add(qtacon, posco);
|
||||
|
||||
trovato = true;
|
||||
if (_pacchi.is_key(codpacco))
|
||||
_pacchi.remove(codpacco);
|
||||
else
|
||||
_pacchi.add(codpacco, kdoc);
|
||||
|
||||
}
|
||||
if(qtacon <= qtadacon && sevaso == 'X')
|
||||
riga->add("", sheet.cid2index(S_EVASO));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TDoc_key kdoc(get_int(F_ANNO), get(F_CODNUM), get_int(F_NDOC));
|
||||
|
||||
if (!trovato)
|
||||
warning_box(TR("Non è stato possibile sommare il pacco a nessuna riga del buono"));
|
||||
bool trovato = false;
|
||||
//cerco la prima riga non evasa di quell'articolo
|
||||
FOR_EACH_SHEET_ROW(sheet, r, riga)
|
||||
{
|
||||
const TString80 scodart = riga->get(sheet.cid2index(S_CODART));
|
||||
const char sevaso = riga->get_char(sheet.cid2index(S_EVASO));
|
||||
if (scodart == codart && sevaso != 'X')
|
||||
{
|
||||
int qtadacon = riga->get_int(sheet.cid2index(S_DACONS));
|
||||
int pacchi = riga->get_int(pospa); pacchi += 1;
|
||||
int qtacon = riga->get_int(posco); qtacon += qtapacco;
|
||||
|
||||
riga->add(pacchi, pospa);
|
||||
riga->add(qtacon, posco);
|
||||
|
||||
if (qtacon > qtadacon)
|
||||
{
|
||||
warning_box(TR("ATTENZIONE: si sta consegnando un quantitativo maggiore al dovuto"));
|
||||
riga->add('X', sheet.cid2index(S_EVASO));
|
||||
}
|
||||
|
||||
if (qtacon == qtadacon)
|
||||
riga->add('X', sheet.cid2index(S_EVASO));
|
||||
|
||||
trovato = true;
|
||||
_pacchi.add(codpacco, kdoc);
|
||||
}
|
||||
}
|
||||
|
||||
if (!trovato)
|
||||
{
|
||||
if(yesno_box(TR("Si desidera provare a sommare il pacco a una riga già evasa?")))
|
||||
{
|
||||
FOR_EACH_SHEET_ROW(sheet, r, riga)
|
||||
{
|
||||
const TString80 scodart = riga->get(sheet.cid2index(S_CODART));
|
||||
if (scodart == codart)
|
||||
{
|
||||
int pacchi = riga->get_int(pospa); pacchi += 1;
|
||||
int qtacon = riga->get_int(posco); qtacon += qtapacco;
|
||||
|
||||
riga->add(pacchi, pospa);
|
||||
riga->add(qtacon, posco);
|
||||
|
||||
trovato = true;
|
||||
_pacchi.add(codpacco, kdoc);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!trovato)
|
||||
warning_box(TR("Non è stato possibile sommare il pacco a nessuna riga del buono"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TEvasione_msk:: on_idle()
|
||||
{
|
||||
TMask::on_idle();
|
||||
if (_autoselect >= 0 && get(F_BARCODE).full())
|
||||
{
|
||||
reset(F_BARCODE);
|
||||
field(F_BARCODE).set_focus();
|
||||
_autoselect = -1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -862,7 +975,20 @@ bool TEvasione_msk::on_field_event(TOperable_field& f, TField_event e, long joll
|
||||
if (e == fe_modify)
|
||||
setta_campi_cliente();
|
||||
}
|
||||
break;
|
||||
break;
|
||||
case F_BARCODE:
|
||||
{
|
||||
if (e == fe_modify && f.get().full())
|
||||
{
|
||||
_autoselect = 1;
|
||||
evadi_da_barcode();
|
||||
sfield(F_RIGHE).force_update();
|
||||
|
||||
if (controlla())
|
||||
send_key(K_SPACE, DLG_ELABORA);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case S_CONSEGNATO:
|
||||
{
|
||||
if (e == fe_modify)
|
||||
@ -872,7 +998,7 @@ bool TEvasione_msk::on_field_event(TOperable_field& f, TField_event e, long joll
|
||||
//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"));
|
||||
warning_box(TR("ATTENZIONE: si sta 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));
|
||||
@ -921,9 +1047,15 @@ TEvasione_msk::TEvasione_msk():TAutomask("lv3200a")
|
||||
_tpev = main_app().argv(2);
|
||||
|
||||
if (_tpev == "B")
|
||||
{
|
||||
_autoselect = 1;
|
||||
show(F_BARCODE);
|
||||
}
|
||||
else
|
||||
{
|
||||
_autoselect = -1;
|
||||
hide(F_BARCODE);
|
||||
}
|
||||
|
||||
hide(F_RIGHE);
|
||||
disable(DLG_SELECT);
|
||||
|
@ -1066,8 +1066,11 @@ bool TRiga_pacco::read(const TString& codpacco, const long codriga)
|
||||
{
|
||||
if (codpacco.full()) // Campo obbligatorio!
|
||||
{
|
||||
TString80 key; key.format("%s|%ld", codpacco, codriga);
|
||||
*((TRectype*)this) = cache().get(LF_PACCHI, key);
|
||||
TLocalisamfile pacchi(LF_PACCHI);
|
||||
put(PACCHI_CODPACCO, codpacco);
|
||||
put(PACCHI_CODRIGA, codriga);
|
||||
|
||||
TRectype::read(pacchi);
|
||||
}
|
||||
else
|
||||
zero();
|
||||
|
Loading…
x
Reference in New Issue
Block a user