Patch level :2.1 712
Files correlati :ve2.exe ve2200c.msk Ricompilazione Demo : [ ] Commento : http://www.aga.it/mantis/bug_view_advanced_page.php?bug_id=0000077#bugnotes git-svn-id: svn://10.65.10.50/trunk@11880 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
698b5586d7
commit
e3f6916b0d
175
ve/ve2200.cpp
175
ve/ve2200.cpp
@ -10,6 +10,9 @@
|
||||
#include "ve2200.h"
|
||||
#include "ve2300x.h" // include anche il file dei campi della maschera delle righe
|
||||
#include "veconf.h"
|
||||
#include "condv.h"
|
||||
#include "rcondv.h"
|
||||
#include "../mg/umart.h"
|
||||
|
||||
// nome dell'applicazione di gestione delle righe
|
||||
#define RCONDVEN_APP "ve2 -2 "
|
||||
@ -26,7 +29,8 @@ static void key_disable(TMask & m, short id, int key = 1)
|
||||
m.disable(id);
|
||||
}
|
||||
|
||||
class TCondizioni_vendita: public TRelation_application {
|
||||
class TCondizioni_vendita: public TRelation_application
|
||||
{
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
|
||||
@ -85,7 +89,8 @@ TMask_copy::TMask_copy(const TMask& m, const bool enable_catven) : TAutomask("ve
|
||||
|
||||
|
||||
|
||||
TCondizioni_vendita &app() { // funzione che ritorna il riferimento alla classe principale dell'applicazione
|
||||
TCondizioni_vendita &app()
|
||||
{ // funzione che ritorna il riferimento alla classe principale dell'applicazione
|
||||
return (TCondizioni_vendita &)main_app();
|
||||
}
|
||||
|
||||
@ -241,13 +246,15 @@ bool TCondizioni_vendita::user_create()
|
||||
return gotcha;
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::user_destroy() {
|
||||
bool TCondizioni_vendita::user_destroy()
|
||||
{
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::handle_mask(TMask &m, KEY k) {
|
||||
bool TCondizioni_vendita::handle_mask(TMask &m, KEY k)
|
||||
{
|
||||
if (k==K_F5) { // se viene premuto F5 o selezionato il tasto "Righe" viene lanciata l'applicazione di editing
|
||||
TString &_condven= app()._condven; // prende l'indicatore del tipo di archivio
|
||||
bool &_codlis_catven= app()._codlis_catven; // prende il booleano di attivazione del campo CATVEN
|
||||
@ -282,8 +289,10 @@ bool TCondizioni_vendita::handle_mask(TMask &m, KEY k) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::handle_datacam(TMask_field &fld, KEY k) {
|
||||
if (k==K_TAB) { // ad ogni perdita di fuoco viene tentato un accoppiamento tra valuta e data per ottenere il cambio preciso
|
||||
bool TCondizioni_vendita::handle_datacam(TMask_field &fld, KEY k)
|
||||
{
|
||||
if (k==K_TAB)
|
||||
{ // ad ogni perdita di fuoco viene tentato un accoppiamento tra valuta e data per ottenere il cambio preciso
|
||||
TString datacam(fld.get()); // legge la data di cambio nel campo corrente
|
||||
if (datacam.not_empty()) {
|
||||
TMask &m= fld.mask(); // prende la maschera principale
|
||||
@ -298,139 +307,183 @@ bool TCondizioni_vendita::handle_datacam(TMask_field &fld, KEY k) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::handle_valfin(TMask_field &fld, KEY k) {
|
||||
if (k==K_TAB) {
|
||||
if (fld.get().not_empty()) {
|
||||
bool TCondizioni_vendita::handle_valfin(TMask_field &fld, KEY k)
|
||||
{
|
||||
if (k==K_TAB)
|
||||
{
|
||||
if (fld.get().not_empty())
|
||||
{
|
||||
TMask &m= fld.mask(); // prende la maschera principale
|
||||
if (m.get(F_VALIN).not_empty()) {
|
||||
if (m.get(F_VALIN).not_empty())
|
||||
{
|
||||
TDate valfin(fld.get()); // prende la data di fine validità
|
||||
TDate valin(m.get(F_VALIN)); // prende la data di inizio validità
|
||||
if (valfin<valin) {
|
||||
error_box("La data di inizio validità deve essere minore della data di fine");
|
||||
return FALSE;
|
||||
}
|
||||
if (valfin<valin)
|
||||
return error_box("La data di inizio validità deve essere minore della data di fine");
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::handle_codsucc(TMask_field &fld, KEY k) {
|
||||
if (k==K_TAB) {
|
||||
bool TCondizioni_vendita::handle_codsucc(TMask_field &fld, KEY k)
|
||||
{
|
||||
if (k==K_TAB)
|
||||
{
|
||||
TString &_condven= app()._condven; // prende il tipo di archivio dall'applicazione principale
|
||||
TString codsucc(fld.get()); // prende il codice successivo dal campo corrente
|
||||
if (codsucc.not_empty()) {
|
||||
if (codsucc.not_empty())
|
||||
{
|
||||
TMask &m= fld.mask(); // prende la maschera principale
|
||||
TString cod; // istanzia la stringa per il codice corrente
|
||||
switch (_condven[0]) {
|
||||
switch (_condven[0])
|
||||
{
|
||||
case 'L': cod= m.get(F_L_COD); break; // prende il codice listino corrente dal campo della maschera
|
||||
case 'C': cod= m.get(F_C_COD); break; // prende il codice contratto dal campo della maschera
|
||||
}
|
||||
if (codsucc == cod) {
|
||||
error_box("Il codice successivo deve essere diverso dal codice corrente");
|
||||
return FALSE;
|
||||
}
|
||||
if (codsucc == cod)
|
||||
return error_box("Il codice successivo deve essere diverso dal codice corrente");
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int TCondizioni_vendita::read(TMask &m) {
|
||||
int TCondizioni_vendita::read(TMask &m)
|
||||
{
|
||||
m.enable(BTN_RIGHE);
|
||||
return (TRelation_application::read(m));
|
||||
}
|
||||
|
||||
int TCondizioni_vendita::write(const TMask &m) {
|
||||
int TCondizioni_vendita::write(const TMask &m)
|
||||
{
|
||||
m.autosave(*_rel); // scrive il contenuto della maschera nel record della relazione
|
||||
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
|
||||
if (_condven != "C") f.zero("TIPOCF"); // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
|
||||
if (_condven != "C")
|
||||
f.zero("TIPOCF"); // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
|
||||
_rel->write(); // invoca la scrittura della relazione
|
||||
return (_rel->status()); // ritorna lo stato della relazione
|
||||
}
|
||||
|
||||
int TCondizioni_vendita::rewrite(const TMask &m) {
|
||||
int TCondizioni_vendita::rewrite(const TMask &m)
|
||||
{
|
||||
m.autosave(*_rel); // scrive il contenuto della maschera nel record della relazione
|
||||
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
|
||||
if (_condven != "C") f.zero("TIPOCF"); // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
|
||||
if (_condven != "C")
|
||||
f.zero("TIPOCF"); // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
|
||||
_rel->rewrite(); // invoca la riscrittura della relazione
|
||||
return (_rel->status()); // ritorna lo stato della relazione
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::remove() {
|
||||
bool TCondizioni_vendita::remove()
|
||||
{
|
||||
TLocalisamfile &condv= _rel->lfile(); // prende il file della testata dalla relazione principale
|
||||
TLocalisamfile rcondv(LF_RCONDV); // apre il file delle righe per ottenenre il record corrente
|
||||
TRectype delrec(rcondv.curr()); // istanzia il record basato sul file delle righe, da usare come campione
|
||||
delrec.zero(); // svuota il record campione
|
||||
delrec.put("TIPO", _condven); // setta il tipo di archivio
|
||||
delrec.put("COD", condv.get("COD")); // setta il codice della testata
|
||||
if ((_condven=="L") && _codlis_catven) delrec.put("CATVEN", condv.get("CATVEN")); // setta la categoria di vendita se è abilitata e siamo nei listini
|
||||
if (_condven=="C") {
|
||||
delrec.put("TIPOCF", condv.get("TIPOCF")); // setta i dati del cliente/fornitore se siamo nei contratti
|
||||
delrec.put("CODCF", condv.get("CODCF"));
|
||||
delrec.put(RCONDV_TIPO, _condven); // setta il tipo di archivio
|
||||
delrec.put(RCONDV_COD, condv.get("COD")); // setta il codice della testata
|
||||
if ((_condven=="L") && _codlis_catven)
|
||||
delrec.put(RCONDV_CATVEN, condv.get(CONDV_CATVEN)); // setta la categoria di vendita se è abilitata e siamo nei listini
|
||||
if (_condven=="C")
|
||||
{
|
||||
delrec.put(RCONDV_TIPOCF, condv.get(CONDV_TIPOCF)); // setta i dati del cliente/fornitore se siamo nei contratti
|
||||
delrec.put(RCONDV_CODCF, condv.get(CONDV_CODCF));
|
||||
}
|
||||
TRelation delrel(LF_RCONDV); // istanzia una relazione sulle righe
|
||||
TCursor delcur(&delrel, "", 1, &delrec, &delrec); // istanzia il cursore di cancellazione sulla relazione delle righe
|
||||
long n= delcur.items(); // legge il numero di elementi del cursore
|
||||
delcur.freeze(); // congela il cursore al suo stato attuale
|
||||
bool proceed= FALSE; // istanzia il booleano di conferma alla cancellazione
|
||||
if (n==1) proceed= yesno_box("Esiste una riga collegata a questa testata: verrà anch'essa cancellata. Procedo?"); // viene richiesta conferma alla cancellazione della riga...
|
||||
if (n>1) proceed= yesno_box("Esistono %ld righe collegate a questa testata: verranno anch'esse cancellate. Procedo?", n); // ...o delle righe
|
||||
if (proceed) { // se si conferma le righe vengono cancellate
|
||||
if (n==1)
|
||||
proceed = yesno_box("Esiste una riga collegata a questa testata: verrà anch'essa cancellata. Procedo?"); // viene richiesta conferma alla cancellazione della riga...
|
||||
if (n>1)
|
||||
proceed = yesno_box("Esistono %ld righe collegate a questa testata: verranno anch'esse cancellate. Procedo?", n); // ...o delle righe
|
||||
if (proceed)
|
||||
{ // se si conferma le righe vengono cancellate
|
||||
TLocalisamfile &delfile= delcur.file(); // prende riferimento al file delle righe dal cursore
|
||||
for (delcur=0; delcur.pos()<n; ++delcur) delfile.remove(); // ciclo sugli elementi del cursore, cancella i record del file delle righe
|
||||
for (delcur=0; delcur.pos()<n; ++delcur)
|
||||
delfile.remove(); // ciclo sugli elementi del cursore, cancella i record del file delle righe
|
||||
}
|
||||
return (TRelation_application::remove()); // viene invocata la funzione standard di cancellazione del record corrente
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool TCondizioni_vendita::handle_copy(TMask_field &b, KEY k)
|
||||
{
|
||||
if (k==K_SPACE)
|
||||
{
|
||||
TMask& msk = b.mask();
|
||||
TMask& msk = b.mask(); //maschera principale
|
||||
TMask_copy m(msk, app().codlis_catven()); // gli passo la maschera del bottone copia (cioé la maschera principale ve2200x)
|
||||
if (m.run()==K_ENTER)
|
||||
{
|
||||
TRelation rel(LF_RCONDV); // creo un relazione sul file delle righe delle condizioni di vendita
|
||||
TRectype rec(LF_RCONDV); // creo il record che usa nel filtro; case in base al tipo documentovendita
|
||||
TRectype& rec = rel.curr(); // creo il record che usa nel filtro; case in base al tipo documentovendita
|
||||
rec.put("TIPO",m.get(F_TIPO));
|
||||
TString16 newcode; //var stringa in cui mettere il nuovo codice del listino/contratto/offerta
|
||||
|
||||
switch(m.get(F_TIPO)[0])
|
||||
|
||||
const char tipo = m.get(F_TIPO)[0];
|
||||
switch(tipo)
|
||||
{
|
||||
case 'L':
|
||||
rec.put("CATVEN",m.get(F_L_CATVEN));
|
||||
rec.put("COD",m.get(F_L_COD));
|
||||
rec.put(RCONDV_CATVEN,m.get(F_L_CATVEN));
|
||||
rec.put(RCONDV_COD,m.get(F_L_COD));
|
||||
newcode = msk.get(F_L_COD);
|
||||
break;
|
||||
case 'C':
|
||||
rec.put("TIPOCF",m.get(F_C_TIPOCF));
|
||||
rec.put("CODCF",m.get(F_C_CODCF));
|
||||
rec.put("COD",m.get(F_C_COD));
|
||||
rec.put(RCONDV_TIPOCF,m.get(F_C_TIPOCF));
|
||||
rec.put(RCONDV_CODCF,m.get(F_C_CODCF));
|
||||
rec.put(RCONDV_COD,m.get(F_C_COD));
|
||||
newcode = msk.get(F_C_COD);
|
||||
break;
|
||||
case 'O':
|
||||
rec.put("COD",m.get(F_O_COD));
|
||||
rec.put(RCONDV_COD,m.get(F_O_COD));
|
||||
newcode = msk.get(F_O_COD);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
TCursor curs(&rel,"",1,&rec,&rec); //creo anche il cursore della relazione, con chiave 1(codice) e record iniz. e fin. uguali nel filtro
|
||||
const long items = curs.items(); // metto in items il numero di elementi del cursore
|
||||
curs.freeze();
|
||||
TProgind bar(items,"Scansione righe di origine", FALSE, TRUE); //barra di avanzamento
|
||||
if(tipo == 'L' && m.get(F_L_COD).blank()) //genera listino da umart
|
||||
{
|
||||
TRelation rel_umart(LF_UMART); //relazione su umart da cui prendo codici e prezzi
|
||||
TRectype& rec_umart = rel_umart.curr();
|
||||
TCursor curs(&rel_umart);
|
||||
const long items = curs.items(); // metto in items il numero di elementi del cursore
|
||||
curs.freeze();
|
||||
TProgind bar(items,"Scansione articoli", FALSE, TRUE); //barra di avanzamento
|
||||
|
||||
for (curs=0; curs.pos() < items; ++curs)
|
||||
for (curs=0; curs.pos() < items; ++curs)
|
||||
{
|
||||
bar.addstatus(1);
|
||||
//riempie le righe del nuovo listino generato da umart
|
||||
rec.put(RCONDV_TIPO, 'L');
|
||||
rec.put(RCONDV_CATVEN, msk.get(F_L_CATVEN));
|
||||
rec.put(RCONDV_COD, newcode);
|
||||
rec.put(RCONDV_TIPORIGA, 'A');
|
||||
rec.put(RCONDV_CODRIGA, rec_umart.get(UMART_CODART));
|
||||
rec.put(RCONDV_UM, rec_umart.get(UMART_UM));
|
||||
rec.put(RCONDV_PREZZO, rec_umart.get(UMART_PREZZO));
|
||||
int err = rel.write();
|
||||
if (err == _isreinsert && m.get(F_OVERWRITE))
|
||||
rel.rewrite();
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
bar.addstatus(1);
|
||||
curs.curr().put("COD", newcode);
|
||||
int err = rel.write();
|
||||
if (err == _isreinsert && m.get(F_OVERWRITE))
|
||||
rel.rewrite();
|
||||
}
|
||||
TCursor curs(&rel,"",1,&rec,&rec); //creo anche il cursore della relazione, con chiave 1(codice) e record iniz. e fin. uguali nel filtro
|
||||
const long items = curs.items(); // metto in items il numero di elementi del cursore
|
||||
curs.freeze();
|
||||
TProgind bar(items,"Scansione righe di origine", FALSE, TRUE); //barra di avanzamento
|
||||
|
||||
for (curs=0; curs.pos() < items; ++curs)
|
||||
{
|
||||
bar.addstatus(1);
|
||||
rec.put(RCONDV_COD, newcode);
|
||||
int err = rel.write();
|
||||
if (err == _isreinsert && m.get(F_OVERWRITE))
|
||||
rel.rewrite();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
|
@ -68,7 +68,7 @@ BEGIN
|
||||
OUTPUT F_L_CATVEN CATVEN
|
||||
OUTPUT F_L_COD COD
|
||||
OUTPUT F_DESCR DESCR
|
||||
CHECKTYPE REQUIRED
|
||||
CHECKTYPE NORMAL //puo' essere vuoto quando si copia dalla anagrafica
|
||||
END
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user